TKG 1.3で複数Prometheusを一つにFederateする

TKGでのPrometheusを一つにまとめました

はじめに

VMwareが提供するTanzu Kubernets Grid Extensionsによって簡単にPrometheusがインストールすることができます。ところがマニュアルでは、カスタマイズできる箇所は以下のみが掲載されています。

https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.3/vmware-tanzu-kubernetes-grid-13/GUID-extensions-prometheus.html#customize

残念ながら、Prometheusの全ての機能を網羅しているとはいえないです。では、マニュアルに書かれていないところは諦めないといけないかというとそうではなく、yttを駆使して任意の設定を差し込むことができます。ここでは、そのやり方を紹介します。今回ためすのは、PrometheusのFederationです。

注意点

以下の方法はまだ正式サポートが表明されていない手段ですのでご注意ください。

前提

  • 公式の手順にしたがってPrometheusを導入ずみ
  • 2つ以上のPrometheusがある
  • YTTの仕様をある程度理解している。おすすめは、こちらのリンクです。

手順

1. アップデートファイルの用意

以下のようなファイルを用意します。いったん/tmp/prometheus.yamlなどで大丈夫です。 なお、targetsの値は私の環境のものですが、環境に合わせ正しいものをいれてください。

 1#@ load("@ytt:overlay", "overlay")
 2#@ load("@ytt:yaml", "yaml")
 3
 4#@ def remote_write_config():
 5#@overlay/match missing_ok=True
 6#@overlay/match-child-defaults missing_ok=True
 7scrape_configs:
 8  #@overlay/append
 9  - job_name: 'federate'
10    scrape_interval: 30s
11    honor_labels: true
12    metrics_path: '/federate'
13    scheme: https
14    tls_config:
15      insecure_skip_verify: true
16    params:
17      match[]:
18      - '{__name__=~".+"}'
19    static_configs:
20      - targets:
21        - prom.demo.lespaulstudioplus.info
22#@ end
23
24#@overlay/match by=overlay.subset({"kind": "ConfigMap","metadata": {"name": "prometheus-server"}})
25---
26data:
27  #@overlay/replace via=lambda a,_: yaml.encode(overlay.apply(yaml.decode(a), remote_write_config()))
28  prometheus.yml:

2. 設定の検証

上のファイルの設定が問題ないかをみてみます。まずTanzu Extensionsを設定したファイルに移動します。

1cd tkg-extensions-v1.3.1+vmware.1/monitoring/prometheus

そして、以下のコマンドを入力します。事前にyttコマンドが実機にインストールされているか確認してください。

1ytt -f ../../common/ \
2  -f ./ \
3	-f ../../extensions/monitoring/prometheus/prometheus-data-values.yaml \
4	-f /tmp/prometheus.yaml --ignore-unknown-comments | less

出力結果に data.[prometheus.yml] の一番したにremote_writeが追加されていれば想定結果です。

 1apiVersion: v1
 2kind: ConfigMap
 3metadata:
 4  labels:
 5    component: server
 6    app: prometheus
 7  name: prometheus-server
 8  namespace: tanzu-system-monitoring
 9data:
10# ...
11  prometheus.yml: |
12	  #....
13	  scrape_configs:
14			- job_name: federate
15	      scrape_interval: ##
16	      honor_labels: true
17	      metrics_path: /federate
18	      scheme: https
19	      params:
20	        match[]:
21	        - '{__name__=~".+"}'
22	      static_configs:
23	      - targets:
24	        - prom.demo.lespaulstudioplus.info

3. 作ったファイルをシークレットとして登録

以下のようにして作ったファイルをシークレットとして登録します。

1kubectl create secret generic prometheus-update-yaml --from-file=prometheus-update-yaml=/tmp/prometheus.yaml -n tanzu-system-monitoring

secret/prometheus-update-yaml createdとでれば次へ進みます。

4. Extensionsの更新

PrometheusのExtensionsをアップデートしていきます。 以下のコマンドを実行します。

1kubectl edit apps prometheus -n tanzu-system-monitoring -o yaml

template[0].ytt.inline.pathsFromに新しく作ったSecretを指定します。

 1spec:
 2  deploy:
 3  - kapp:
 4      rawOptions:
 5      - --wait-timeout=5m
 6  fetch:
 7  - image:
 8      url: projects.registry.vmware.com/tkg/tkg-extensions-templates:v1.3.1_vmware.1
 9  serviceAccountName: prometheus-extension-sa
10  syncPeriod: 5m0s
11  template:
12  - ytt:
13      ignoreUnknownComments: true
14      inline:
15        pathsFrom:
16        # !!!Update from here!!!!!!!!!
17        - secretRef:
18            name: prometheus-update-yaml
19        #!!!!!!!!!!!!
20        - secretRef:
21            name: prometheus-data-values
22      paths:
23      - tkg-extensions/common
24      - tkg-extensions/monitoring/prometheus

5. 設定の確認

しばらくすると、Reconcileが走るので結果をみます。kubectl get apps prometheus -n tanzu-system-monitoring -o yamlなどで確認できます。 Reconcileが完了したら設定を確認します。手取り早いのが、PrometheusのUIにアクセスをして、Status > Configurationで確認することです。

なお、この設定では、複数Prometheusを一箇所に集約していますので、node_infoも集約された全クラスター分みえてきます。 以下の設定では、“mycluster"と"demo"と作った両方のtkgが見えてきます。

まとめ

YTTを応用すると、PrometheusのFederationなど拡張設定が行えます。