(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Prometheus/Kubernetes】Service側に記載するannotationsについて

スポンサーリンク

はじめに

Prometheusはメトリクス収集対象を静的に記載して扱うこともできますが

ServiceDiscoveryを利用すれば対象の自動的な検出が可能です。

本記事ではKubernetesのServiceを利用してメトリクスを収集する際にマニフェストに記載する以下のアノテーションの役割について実機で確認しました。

  • prometheus.io/scrape
  • prometheus.io/scheme
  • prometheus.io/path
  • prometheus.io/port
環境情報
$ /bin/prometheus --version
prometheus, version 2.31.X...
  go version:       go1.17.X
  platform:         linux/amd64

各prometheus.io

Serviceにアノテーションがない場合でもPrometheus側の設定でサービス検出対象になっていれば自動的にPrometheus側がサービスディスカバリーとして検出します。

kubernetes-service-endpoints (X/Y active targets)

その状態でメトリクスの収集先になるServiceにてscrapeを「true」とすると

$ kubectl annotate service test-metrics prometheus.io/scrape=true
service/ test-metrics annotated

対象に紐づくServiceがTargetとして認識されます。
一方で該当のPodが他のServiceにも紐づいている場合、そのServiceもTargetとして認識されてしまうので、以下でServiceが公開しているPortを明示的に指定します。

$ kubectl annotate service test-metrics prometheus.io/port=XXXX 
service/test-metrics annotated

そして一般的には/metricsに対してリクエストを投げることでメトリクス情報が取得できますが、同項目が別の値の場合は任意のパスをスラッシュ付きで与える必要があります。

$ kubectl annotate service test-metrics prometheus.io/path=/mymetrics

最後に、スクレイピングをhttps通信にするか否かですが、httpではなくhttpsを行う場合はschemeにて指定します。

$ kubectl annotate service test-metrics prometheus.io/scheme=https

そうするとTagetへの接続がhttpからhttpsに変更されますが、収集先が対応してなければ以下のようなエラーとなります。

Get "https://XX:XX/metrics": http: server gave HTTP response to HTTPS client

終わりに

まとめると、prometheus.io/scrapeではスクレイピングをするか否か、prometheus.io/schemeではhttpsにするか否か、prometheus.io/pathではメトリクスのパスを/metricsから上書きするか否か、prometheus.io/portでは公開しているPortに対してどのPortを指定するのかを与えます。

以上、ご参考になれば幸いです。