IK.AM

@making's tech note


Tanzu Application PlatformのコンポーネントをPrometheusのService Discovery対象から外す

🗃 {Dev/CaaS/Kubernetes/TAP}
🏷 Kubernetes 🏷 Tanzu 🏷 TAP 🏷 Prometheus 
🗓 Updated at 2023-09-21T04:06:36Z  🗓 Created at 2023-09-21T04:06:36Z   🌎 English Page

⚠️ 本記事の内容はVMwareによってサポートされていません。 記事の内容で生じた問題については自己責任で対応し、 VMwareサポート窓口には問い合わせないでください

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.yamlpackage_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.yamlpackage_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.yamlpackage_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.yamlpackage_overlaysに次の設定を追加してTAPを更新します。

package_overlays:
- name: fluxcd-source-controller
  secrets:
  - name: fluxcd-source-controller-disable-scrape
  # ...

# ...

他にもscrape対象となっているコンポーネントがあれば同じ手法で対処できます。

本来はメトリクス取得対象は増えた方がPlatformが"Observable"になってより良いはずなのですが、課金とのトレードオフですね。 上記の設定は"Observability"を高める世の中の流れとは逆行しているので、必要に応じて再度メトリクスを取得してより"Observable"にしてみてください。


✒️️ Edit  ⏰ History  🗑 Delete