Prometheus Pushgetwayの原理分析と実際の動作をクラウドネイティブで徹底分析

1. プッシュゲートウェイの紹介

  • Pushgateway は Prometheus のコンポーネントです。Prometheus サーバーは、デフォルトで Exporter を通じてアクティブにデータを取得し (デフォルトではデータのプルに pull が使用されます)、Pushgateway は Exporter を通じてデータを Pushgateway にアクティブにプッシュし、Prometheus は Pushgateway データをアクティブにプルします。ユーザーはいくつかのカスタムを書くことができます監視スクリプトは、監視対象のデータを Pushgateway に送信します。Prometheus サーバーの観点から見ると、さまざまなデータ ソース (エクスポーターやプッシュゲートウェイなど) からデータをアクティブにプルするのは Prometheus サーバーです。
  • プッシュゲートウェイの利点:
    • Prometheus は、デフォルトでタイミング プル モードを使用してターゲット データをプルしますが、サブネットまたはファイアウォール内にない場合、Prometheus はターゲット データをプルできません。そのため、各ターゲットを使用してプッシュゲートウェイにデータをプッシュすると、Prometheus は次のようになります。 Pushgateway に送信して定期的にデータを取得します。
    • ビジネスデータを監視する場合、さまざまなデータを要約する必要がありますが、要約されたデータは Pushgateway によって収集され、Prometheus によってプルされるため、Prometheus への負担が軽減されます。
    • カスタム コレクション インジケーターはシンプルです。
  • プッシュゲートウェイの欠点:
    • Prometheus のプル ステータスは Pushgateway に対してのみであり、すべてのノードに対して有効ではありません。
    • Pushgateway に問題がある場合、収集されたデータ全体にも問題が発生します。
    • Pushgateway は、プッシュされたすべての監視データを永続化できるため、監視がオフラインであっても、Prometheus は引き続き古い監視データをプルするため、Pushgateway が必要としないデータを手動でクリーンアップする必要があります。
  • Prometheus について詳しく知りたい場合は、以下を参照してください。
  • Prometheus の全体的な分析については、私の以前のブログ「Prometheus のインストールと展開のクラウド ネイティブの詳細な分析と原理分析」を参照してください。

ここに画像の説明を挿入

2. プッシュゲートウェイのアーキテクチャ

  • Pushgateway は、データ プロデューサーがいつでもデータをプッシュできるようにサポートする API を提供するデータ転送ステーションです。
  • Pushgatewayはエクスポーター機能を提供しており、Promethusサーバーがデータをプルする際に、自身が保存したデータをPromethusサーバーにフィードバックします。

ここに画像の説明を挿入

3. Prometheusサーバーのインストール

①ダウンロード

  • Prometheus は Golang に基づいて作成されています。コンパイルされたソフトウェア パッケージは、サードパーティの依存関係に依存しません。対応するプラットフォームのバイナリ パッケージをダウンロードし、解凍し、基本設定を追加するだけで、Prometheus Server を通常どおり起動できます: (ダウンロード アドレス:プロメテウスサーバー) :
wget https://github.com/prometheus/prometheus/releases/download/v2.40.6/prometheus-2.40.6.linux-amd64.tar.gz

tar -xf prometheus-2.40.6.linux-amd64.tar.gz

②構成

  • 解凍後、現在のディレクトリにはデフォルトの Prometheus 構成ファイル promethes.yml が含まれます。次の構成ファイルを簡単に分析します。
# 全局配置
global:
  scrape_interval:     15s # 设置抓取间隔,默认为1分钟
  evaluation_interval: 15s #估算规则的默认周期,每15秒计算一次规则。默认1分钟
  # scrape_timeout  #默认抓取超时,默认为10s

# Alertmanager相关配置
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# 规则文件列表,使用'evaluation_interval' 参数去抓取
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

#  抓取配置列表
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

③サービスを開始する

# 查看帮助
./prometheus -h

# 直接启动服务,但是不提倡这种,因为退出控制台服务也就退出了,虽然可以加nohup启动,但是也不是特别友好,下面将配置prometheus.server启动
# 默认端口是:9090,如需要修改默认端口,可以使用--web.listen-address=:9099,还可以指定配置文件--config.file=prometheus.yml
./prometheus
  • prometheus.service 起動スクリプトを構成します。
cat >/usr/lib/systemd/system/prometheus.service<<EOF
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/prometheus_server/prometheus-2.40.6.linux-amd64/prometheus --config.file=/opt/prometheus/prometheus_server/prometheus-2.40.6.linux-amd64/prometheus.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
  • サービスを開始します。
# 执行 systemctl daemon-reload 命令重新加载systemd
systemctl daemon-reload
# 启动
systemctl start prometheus
# 检查
systemctl status prometheus
netstat -tnlp|grep :9090
ps -ef|grep prometheus

ここに画像の説明を挿入

  • Web アクセス http://ip:9090:

ここに画像の説明を挿入

4. プッシュゲートウェイのインストール

①ダウンロード

wget https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz

②サービスを開始する

# 查看帮助
./pushgateway  -h

# 启动服务,这里也不使用直接启动的方式,配置pushgateway.service启动
./pushgateway
  • デフォルトのリスニング ポートは 9091 ですが、次の設定によって変更できます。
