スクレイプ設定パターン集 - 実践的な設定方法
はじめに
Part 2-1 で prometheus.yml の詳細なパラメータを学びました。ここからは、実際の運用で使われるスクレイプ設定パターンを紹介します。複数ターゲットの監視、サービスディスカバリー、認証設定など、実践的なシーン別に設定例を見ていきましょう。
静的ターゲット設定のパターン
static_configs を使った設定は、ターゲットが固定的な小~中規模環境で有効です。
シンプルなターゲル設定
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 の下に並べることで、まとめて監視できます。
ラベル付けによるグループ分け
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 などで可視化する際、このラベルを使ってフィルタリングすることが多いです。
ポート番号の動的な割り当て
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_config | Kubernetes 環境 | ポッド・ノード情報を自動取得 | Kubernetes API へのアクセス権限が必要 |
consul_sd_config | Consul ベース環境 | サービスレジストリと連携 | Consul の構築・管理が別途必要 |
ec2_sd_config | AWS EC2 環境 | インスタンス情報を自動取得 | IAM 権限設定が複雑 |
dns_sd_config | DNS ベース検出 | 軽量で汎用的 | DNS レコード の管理運用が必要 |
Kubernetes でのサービスディスカバリー例
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)
scrape_configs:
- job_name: 'secured-api'
static_configs:
- targets: ['api.example.com:8080']
basic_auth:
username: 'prometheus'
password: 'secret-password'シンプルですが、パスワードが平文で保存される点に注意。本番環境では、環境変数やシークレット管理ツールの使用を検討してください。
TLS/SSL 設定
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_interval | 1m | メトリクス取得間隔 | 環境に応じて 15s~5m の範囲で設定 |
scrape_timeout | 10s | スクレイプリクエストのタイムアウト | scrape_interval より小さい値 |
sample_limit | 0 (無制限) | 1スクレイプあたりのサンプル数上限 | 超過時はスクレイプ全体が失敗。大規模エクスポーターの場合 50000~100000 程度に設定 |
target_limit | 0 (無制限) | スクレイプ設定ごとのターゲット数上限 | サービスディスカバリーで多数のターゲットが検出される場合に制限値を設定 |
body_size_limit | 0 (無制限) | スクレイプレスポンスのサイズ上限 | 大規模メトリクスの場合 100MB 程度に設定 |
スクレイプ負荷削減の例
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 のリソース消費を減らせます。
スクレイプ設定のベストプラクティス
- 命名規則を統一する:
job_nameに環境や役割を含める(例:prod-api,staging-db) - スクレイプ間隔は環境に応じる: 本番では1~2分、開発では15~30秒が目安
- ラベルで構造化する: グループ・環境・役割をラベルで表現
- タイムアウトに余裕を持たせる: ネットワーク遅延に対応するため、
scrape_timeoutは適切に設定 - 不要なメトリクスを削除する: ストレージ効率を高めるため、
metric_relabel_configsで事前フィルタリング
次のステップ
ここまで、実践的なスクレイプ設定パターンを見てきました。Part 2-3 では、リラベリングをさらに深掘りし、複雑なメタラベル操作と実装例を学びます。
ナビゲーション
前のパート:prometheus.yml詳解 - グローバル・スクレイプ・アラートセクション
次のパート:ラベル・リライト実践 - メタラベル・relabel_configs・metric_relabel_configs の活用