Kubernetes メトリクスの収集
メトリクスを有効にし、コレクターの scrape 成功を確認します
作業内容
Kubernetes の metrics ロールを有効にし、Prometheus 形式のメトリクスがコレクターに届くことを確認します。
準備
環境ごとの values、helm・kubectl、コレクターの namespace と scrape 設定が必要です。endpoint は環境全体を集計する単一 target です。CPU、メモリ、Pod ログはクラスタのコレクターで別途収集します。
手順
1. コレクターのアクセス範囲と values
metrics:
enabled: true
podAnnotations: # how the collector finds the Pod; the install chooses
prometheus.io/scrape: "true"
prometheus.io/port: "9464"
networkPolicy:
metrics:
ingressFrom: [] # empty: reachable on 9464 from anywhere; narrow it to the collector namespaceingressFrom: [] はすべての source に 9464 を開くため、実際のコレクターの namespace selector に制限します。設置した正確な chart バージョンと環境ごとの values で Helm upgrade を適用します。別の chart に更新する場合は Kubernetes アップグレードに従います。
chart のリソースは <fullname>-metrics です。release 名に werft が含まれれば fullname は release 名、それ以外は <release>-werft です。例えば release が team なら team-werft-metrics で、team-metrics ではありません。
2. コレクターの接続
| コレクター | 方法 |
|---|---|
| Prometheus | metrics.podAnnotations の prometheus.io/* annotation、または運用者の ServiceMonitor から Service <fullname>-metrics の metrics ポートを参照します |
| Datadog Agent(Helm) | Autodiscovery の openmetrics チェックを使います。metrics.podAnnotations に ad.datadoghq.com/metrics.checks を入れます。Datadog に保存する名前(ドット表記など)はコレクター側の設定です |
| OpenTelemetry Collector | prometheus receiver で同じ endpoint を scrape し、OTLP で送信します |
プラットフォームから OTLP でメトリクスを送信することはありません。pull endpoint を一つ設けることで、コレクターの種類によらず同じ定義を読み取れ、アプリにコレクターのアドレスや SDK の設定も不要です。セッショントレースは設定すると OTLP で export します(デフォルトはオフ)。可観測性(OTel)を参照してください。
3. endpoint の確認
FULLNAME=werft
kubectl -n werft port-forward "svc/$FULLNAME-metrics" 19464:9464 &
PF=$!
trap 'kill "$PF" 2>/dev/null || true' EXIT INT TERM
SCRAPED=0
for attempt in $(seq 1 30); do
if curl --max-time 2 -fsS http://127.0.0.1:19464/metrics; then SCRAPED=1; break; fi
sleep 1
done
kill "$PF" 2>/dev/null || true
trap - EXIT INT TERM
test "$SCRAPED" = 1port-forward はバックグラウンドで実行し、今回の PID だけを終了します。curl が成功しなければ最後の test が失敗します。
4. 既存ルールの更新
メトリクス名が変わった場合、以前の alias を期待せず、Datadog の定義・クエリ・フィルターと Prometheus のルールをメトリクス契約の名前に変更します。変更した rules が実際の新しい series を読み取ることを確認します。
確認
本文に werft_ メトリクスがあり、コレクターの scrape が成功する必要があります。healthz 200 は DB 読み取りの成功を意味しません。DB 読み取りが失敗すると endpoint は 503 になり、以前の値は返しません。収集時間が間隔の半分を超えたら scrape 間隔を広げ、DB 負荷を下げます。
よくある問題
リソースが見つからない場合は fullname から確認します。NetworkPolicy がコレクターの namespace を許可しているか確認します。replica を増やすと環境全体の集計を重複収集するため、metrics replica は一つに維持します。
元に戻す
values の metrics.enabled を false に戻して適用します。今回追加した scrape target を削除します。既存の運用監視ルールは対象の変更を確認して整理します。