TKG 1.3で複数Prometheusを一つにFederateする
TKGでのPrometheusを一つにまとめました
はじめに
VMwareが提供するTanzu Kubernets Grid Extensionsによって簡単にPrometheusがインストールすることができます。ところがマニュアルでは、カスタマイズできる箇所は以下のみが掲載されています。
残念ながら、Prometheusの全ての機能を網羅しているとはいえないです。では、マニュアルに書かれていないところは諦めないといけないかというとそうではなく、yttを駆使して任意の設定を差し込むことができます。ここでは、そのやり方を紹介します。今回ためすのは、PrometheusのFederationです。
注意点
以下の方法はまだ正式サポートが表明されていない手段ですのでご注意ください。
前提
手順
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など拡張設定が行えます。