usage: pushgateway [<flags>]
Flags:
      --web.listen-address=":9091"  		监听Web界面,API和遥测的地址
      --web.telemetry-path="/metrics"  		公开metrics的路径
      --web.external-url=        			可从外部访问PushgatewayURL
      --web.route-prefix=""      			Web端点内部路由的前缀。 默认为--web.external-url的路径
      --persistence.file=""      			归档以保留metrics。 如果为空,则metrics仅保留在内存中
      --persistence.interval=5m  			写入持久性文件的最小间隔
      --log.level="info"         			仅记录具有给定严重性或更高严重性的消息。 有效级别:[debug, info, warn, error, fatal]
      --log.format="logger:stderr"  		设置日志目标和格式,示例:“ logger:syslog?appname = bob&local = 7”或“ logger:stdout?json = true--version                  			显示应用程序版本
  • Pushgateway.service 起動スクリプトを構成します。
cat >/usr/lib/systemd/system/pushgateway.service<<EOF
[Unit]
Description=Pushgetway
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/pushgateway/pushgateway-1.5.1.linux-amd64/pushgateway
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
  • サービスを開始します。
# 执行 systemctl daemon-reload 命令重新加载systemd
systemctl daemon-reload
# 启动
systemctl start pushgateway
# 检查
systemctl status pushgateway
netstat -tnlp|grep :9091
ps -ef|grep pushgateway

ここに画像の説明を挿入

  • Web アクセス IP:9091/メトリック:

ここに画像の説明を挿入

③プロメテウスへのアクセス

  • prometheus 構成ファイルを変更し、次の内容を追加します。
  - job_name: 'pushgateway_name' 
    scrape_interval: 30s 
    honor_labels: true  #加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖 
    static_configs: 
        - targets: ["192.168.182.110:9091"] 
          labels: 
              instance: pushgateway_instance               
# pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少
  • Prometheus サービスを再起動するか、ホット ロードを実行します。
# curl -X POST http://192.168.182.110:9090/-/reload
systemctl restatus prometheus
  • prometheus Web インターフェイス http://ip:9090/targets を再度確認します。

ここに画像の説明を挿入

5. 実践的な操作デモンストレーション

①プッシュデータ

  • プッシュ パスの URL 部分は次のように定義されます (ジョブは必須パラメータ、label_name 部分はオプションで、URL 内のジョブとラベルの組み合わせによってプッシュゲートウェイ内のグループを一意に識別します)。
/metrics/job/<JOB_NAME>{
    
    /<LABEL_NAME>/<LABEL_VALUE>}
  • プッシュされたデータ セクションでは、形式が次のように定義されます。
## TYPE metric_name type
metric_name{
    
    lable_name="label_value",...}  value
  • {job="some_job"} データとして定義されたグループをプッシュします。
echo "some_metric 3.14" | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job
  • {job="some_job",instance="some_instance"} データとして定義されたグループをプッシュします。
#  --data-binary 表示发送二进制数据,注意:它是使用POST方式发送的!
cat <<EOF | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
  # TYPE some_metric counter
  some_metric2{
    
    label="val1"} 42
  # TYPE another_metric gauge
  # HELP another_metric Just an example.
  another_metric 2398.283
EOF

② データを削除する

  • {job="some_job"} として定義されたグループ内のすべてのデータを削除します。
curl -X DELETE http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
  • すべてのグループのすべてのメトリックを削除します (pushgateway の起動時にコマンド ライン パラメーター –web.enable-admin-api を追加する必要があります)。
curl -X PUT http://192.168.182.110:9091/api/v1/admin/wipe
  • 例証します:
    • データは、ジョブ名と URL 内のラベルによって一意に識別されるグループ単位で削除されます。
    • この例の {job="some_job"} データを削除するステートメントでは、{job="some_job"、instance="some_instance"} のデータは異なるグループに属しているため、削除されません。{job="some_job" を削除する必要がある場合は、 "、instance ="some_instance"} を使用する必要があります。
    • データの削除とは、pushgateway 内のデータを削除することを指しますが、promethue とは関係ありません。
  • 例のデモは公式によって提供されています

③スクリプトの書き方をカスタマイズし、プッシュゲートウェイコレクションを送信

  • テンプレートは次のとおりです。
cat <<EOF | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
# A histogram, which has a pretty complex representation in the text format:
# HELP http_request_duration_seconds A histogram of the request duration.
# TYPE http_request_duration_seconds histogram
disk_usage{
    
    instance="local-168-182-110",job="disk",disk_name="/run/user/0"} 11
disk_usage{
    
    instance="local-168-182-110",job="disk",disk_name="/run/user/1"} 22
disk_usage{
    
    instance="local-168-182-110",job="disk",disk_name="/run/user/2"} 33
disk_usage{
    
    instance="local-168-182-110",job="disk",disk_name="/run/user/3"} 44
disk_usage{
    
    instance="local-168-182-110",job="disk",disk_name="/run/user/4"} 55
EOF
  • データを Pushgateway にプッシュする収集スクリプトを作成します。
cat >disk_usage_metris.sh<<EOF
#!/bin/bash

hostname=`hostname -f | cut -d '.' -f1`

metrics=""
for line in `df |awk 'NR>1{
    
    print $NF "=" int($(NF-1))}'`
do
  disk_name=`echo $line|awk -F'=' '{
    
    print $1}'`
  disk_usage=`echo $line|awk -F'=' '{
    
    print $2}'`
  metrics="$metrics\ndisk_usage{instance=\"$hostname\",job=\"disk\",disk_name=\"$disk_name\"} $disk_usage"
done

echo -e "# A histogram, which has a pretty complex representation in the text format:\n# HELP http_request_duration_seconds A histogram of the request duration.\n# TYPE http_request_duration_seconds histogram\n$metrics" | curl --data-binary @- http://192.168.182.110:9091/metrics/job/pushgateway/instance/disk_usage
EOF
  • Pushgetway Web をチェックしてください。

ここに画像の説明を挿入

  • プロメテウス Web を表示:

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Forever_wj/article/details/131865621