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
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= 可从外部访问Pushgateway 的URL
- - 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
③プロメテウスへのアクセス
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 をチェックしてください。