スクレイプ設定パターン集 - 実践的な設定方法

はじめに

Part 2-1 で prometheus.yml の詳細なパラメータを学びました。ここからは、実際の運用で使われるスクレイプ設定パターンを紹介します。複数ターゲットの監視、サービスディスカバリー、認証設定など、実践的なシーン別に設定例を見ていきましょう。

静的ターゲット設定のパターン

static_configs を使った設定は、ターゲットが固定的な小~中規模環境で有効です。

シンプルなターゲル設定

yaml
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['server1:9100', 'server2:9100', 'server3:9100']

複数のターゲットを同じ job_name の下に並べることで、まとめて監視できます。

ラベル付けによるグループ分け

yaml
scrape_configs:
  - job_name: 'api-servers'
    scrape_interval: 15s
    static_configs:
      - targets: ['api1:9090', 'api2:9090']
        labels:
          group: 'production'
          role: 'api'
      - targets: ['api3:9090', 'api4:9090']
        labels:
          group: 'staging'
          role: 'api'

異なる環境のターゲットを同じ job_name で監視しながら、ラベルで区別できます。Grafana などで可視化する際、このラベルを使ってフィルタリングすることが多いです。

ポート番号の動的な割り当て

yaml
scrape_configs:
  - job_name: 'exporters'
    scrape_interval: 30s
    static_configs:
      - targets: 
          - 'server1:9100'  # Node Exporter
          - 'server1:9104'  # MySQL Exporter
          - 'server1:9113'  # NGINX Exporter
        labels:
          instance: 'server1'

同一ホストで複数のエクスポーターが動作している場合、ポート番号で識別できます。

サービスディスカバリーの比較

固定的なターゲルに対して、サービスディスカバリーは動的にターゲットを検出します。クラウド環境やコンテナ環境で特に有効です。

方式用途利点注意点
static_configs小~中規模、固定環境シンプルで管理が容易スケーリング時に手動更新が必要
kubernetes_sd_configKubernetes 環境ポッド・ノード情報を自動取得Kubernetes API へのアクセス権限が必要
consul_sd_configConsul ベース環境サービスレジストリと連携Consul の構築・管理が別途必要
ec2_sd_configAWS EC2 環境インスタンス情報を自動取得IAM 権限設定が複雑
dns_sd_configDNS ベース検出軽量で汎用的DNS レコード の管理運用が必要

Kubernetes でのサービスディスカバリー例

yaml
scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: 'pod'
        namespaces:
          names:
            - 'default'
            - 'monitoring'
    
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: 'keep'
        regex: 'true'
      
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: 'replace'
        target_label: __metrics_path__
        regex: '(.+)'

Kubernetes では、ポッド上のアノテーション(annotation)を利用して、監視対象を動的に判別できます。

認証設定パターン

エクスポーターや監視対象アプリケーションがパスワード保護されている場合、認証情報を設定する必要があります。

基本認証(Basic Auth)

yaml
scrape_configs:
  - job_name: 'secured-api'
    static_configs:
      - targets: ['api.example.com:8080']
    
    basic_auth:
      username: 'prometheus'
      password: 'secret-password'

シンプルですが、パスワードが平文で保存される点に注意。本番環境では、環境変数やシークレット管理ツールの使用を検討してください。

TLS/SSL 設定

yaml
scrape_configs:
  - job_name: 'secure-exporter'
    scheme: 'https'
    tls_config:
      ca_file: '/etc/prometheus/ca.crt'
      cert_file: '/etc/prometheus/client.crt'
      key_file: '/etc/prometheus/client.key'
      insecure_skip_verify: false
    
    static_configs:
      - targets: ['secure.example.com:9443']

HTTPS で通信する場合、自己署名証明書や CA 証明書の設定が必要です。本番環境では insecure_skip_verify: false にして証明書検証を有効にしましょう。

チューニングパラメータ

スクレイプの動作をカスタマイズするための重要なパラメータです。

パラメータデフォルト説明調整ガイド
scrape_interval1mメトリクス取得間隔環境に応じて 15s~5m の範囲で設定
scrape_timeout10sスクレイプリクエストのタイムアウトscrape_interval より小さい値
sample_limit0 (無制限)1スクレイプあたりのサンプル数上限超過時はスクレイプ全体が失敗。大規模エクスポーターの場合 50000~100000 程度に設定
target_limit0 (無制限)スクレイプ設定ごとのターゲット数上限サービスディスカバリーで多数のターゲットが検出される場合に制限値を設定
body_size_limit0 (無制限)スクレイプレスポンスのサイズ上限大規模メトリクスの場合 100MB 程度に設定

スクレイプ負荷削減の例

yaml
scrape_configs:
  - job_name: 'heavy-exporter'
    scrape_interval: 2m
    scrape_timeout: 30s
    sample_limit: 50000
    body_size_limit: 100MB
    
    static_configs:
      - targets: ['big-exporter:9090']
    
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: '(go_.*|process_.*)'
        action: 'drop'

不要なメトリクスを metric_relabel_configs で事前に除外し、sample_limit でスクレイプあたりのサンプル数を制限すれば、Prometheus のリソース消費を減らせます。

スクレイプ設定のベストプラクティス

  1. 命名規則を統一する: job_name に環境や役割を含める(例:prod-api, staging-db
  2. スクレイプ間隔は環境に応じる: 本番では1~2分、開発では15~30秒が目安
  3. ラベルで構造化する: グループ・環境・役割をラベルで表現
  4. タイムアウトに余裕を持たせる: ネットワーク遅延に対応するため、scrape_timeout は適切に設定
  5. 不要なメトリクスを削除する: ストレージ効率を高めるため、metric_relabel_configs で事前フィルタリング

次のステップ

ここまで、実践的なスクレイプ設定パターンを見てきました。Part 2-3 では、リラベリングをさらに深掘りし、複雑なメタラベル操作と実装例を学びます。


ナビゲーション

前のパート:prometheus.yml詳解 - グローバル・スクレイプ・アラートセクション

次のパート:ラベル・リライト実践 - メタラベル・relabel_configs・metric_relabel_configs の活用