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メトリクスを提供しています。

新しいメトリクスの追加

ここでは、セルフ・モニタリング用の新しいメトリクスを追加する方法について説明します(例)。

  1. メトリクスのタイプを選択します:

    • Gitlab::Metrics.counter
    • Gitlab::Metrics.gauge
    • Gitlab::Metrics.histogram
    • Gitlab::Metrics.summary
  2. メトリックの適切な名前を選択します。Prometheus メトリック名のガイドラインを参照してください。
  3. GitLab Prometheusメトリクスのリストを更新します。
  4. メトリクスに追加するラベルは慎重に選んでください。project_pathproject_id のようなカーディナリティの高い値は、/metrics エンドポイントに新しいエントリとしてラベルの各セットが公開されるため、サービスの可用性に影響を与える可能性があるため、強くお勧めしません。例えば、10個のバケットと100個の値を持つラベルを持つヒストグラムは、Exporterエンドポイントに1000個のエントリを生成します。
  5. 新しいメトリクスを記録する関連ページやコードをトリガーします。
  6. 新しいメトリクスが/-/metricsに表示されることを確認します。

特定のコンテキストに束縛されないメトリクス(request,process,machine,namespaceなど)については、cronベースのSidekiqジョブから生成します:

  • Geo関連のメトリクスについては、Geo::MetricsUpdateService
  • その他の “グローバル”/インスタンス全体のメトリクスについては、Metrics::GlobalMetricsUpdateServiceをご覧ください。

複数のSidekiqインスタンスがあるインストールでSidekiqからデータをエクスポートする場合、常に同じExporterがクエリされることは保証されません。

シュー406583では、プッシュゲートウェイを使用した可能な解決策についても説明しています。