メトリック名とラベル名ベストプラクティス - Prometheusドキュメント

このページはPrometheus公式ドキュメント和訳+αの一部です。

このドキュメントで提示されているメトリックとラベルの規約は、Prometheusの利用にあたって必須とは言えないが、スタイルガイドおよびベストプラクティスとして利用できる。個々の組織では、これらのプラクティスのいくつか(例えば、命名規約)を変更したいかもしれない。

メトリック名

メトリック名は、

  • そのメトリックが属しているドメインに関する一単語のアプリケーションprefixを付けるべきである。このprefixは、クライアントライブラリでは、名前空間(namespace)と呼ばれることがある。あるアプリケーションの特有のメトリックでは、アプリケーション名自体が普通はprefixとなる。クライアントライブラリからexportされている標準化されたメトリックのように一般的なものもある。例えば、
    • prometheus_notifications_total (Prometheusサーバーに特有のもの)
    • process_cpu_seconds_total (たくさんのクライアントライブラリからexportされたもの)
    • http_request_duration_seconds (全てのHTTPリクエストのためのもの)
  • 単位を一つだけ持つべきである。秒とミリ秒を混ぜたり、秒とバイトを混ぜたりしないこと。
  • 基本単位を使うべきである。例えば、ミリ秒、メガバイト、キロメーターではなく、秒、バイト、メーターを使う。
  • 単位を複数形で表したsuffixを付けるべきである。カウントには、suffixとして、(適用可能な単位があればそれに加えて)totalを付けること。
    • http_request_duration_seconds
    • node_memory_usage_bytes
    • http_requests_total (単位がないカウント)
    • process_cpusecondstotal (単位のあるカウント)
  • 全てのラベル軸を通して同一の論理的な測定対象を表すべきである。
    • request duration
    • bytes of data transfer
    • instantaneous resource usage as a percentage

大まかなルールとして、sum()avg()が全ての軸に対して意味をなすようにするべきである。 もしそれらが意味をなさないなら、そのデータを複数のメトリクスに分解すること。 例えば、様々なキューの容量を一つのメトリックとして持つことは良いが、キューの現在の要素数を混ぜるのは良くない。

Labels

ラベルは、測定されるものの特徴が区別できるように使うこと。

  • api_http_requests_total - リクエストタイプが区別できるようにする: type="create|update|delete"
  • api_request_duration_seconds - リクエストの段階が区別できるようにする: stage="extract|transform|load"

ラベル名をメトリック名に入れないこと。入れてしまうと、集約してそのラベルがなくなったときに混乱を起こす。

注意: 全てのkey-valueの組み合わせは新しい時系列となり、データ量を劇的に増やしてしまう。沢山の値を持つラベル(ユーザーIDやメールアドレス、その他の無限集合であるもの)は使わないこと

参考リンク

おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援