prometheus.yml詳解 - グローバル・スクレイプの詳細設定

はじめに

Part 2 では prometheus.yml の全体構造を学びました。ここからは、各セクションの詳細なパラメータと、どのような設定ができるのかを掘り下げます。正確な設定を行えば、Prometheus の監視をより効果的に運用できます。

グローバルセクション詳解

グローバルセクションは、Prometheus 全体の基本動作を制御します。

yaml
global:
  scrape_interval: 1m
  scrape_timeout: 10s
  evaluation_interval: 1m
  external_labels:
    monitor: 'prometheus-prod'
    region: 'us-east-1'

スクレイプ関連パラメータ

scrape_interval はメトリクス収集の間隔で、デフォルトは1分です。本番環境では1~2分、開発環境では15~30秒など、必要に応じて調整します。

scrape_timeout は、各スクレイプリクエストのタイムアウト時間です。デフォルトは10秒。ネットワークが遅い環境では長めに設定することもあります。ただし、scrape_timeoutscrape_interval より小さい値である必要があります。例えば、scrape_interval: 1m の場合、scrape_timeout は59秒以下に設定します。

evaluation_interval はアラートルール評価の間隔。デフォルトは1分。より頻繁にアラートを評価したい場合は短く設定できますが、Prometheus のリソース消費が増える点に注意してください。

external_labels

external_labels は、このPrometheus インスタンスが発行するすべてのメトリクスに自動付与されるラベルです。複数のPrometheus インスタンスを運用する際に、どのインスタンスから来たデータか識別するために重宝します。

yaml
external_labels:
  monitor: 'prometheus-prod'
  region: 'us-east-1'
  env: 'production'

これらのラベルは、メトリクスクエリやアラート条件で参照できます。また、リモートストレージに送信する際、ラベルが含まれるため、複数インスタンスのデータを統合管理できるわけです。

スクレイプコンフィグ詳解

scrape_configs は、個別のスクレイプ設定を定義します。複数の job を並べることで、異なるターゲットを監視します。

yaml
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    scrape_timeout: 5s
    metrics_path: '/metrics'
    scheme: 'http'
    
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: 'prometheus-server'

job_name と基本設定

job_name はこのスクレイプ設定の識別子です。ユニークである必要があります。

job_name の下には、グローバル設定を上書きするパラメータを指定できます。例えば、特定のジョブのみ scrape_interval を短くしたい場合、このセクションで設定します。

metrics_path はメトリクスエンドポイントのパスです。デフォルトは /metrics。カスタムパスを使うアプリケーションの場合、ここで指定します。

schemehttp または https。セキュアな環境では https を使用します。

static_configs と labels

static_configs は固定的なターゲット一覧を定義します。

yaml
static_configs:
  - targets:
      - 'server1:9100'
      - 'server2:9100'
    labels:
      group: 'production'
      role: 'api-server'

targets 配列に複数のターゲットを列挙できます。同じ labels はすべてのターゲットに付与されるため、グループ化に便利です。

リラベリング基礎(relabel_configs)

リラベリングは、スクレイプ時にラベルを動的に追加・変更・削除する機能です。メタラベルを有効なラベルに変換したり、不要なメトリクスをフィルタリングできます。

yaml
relabel_configs:
  - source_labels: [__address__]
    regex: '([^:]+)(?::\d+)?'
    replacement: '${1}'
    target_label: 'instance'
  
  - source_labels: [__meta_ec2_tag_Name]
    target_label: 'name'
  
  - source_labels: [__metrics_path__]
    regex: '/metrics'
    action: 'keep'

relabel_configs は順序が重要です。上から順に処理され、前ステップの結果が次のステップに渡されます。

source_labels は対象となるラベル名を配列で指定します。複数指定する場合、値はセミコロン(;)で結合されます。例えば、source_labels: [__address__, instance] では、両者の値が ; で結合されたものが正規表現にマッチします。

regex はマッチパターン。正規表現で記述します。マッチした場合のみ、replacement の値が target_label に設定されます。マッチしなかった場合は何も起こりません。

replacement は置換パターン。${1} は最初のキャプチャグループ、${2} は2番目、というように参照します。

target_label は結果を格納する先のラベル名。

action は処理方法。replace(デフォルト)は置換、keep は条件にマッチしたもののみ保持、drop は条件にマッチしたものを除外します。

metric_relabel_configs

metric_relabel_configs は、スクレイプ後、メトリクスストレージに保存される前に適用されるリラベリングです。relabel_configs との違いは、スクレイプの後段で処理されるため、メトリクス名やスクレイプ済みのラベルに対して操作できる点です。

yaml
metric_relabel_configs:
  - source_labels: [__name__]
    regex: 'go_.*'
    action: 'drop'

この例では、go_ で始まるメトリクス(Go ランタイムメトリクス)をすべて除外します。不要なメトリクスを削減し、ストレージ効率が向上します。

ターゲット検出の基本パターン

小規模環境では static_configs で十分ですが、大規模環境ではサービスディスカバリーを使用します。次のパートで詳しく説明しますが、基本的な概念を示します。

yaml
scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: 'pod'
        namespaces:
          names:
            - 'default'
            - 'monitoring'

このように設定すると、Kubernetes API から自動的にポッド情報を取得し、監視対象として追加します。

次のステップ

ここまで、prometheus.yml の詳細なパラメータを学びました。Part 2-2 では、これらの設定をベースに、複数ターゲットの実践的なパターンを見ていきます。


ナビゲーション