Prometheus Pushgateway は、一時ジョブおよびバッチ ジョブがメトリクスを Prometheus に公開できるようにするために存在します。この種のジョブはスクレイピングできるほど長く存在しない可能性があるため、代わりにメトリクスを Pushgateway にプッシュできます。その後、Pushgateway はこれらのメトリクスを Prometheus に公開します。
まず第一に、Pushgateway は Prometheus をプッシュベースの監視システムに変えることができません。 Pushgateway の使用例の一般的な説明については、「Pushgateway を使用する場合」を参照してください。
Pushgateway は、明らかにアグリゲーターや分散カウンターではなく、メトリック キャッシュです。 statsd のようなセマンティクスはありません。プッシュされるメトリクスは、永続的に実行されるプログラムでスクレイピング用に提示されるものとまったく同じです。分散カウントが必要な場合は、実際の statsd を Prometheus statsd エクスポーターと組み合わせて使用するか、prom-aggregation-gateway を確認することができます。より多くの経験が蓄積されれば、Prometheus プロジェクトはいつか、Pushgateway とは別に、あるいは場合によってはその一部として、ネイティブ ソリューションを提供できるようになるかもしれません。
マシンレベルのメトリクスの場合は、通常、ノード エクスポータのテキストファイル コレクタの方が適切です。 Pushgateway は、サービスレベルのメトリクスを対象としています。
Pushgateway はイベント ストアではありません。 Prometheus を Grafana アノテーションのデータ ソースとして使用できますが、リリース イベントなどの追跡は、何らかのイベント ログ フレームワークを使用して行う必要があります。
少し前に、提案されたほぼすべてのユースケースがアンチパターンであることが判明したため、プッシュされたメトリクスに対して「タイムアウト」または TTL を実装しないことを決定しました。 prometheus-developers メーリング リストで、より最近のディスカッションをフォローすることができます。
リリース ページからプラットフォーム用のバイナリ リリースをダウンロードし、tarball を解凍します。
ソースから自分でコンパイルしたい場合は、動作する Go セットアップが必要です。次に、提供された Makefile ( make
と入力) を使用します。
最も基本的なセットアップでは、バイナリを起動するだけです。リッスンするアドレスを変更するには、 --web.listen-address
フラグを使用します (例: 「0.0.0.0:9091」または「:9091」)。デフォルトでは、Pushgateway はメトリクスを保持しません。ただし、 --persistence.file
フラグを使用すると、プッシュされたメトリクスが永続化されるファイルを指定できます (Pushgateway の再起動後もメトリクスが存続するようになります)。
prom/pushgateway Docker イメージを使用して Pushgateway をデプロイできます。
例えば:
docker pull prom/pushgateway
docker run -d -p 9091:9091 prom/pushgateway
Pushgateway は、通常の方法のいずれかを使用して、Prometheus によるスクレイピングのターゲットとして構成する必要があります。ただし、スクレイピング設定では常にhonor_labels: true
を設定する必要があります(詳細については以下を参照してください)。
Prometheus クライアント ライブラリには、登録されたメトリクスを Pushgateway にプッシュする機能が必要です。通常、Prometheus クライアントは、Prometheus サーバーによるスクレイピング用のメトリクスを受動的に提示します。プッシュをサポートするクライアント ライブラリにはプッシュ関数があり、クライアント コードによって呼び出す必要があります。次に、以下で説明する API を使用して、メトリクスを Pushgateway にアクティブにプッシュします。
Prometheus テキスト プロトコルを使用すると、メトリクスのプッシュが非常に簡単になるため、個別の CLI が提供されなくなります。単純に、 curl
などのコマンドライン HTTP ツールを使用します。お気に入りのスクリプト言語には、おそらくここでも活用できる組み込みの HTTP 機能がいくつかあります。
テキスト プロトコルでは、各行は改行文字 (別名「LF」または「n」) で終わる必要があることに注意してください。他の方法、たとえば「CR」別名「r」、「CRLF」別名「rn」、またはパケットの終わりだけで行を終了すると、プロトコル エラーが発生します。
プッシュされたメトリクスはグループで管理され、任意の数のラベルのグループ化キーによって識別されます。最初のラベルはjob
ラベルである必要があります。グループは Web インターフェイス経由で簡単に検査できます。
ラベル値における特殊文字の影響については、以下の URL セクションを参照してください。
例:
単一のサンプルを{job="some_job"}
で識別されるグループにプッシュします。
echo "some_metric 3.14" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
型情報が提供されていないため、 some_metric
型はuntyped
になります。
より複雑なものを{job="some_job",instance="some_instance"}
で識別されるグループにプッシュします。
cat <
型情報とヘルプ文字列がどのように提供されるかに注目してください。これらの行はオプションですが、より複雑な場合には使用することを強くお勧めします。
{job="some_job",instance="some_instance"}
で識別されるグループ内のすべてのメトリクスを削除します。
curl -X DELETE http://pushgateway.example.org:9091/metrics/job/some_job/instance/some_instance
{job="some_job"}
で識別されるグループ内のすべてのメトリクスを削除します (これには、前の例の{job="some_job",instance="some_instance"}
グループ内のメトリクスは含まれないことに注意してください。これらのメトリクスに同じジョブラベル):
curl -X DELETE http://pushgateway.example.org:9091/metrics/job/some_job
すべてのグループのすべてのメトリクスを削除します (コマンド ライン フラグ--web.enable-admin-api
を使用して管理 API を有効にする必要があります)。
curl -X PUT http://pushgateway.example.org:9091/api/v1/admin/wipe
Prometheus サーバーは、スクレイピングされた各メトリックにjob
ラベルとinstance
ラベルを添付します。 job
ラベルの値はスクレイピング構成から取得されます。 Pushgateway を Prometheus サーバーのスクレイピング ターゲットとして構成する場合、おそらく、 pushgateway
のようなジョブ名を選択することになります。 instance
ラベルの値は、スクレイピングされたターゲットのホストとポートに自動的に設定されます。したがって、Pushgateway から収集されたすべてのメトリクスには、 instance
ラベルとして Pushgateway のホストとポートが含まれ、 pushgateway
のようなjob
ラベルが含まれます。 Pushgateway にプッシュされたメトリクスに付けたjob
およびinstance
ラベルとの競合は、これらのラベルの名前をexported_job
およびexported_instance
に変更することで解決されます。
ただし、この動作は、Pushgateway をスクレイピングする場合には通常望ましくありません。一般に、Pushgateway にプッシュされたメトリクスのjob
とinstance
ラベルを保持したいと考えます。そのため、Pushgateway のスクレイピング設定でhonor_labels: true
を設定する必要があります。これにより、望ましい動作が可能になります。詳細についてはドキュメントを参照してください。
これにより、Pushgateway にプッシュされたメトリクスにinstance
ラベルが含まれないケースが残ります。プッシュされるメトリクスは多くの場合サービス レベルにあり、したがって特定のインスタンスに関連しないため、このケースは非常に一般的です。 honor_labels: true
を指定しても、最初からinstance
ラベルが設定されていない場合、Prometheus サーバーはinstance
ラベルを付加します。したがって、インスタンス ラベルなしでメトリクスが Pushgateway にプッシュされた場合 (およびグループ化キーにインスタンス ラベルなし、以下を参照)、Pushgateway は空のインスタンス ラベル ( {instance=""}
) を付けてメトリクスをエクスポートします。これは同等です。 instance
ラベルをまったく持たないようにしますが、サーバーがインスタンスラベルを添付することを防ぎます。
Pushgateway は、プッシュされたすべてのメトリクスを、同じ/metrics
エンドポイントを介して独自のメトリクスとともに公開します。 (詳細については、公開メトリクスに関するセクションを参照してください。) したがって、すべてのメトリクスは相互に一貫している必要があります。同じ名前のメトリクスは、異なるグループにプッシュされている場合でも同じタイプを持つ必要があり、重複があってはなりません。つまり、同じ名前とまったく同じラベルのペアを持つメトリクスです。不一致を引き起こす可能性のあるプッシュは、ステータス コード 400 で拒否されます。
ただし、一貫性のないヘルプ文字列は許容されます。 Pushgateway は、勝ったヘルプ文字列を選択し、それについて情報レベルでログに記録します。
従来の注意事項: Pushgateway 独自のpush_time_seconds
メトリックのヘルプ文字列は、v0.10.0 で変更されました。永続化ファイルを使用すると、以前のバージョンの Pushgateway にプッシュされたメトリクスを v0.10.0 以降の Pushgateway にできます。この場合、上記のログ メッセージが表示されます。以前にプッシュされた各グループが削除されるか、新しいプッシュを受信すると、ログ メッセージは消えます。
プッシュ中に実行される整合性チェックは、スクレイピング中に行われるのと同じです。一般的な使用例では、プッシュよりもスクレイピングの方が頻繁に発生します。したがって、プッシュ時間チェックのパフォーマンス コストは関係ありません。ただし、Pushgateway 上の大量のメトリクスが頻繁なプッシュと組み合わされると、プッシュ期間が法外に長くなる可能性があります。この場合、コマンド ライン フラグ--push.disable-consistency-check
の使用を検討してください。これにより、プッシュ中の一貫性チェックのコストが節約されますが、一貫性のないメトリクスをプッシュできます。チェックはスクレイピング中にも行われるため、一貫性のないメトリクスが Pushgateway に保存されている限り、すべてのスクレイピングは失敗します。したがって、フラグを設定すると、1 回の一貫性のないプッシュによってプッシュゲートウェイが無効になる危険があります。
時間t 1でメトリクスをプッシュすると、Prometheus が同じタイムスタンプt 1でメトリクスを収集すると信じたくなるかもしれません。代わりに、Prometheus がタイムスタンプとして添付するのは、Pushgateway をスクレイピングした時刻です。なぜそうなるのでしょうか?
Prometheus の世界観では、メトリクスはいつでもスクレイピングできます。スクレイピングできないメトリクスは基本的に存在しなくなりました。 Prometheus はある程度寛容ですが、5 分以内にメトリクスのサンプルを取得できない場合、そのメトリクスがもう存在しないかのように動作します。これを防ぐことが、実際にはプッシュゲートウェイを使用する理由の 1 つです。 Pushgateway を使用すると、一時的なジョブのメトリクスをいつでもスクレイピングできるようになります。最後のプッシュから 5 分後には、Prometheus にとってメトリクスは、もうスクレイピングできないかのように古いものに見えるため、プッシュ時間をタイムスタンプとして添付すると、その目的が果たせなくなります。 (Prometheus はサンプルごとに 1 つのタイムスタンプしか知りません。「プッシュの時間」と「スクレイピングの時間」を区別する方法はありません。)
別のタイムスタンプを付加することが意味のあるユースケースはなく、多くのユーザーが誤って付加しようとしているため (これをサポートするクライアント ライブラリがないにもかかわらず)、Pushgateway はタイムスタンプを含むプッシュを拒否します。
タイムスタンプをプッシュする必要があると思われる場合は、「プッシュゲートウェイを使用する場合」を参照してください。
失敗したプッシャーまたは最近実行されていないプッシャーに関するアラートを簡単に送信できるようにするために、Pushgateway は、最後に成功したPOST
/ PUT と失敗した POST / PUT
の Unix タイムスタンプを含むメトリクスpush_time_seconds
とpush_failure_time_seconds
を各グループに追加します。これにより、プッシュされたメトリックがその名前でオーバーライドされます。どちらのメトリックの値も 0 の場合は、そのグループでPOST
/ PUT
成功または失敗が一度もなかったことを意味します。
すべてのプッシュは HTTP 経由で行われます。インターフェイスはなんとなく REST に似ています。
Pushgateway がリッスンしているデフォルトのポートは 9091 です。パスは次のようになります。
/metrics/job/{//}
はjob
ラベルの値として使用され、その後に任意の数の他のラベル ペア ( instance
ラベルが含まれる場合と含まれない場合があります) が続きます。 URL パスで定義されたラベル セットがグループ化キーとして使用されます。リクエストの本文に既に設定されているラベル (通常のラベル、例: name{job="foo"} 42
) は、URL パスで定義されたラベルと一致するように上書きされます。
job
またはラベル名に@base64
という接尾辞が付いている場合、次のジョブ名またはラベル値は、URL およびファイル名の安全なアルファベットを使用して、RFC 4648 に従って Base64 でエンコードされた文字列として解釈されます。 (パディングはオプションですが、空のラベル値をエンコードするには単一の=
が必要です。)これが、次の場合を処理する唯一の方法です。
/
含むジョブ名またはラベル値。プレーンな (または URI エンコードされた) /
パス区切り文字として解釈されるためです。//
または末尾の/
が消えるため、空のラベル値。空のjob
名は無効であることに注意してください。空のラベル値は有効ですが、役立つことはほとんどありません。これらを Base64 でエンコードするには、 //
または末尾の/
避けるために、少なくとも 1 つの=
パディング文字を使用する必要があります。他の特殊文字の場合は、通常の URI コンポーネント エンコーディングも機能しますが、base64 の方が便利な場合があります。
理想的には、クライアント ライブラリがサフィックスとエンコーディングを処理します。
例:
グループ化キーjob="directory_cleaner",path="/var/tmp"
を使用する場合、次のパスは機能しません。
/metrics/job/directory_cleaner/path//var/tmp
代わりに、ラベル値に Base64 URL セーフ エンコーディングを使用し、ラベル名の末尾に@base64
を付けてマークします。
/metrics/job/directory_cleaner/path@base64/L3Zhci90bXA
エンコードを処理するクライアント ライブラリを使用していない場合は、エンコード ツールを使用できます。たとえば、コマンド ライン ツールbase64url
(Debian パッケージbasez
) があります。これを次の方法でcurl
と組み合わせてコマンド ラインからプッシュできます。
echo 'some_metric{foo="bar"} 3.14' | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/directory_cleaner/path@base64/$(echo -n '/var/tmp' | base64url)
job="example",first_label="",second_label="foobar"
などの空のラベル値を含むグループ化キーを使用する場合、次のパスは機能しません。
/metrics/job/example/first_label//second_label/foobar
代わりに、 =
パディング文字を含む次のパスを使用します。
/metrics/job/example/first_label@base64/=/second_label/foobar
グループ化キーjob="titan",name="Προμηθεύς"
URI エンコーディングを使用して「伝統的に」表現できます。
/metrics/job/titan/name/%CE%A0%CF%81%CE%BF%CE%BC%CE%B7%CE%B8%CE%B5%CF%8D%CF%82
または、よりコンパクトな Base64 エンコーディングを使用することもできます。
/metrics/job/titan/name@base64/zqDPgc6_zrzOt864zrXPjc-C
Prometheus 表示形式 (text および protobuf) の新しいバージョンでは、メトリック名およびラベル名で完全な UTF-8 文字セットがサポートされています。 Pushgateway は、コマンド ライン フラグ--push.enable-utf8-names
が設定されている場合にのみ、名前に特殊文字を受け入れます。 URL パスの一部であるラベル名に特殊文字を許可するために、このフラグは特定のエンコード メカニズムも有効にします。これは、上で説明したラベル値の Base64 エンコードに似ていますが、技術的および歴史的な理由により、詳細な動作は異なります。以前と同様に、通常はクライアント ライブラリがエンコードを処理する必要があります。次のように動作します。
U__
で始まります。_1F60A_
のように、Unicode 値を囲むアンダースコアとしてエンコードされます。__
としてエンコードされます。U__
で始まっている場合、これらの文字もエンコードする必要があり、結果はU___55_____
になります。 (つまり、 U__
+ _55_
( U
の場合) + __
+ __
です)。U__
で始まるが、無効なシーケンス (例: U__in_xxx_valid
) を含むラベル名は変更されません。たとえば、ラベル"foo.bar"="baz"
は次のようにエンコードされます。
/metrics/job/example/U__foo_2e_bar/baz
このエンコードは、ラベル値の Base64 エンコードと互換性があります。
/metrics/job/example/U__foo_2e_bar@base64/YmF6
このメソッドには、適切に処理されない、ありそうもないエッジ ケースがあることに注意してください。エンコード メカニズムを知らないプッシャーは、別のラベル名の有効なエンコード バージョンでもあるラベル名を使用する可能性があります。たとえば、プッシャーがラベル名U__foo_2e_bar
を使用するつもりだが、それをU___55_____foo__2e__bar
としてエンコードしない場合、Pushgateway はU__foo_2e_bar
foo.bar
にデコードします。これが、デコードが--push.enable-utf8-names
フラグを介してオプトインされる主な理由です。
PUT
メソッドPUT
、メトリクスのグループをプッシュするために使用されます。 URL で指定されたグループ化キーを持つすべてのメトリクスは、 PUT
でプッシュされたメトリクスに置き換えられます。
リクエストの本文には、区切り文字で区切られたバイナリ プロトコル バッファーとして、または単純なフラット テキスト形式 (どちらもバージョン 0.0.4、データ公開形式の仕様を参照) としてプッシュするメトリックが含まれています。 2 つのバリアント間の区別は、 Content-Type
ヘッダーによって行われます。 (プロトコル バッファーには値application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited
を使用します。それ以外の場合は、テキスト形式がフォールバックとして試行されます。)
成功時の応答コードは、200、202、または 400 のいずれかです。200 応答は、プッシュが成功したことを意味し、既存のメトリクス グループを置き換えるか、新しいメトリクスを作成します。 400 応答は、リクエストの形式が不正である場合、またはプッシュされたメトリクスが他のグループにプッシュされたメトリクスと矛盾している場合、または Pushgateway 自体のメトリクスと衝突している場合に発生する可能性があります。説明は応答の本文で返され、エラー レベルで記録されます。 202 は--push.disable-consistency-check
フラグが設定されている場合にのみ発生します。この場合、プッシュされたメトリクスはキューに入れられるだけで、整合性はチェックされません。ただし、上で説明したように、不一致があるとスクレイピングが失敗します。
まれに、Pushgateway がすでにプッシュされた一貫性のないメトリクスのセットを使用してしまう可能性があります。その場合、原因が以前にプッシュされたメトリクスである場合でも、新しいプッシュも矛盾しているとして拒否されます。この状況から抜け出すには、問題のあるメトリクスを削除してください。
protobuf 形式を使用する場合は、互いに上書きされるため、1 回のプッシュで重複した MetricFamily proto メッセージ (つまり、同じ名前を持つ複数のメッセージ) を送信しないでください。
Pushgateway は、プッシュされたメトリクスがディスクに保持されるという強力な保証を提供しないことに注意してください。 (サーバーのクラッシュによりデータが失われる可能性があります。または、Pushgateway がディスクにまったく保存されないように構成されています。)
本文が空のPUT
リクエストは、指定されたグループ化キーを持つすべてのメトリクスを効果的に削除します。ただし、以下で説明するDELETE
リクエストとは対照的に、 push_time_seconds
メトリクスは更新されます。
POST
メソッドPOST
PUT
メソッドとまったく同じように機能しますが、新しくプッシュされたメトリクスと同じ名前のメトリクスのみが置き換えられます (同じグループ化キーを持つメトリクスのうち)。
本文が空のPOST
リクエストは、 push_time_seconds
メトリクスを更新するだけで、以前にプッシュされたメトリクスは変更しません。
DELETE
メソッドDELETE
、Pushgateway からメトリクスを削除するために使用されます。リクエストにはコンテンツを含めることはできません。 URL で指定されたグループ化キーを持つすべてのメトリクスが削除されます。
成功時の応答コードは常に 202 です。その時点では、削除要求はキューに入れられるだけです。リクエストが実際に実行されるという保証や、結果が永続層に到達するという保証はありません (サーバークラッシュの場合など)。ただし、 PUT
/ POST
とDELETE
リクエストの順序は保証されています。つまり、 DELETE
リクエストを正常に送信してからPUT
送信した場合、 DELETE
が最初に処理されることが保証されます (逆も同様)。
メトリクスのないグループ化キーを削除しても何も行わず、エラーは発生しません。
POST または PUT リクエストの本文は、gzip または snappy 圧縮されている場合があります。これを行うには、ヘッダーContent-Encoding: gzip
またはContent-Encoding: snappy
を追加します。
例:
echo " some_metric 3.14 " | gzip | curl -H ' Content-Encoding: gzip ' --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
echo " some_metric 3.14 " | snzip | curl -H ' Content-Encoding: snappy ' --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
Admin API は Pushgateway への管理アクセスを提供します。 --web.enable-admin-api
フラグを設定して明示的に有効にする必要があります。
Pushgateway がリッスンするデフォルトのポートは 9091 です。パスは次のようになります。
/api//admin/
HTTP_METHOD | API_VERSION | ハンドラ | 説明 |
---|---|---|---|
置く | v1 | ワイプ | Pushgateway からすべてのメトリクスを安全に削除します。 |
たとえば、Pushgateway からすべてのメトリクスを消去するには、次のようにします。
curl -X PUT http://pushgateway.example.org:9091/api/v1/admin/wipe
クエリ API を使用すると、プッシュされたメトリクス、ビルドおよびランタイム情報にアクセスできます。
/api//
HTTP_METHOD | API_VERSION | ハンドラ | 説明 |
---|---|---|---|
得る | v1 | 状態 | ビルド情報、コマンド ライン フラグ、開始時刻を JSON 形式で返します。 |
得る | v1 | メトリクス | プッシュされたメトリック ファミリを JSON 形式で返します。 |
例えば :
curl -X GET http://pushgateway.example.org:9091/api/v1/status | jq
{
"status": "success",
"data": {
"build_information": {
"branch": "master",
"buildDate": "20200310-20:14:39",
"buildUser": "[email protected]",
"goVersion": "go1.13.6",
"revision": "eba0ec4100873d23666bcf4b8b1d44617d6430c4",
"version": "1.1.0"
},
"flags": {
"log.format": "logfmt",
"log.level": "info",
"persistence.file": "",
"persistence.interval": "5m0s",
"push.disable-consistency-check": "false",
"web.enable-admin-api": "false",
"web.enable-lifecycle": "false",
"web.external-url": "",
"web.listen-address": ":9091",
"web.route-prefix": "",
"web.telemetry-path": "/metrics"
},
"start_time": "2020-03-11T01:44:49.9189758+05:30"
}
}
curl -X GET http://pushgateway.example.org:9091/api/v1/metrics | jq
{
"status": "success",
"data": [
{
"labels": {
"job": "batch"
},
"last_push_successful": true,
"my_job_duration_seconds": {
"time_stamp": "2020-03-11T02:02:27.716605811+05:30",
"type": "GAUGE",
"help": "Duration of my batch job in seconds",
"metrics": [
{
"labels": {
"instance": "",
"job": "batch"
},
"value": "0.2721322309989773"
}
]
},
"push_failure_time_seconds": {
"time_stamp": "2020-03-11T02:02:27.716605811+05:30",
"type": "GAUGE",
"help": "Last Unix time when changing this group in the Pushgateway failed.",
"metrics": [
{
"labels": {
"instance": "",
"job": "batch"
},
"value": "0"
}
]
},
"push_time_seconds": {
"time_stamp": "2020-03-11T02:02:27.716605811+05:30",
"type": "GAUGE",
"help": "Last Unix time when changing this group in the Pushgateway succeeded.",
"metrics": [
{
"labels": {
"instance": "",
"job": "batch"
},
"value": "1.5838723477166057e+09"
}
]
}
}
]
}
Pushgateway は、自動化と統合を容易にする一連の管理 API を提供します。
HTTP_METHOD | パス | 説明 |
---|---|---|
得る | /-/健康 | Pushgateway が正常な場合は常に 200 を返します。 |
得る | /-/準備ができて | Pushgateway がトラフィックを処理する準備ができている場合は常に 200 を返します。 |
--web.enable-lifecycle
フラグを使用して有効にできます。HTTP_METHOD | パス | 説明 |
---|---|---|
置く | /-/やめる | Pushgateway の正常なシャットダウンをトリガーします。 |
あるいは、 SIGTERM
Pushgateway プロセスに送信することによって、正常なシャットダウンをトリガーすることもできます。
Pushgateway は、構成された--web.telemetry-path
(デフォルト: /metrics
) を介して次のメトリクスを公開します。
push_time_seconds
とpush_failure_time_seconds
。process_...
go_...
promhttp_metric_handler_requests_...
# HELP pushgateway_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which pushgateway was built.
# TYPE pushgateway_build_info gauge
pushgateway_build_info{branch="master",goversion="go1.10.2",revision="8f88ccb0343fc3382f6b93a9d258797dcb15f770",version="0.5.2"} 1
# HELP pushgateway_http_push_duration_seconds HTTP request duration for pushes to the Pushgateway.
# TYPE pushgateway_http_push_duration_seconds summary
pushgateway_http_push_duration_seconds{method="post",quantile="0.1"} 0.000116755
pushgateway_http_push_duration_seconds{method="post",quantile="0.5"} 0.000192608
pushgateway_http_push_duration_seconds{method="post",quantile="0.9"} 0.000327593
pushgateway_http_push_duration_seconds_sum{method="post"} 0.001622878
pushgateway_http_push_duration_seconds_count{method="post"} 8
# HELP pushgateway_http_push_size_bytes HTTP request size for pushes to the Pushgateway.
# TYPE pushgateway_http_push_size_bytes summary
pushgateway_http_push_size_bytes{method="post",quantile="0.1"} 166
pushgateway_http_push_size_bytes{method="post",quantile="0.5"} 182
pushgateway_http_push_size_bytes{method="post",quantile="0.9"} 196
pushgateway_http_push_size_bytes_sum{method="post"} 1450
pushgateway_http_push_size_bytes_count{method="post"} 8
# HELP pushgateway_http_requests_total Total HTTP requests processed by the Pushgateway, excluding scrapes.
# TYPE pushgateway_http_requests_total counter
pushgateway_http_requests_total{code="200",handler="static",method="get"} 5
pushgateway_http_requests_total{code="200",handler="status",method="get"} 8
pushgateway_http_requests_total{code="202",handler="delete",method="delete"} 1
pushgateway_http_requests_total{code="202",handler="push",method="post"} 6
pushgateway_http_requests_total{code="400",handler="push",method="post"} 2
一般に、 push_time_seconds
が予想より大幅に遅れている場合にアラートを発することをお勧めします。これにより、失敗したプッシュと完全にダウンしたプッシャーの両方が捕捉されます。
失敗したプッシュをより早い段階で検出するには、 push_failure_time_seconds > push_time_seconds
でアラートを発行します。
プッシュは、形式が正しくないために失敗する場合もあります。この場合、どのメトリクス グループにも到達しないため、 push_failure_time_seconds
メトリクスは設定されません。これらのプッシュは、引き続きpushgateway_http_requests_total{code="400",handler="push"}
としてカウントされます。このメトリクスのrate
についてアラートを発行できますが、ログを検査して問題のあるプッシャーを特定する必要があります。
Pushgateway は、TLS と基本認証をサポートします。これにより、さまざまな HTTP エンドポイントをより適切に制御できるようになります。
TLS 認証や基本認証を使用するには、 --web.config.file
パラメーターを使用して構成ファイルを渡す必要があります。ファイルの形式は、exporter-toolkit リポジトリに記載されています。
TLS と基本認証の設定は、スクレイピング用の /metrics、/metrics/... 経由でメトリクスをプッシュする API、/api/... 経由の管理 API、および Web UI など、すべての HTTP エンドポイントに影響することに注意してください。
通常のバイナリは、Web ファイルをresources
ディレクトリに埋め込みます。開発目的では、実行中のバイナリでこれらのファイルを直接使用すると便利です (変更の効果をすぐに確認できるため)。直接使用に切り替えるには、 .promu.yml
のflags
エントリに-tags dev
を追加して、 make build
。 .promu.yml
への変更を元に戻し、 make assets
と入力して、「通常」モードに戻ります。
関連するスタイル ガイドラインは、Go コード レビュー コメントと Peter Bourgon の『Go: 実稼働環境のベスト プラクティス』のフォーマットとスタイルのセクションです。