Tanzu Application Platformでデプロイされるコンポーネントの多くはPrometheus用のmetricsエンドポイントを持っており、
PrometheusのService Discoveryによるscrape対象になるようにprometheus.io/scrape: true
のannotationが付いています。
Prometheus、あるいはPrometheusのService Discoveryに対応したAgent (DataDog, Wavefront, Grafana Agentなど) を導入するだけで自動でメトリクスが収集されるため、便利な一方、
意図せず大量のメトリクスを収集することになり、見てもいないメトリクスが大幅に増える可能性があります。
特にSaaSを使用している場合は、単位時間のメトリクス量が課金額に繋がることが多いので、"使っていないのにお金だけ取られる"状態になり得ます。
本記事では、prometheus.io/scrape: true
の設定をOFFにして、一旦scrape対象から外す方法を紹介します。一旦不要なメトリクスを除外して、必要になったタイミングで再度有効にしても良いでしょう。
scrape対象から外すにはマニフェスト(annotations)を書き換える必要があるので、overlayを使用します。
以下、パッケージごとに設定方法を紹介しますが、profileごとにtap-values.yaml
の変更及びTAPの更新はまとめて行って大丈夫です。また、全てのパッケージをカバーしているかどうかは確かめていません。自分が消しているものだけ紹介します。
Contour
対象のProfile: run, build, view, iterate, full
一番多くのメトリクスを排出します。EnvoyはGrafanaダッシュボードがあるので、活用する道もあると思います。
次のSecretを作成します。
cat <<EOF > contour-disable-scrape.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: contour-disable-scrape
namespace: tap-install
type: Opaque
stringData:
contour-disable-scrape.yml: |
#@ load("@ytt:overlay", "overlay")
#@ for kind, name in [['DaemonSet', 'envoy'], ['Deployment', 'envoy'], ['Deployment', 'contour']]:
#@overlay/match by=overlay.subset({"kind": kind, "metadata": {"name": name}}), expects="0+"
---
spec:
template:
metadata:
annotations:
prometheus.io/scrape: "false"
#@ end
---
EOF
kubectl apply -f contour-disable-scrape.yaml
tap-values.yaml
のpackage_overlays
に次の設定を追加してTAPを更新します。
package_overlays:
- name: contour
secrets:
- name: contour-disable-scrape
# ...
# ...
Cloud Native Runtimes
対象のProfile: run, iterate, full
2番目の多くのメトリクスを排出します。Knative ServingもGrafanaダッシュボードがあるので、活用する道もあると思います。
次のSecretを作成します。
cat <<EOF > cnrs-disable-scrape.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: cnrs-disable-scrape
namespace: tap-install
type: Opaque
stringData:
cnrs-disable-scrape.yml: |
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"Deployment","metadata":{"namespace": "knative-serving"}}),expects="1+"
---
spec:
template:
#@overlay/match-child-defaults missing_ok=True
metadata:
annotations:
prometheus.io/scrape: 'false'
wavefront.com/scrape: 'false'
---
EOF
kubectl apply -f cnrs-disable-scrape.yaml
tap-values.yaml
のpackage_overlays
に次の設定を追加してTAPを更新します。
package_overlays:
- name: cnrs
secrets:
- name: cnrs-disable-scrape
# ...
# ...
cert-manager
対象のProfile: run, build, view, iterate, full
全Profileに含まれるので塵積です。
次のSecretを作成します。
cat <<EOF > cert-manager-disable-scrape.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: cert-manager-disable-scrape
namespace: tap-install
type: Opaque
stringData:
cert-manager-disable-scrape.yml: |
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"Deployment","metadata":{"namespace": "cert-manager"}}),expects="1+"
---
spec:
template:
#@overlay/match-child-defaults missing_ok=True
metadata:
annotations:
prometheus.io/scrape: 'false'
---
EOF
kubectl apply -f cnrs-disable-scrape.yaml
tap-values.yaml
のpackage_overlays
に次の設定を追加してTAPを更新します。
package_overlays:
- name: cert-manager
secrets:
- name: cert-manager-disable-scrape
# ...
# ...
Flux
対象のProfile: run, build, iterate, full
次のSecretを作成します。
cat <<EOF > fluxcd-source-controller-disable-scrape.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: fluxcd-source-controller-disable-scrape
namespace: tap-install
type: Opaque
stringData:
fluxcd-source-controller-disable-scrape.yml: |
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"Deployment","metadata":{"namespace": "flux-system"}}),expects="1+"
---
spec:
template:
#@overlay/match-child-defaults missing_ok=True
metadata:
annotations:
prometheus.io/scrape: 'false'
---
EOF
kubectl apply -f cnrs-disable-scrape.yaml
tap-values.yaml
のpackage_overlays
に次の設定を追加してTAPを更新します。
package_overlays:
- name: fluxcd-source-controller
secrets:
- name: fluxcd-source-controller-disable-scrape
# ...
# ...
他にもscrape対象となっているコンポーネントがあれば同じ手法で対処できます。
本来はメトリクス取得対象は増えた方がPlatformが"Observable"になってより良いはずなのですが、課金とのトレードオフですね。
上記の設定は"Observability"を高める世の中の流れとは逆行しているので、必要に応じて再度メトリクスを取得してより"Observable"にしてみてください。