Prometheusメトリクス開発ガイドライン
ライブラリへの追加
Prometheusをサポートする各共通システムサービスに対して、最も重要な2~4のメトリクスをサポートするように努めています。まだライブラリに追加されていない特定のExporterのサポートをお探しの場合は、common_metrics.yml
ファイルに追加することができます。
クエリ識別子
新しいメトリクスを追加するための要件は、各クエリに一意の識別子を持たせることです:
- group: Response metrics (NGINX Ingress)
metrics:
- title: "Throughput"
y_axis:
name: "Requests / Sec"
format: "number"
precision: 2
queries:
- id: response_metrics_nginx_ingress_throughput_status_code
query_range: 'sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) by (status_code)'
unit: req / sec
label: Status Code
既存のメトリクスを更新
既存の共通メトリックを追加または変更した後は、既存のすべてのメトリックにクエリを実行して更新するイン ポート・スクリプトを再実行する必要があります。
または、データベース・マイグレーションを作成することもできます:
class ImportCommonMetrics < Gitlab::Database::Migration[2.1]
def up
::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute
end
def down
# no-op
end
end
クエリメトリック(id:
)が削除された場合、デフォルトではデータベースから削除されません。削除されたものをどうするか決定するデータベースマイグレーションを追加したいかもしれません。たとえば、依存するすべてのデータを別のメトリックにマイグレーションすることに興味があるかもしれません。
GitLab Prometheusメトリクス
GitLabは自分自身を監視するためにPrometheusメトリクスを提供しています。
新しいメトリクスの追加
ここでは、セルフ・モニタリング用の新しいメトリクスを追加する方法について説明します(例)。
-
メトリクスのタイプを選択します:
Gitlab::Metrics.counter
Gitlab::Metrics.gauge
Gitlab::Metrics.histogram
Gitlab::Metrics.summary
- メトリックの適切な名前を選択します。Prometheus メトリック名のガイドラインを参照してください。
- GitLab Prometheusメトリクスのリストを更新します。
- メトリクスに追加するラベルは慎重に選んでください。
project_path
やproject_id
のようなカーディナリティの高い値は、/metrics
エンドポイントに新しいエントリとしてラベルの各セットが公開されるため、サービスの可用性に影響を与える可能性があるため、強くお勧めしません。例えば、10個のバケットと100個の値を持つラベルを持つヒストグラムは、Exporterエンドポイントに1000個のエントリを生成します。 - 新しいメトリクスを記録する関連ページやコードをトリガーします。
- 新しいメトリクスが
/-/metrics
に表示されることを確認します。
特定のコンテキストに束縛されないメトリクス(request
,process
,machine
,namespace
など)については、cronベースのSidekiqジョブから生成します:
- Geo関連のメトリクスについては、
Geo::MetricsUpdateService
。 - その他の “グローバル”/インスタンス全体のメトリクスについては、
Metrics::GlobalMetricsUpdateService
をご覧ください。
複数のSidekiqインスタンスがあるインストールでSidekiqからデータをエクスポートする場合、常に同じExporterがクエリされることは保証されません。
イシュー406583では、プッシュゲートウェイを使用した可能な解決策についても説明しています。