🚀
K8sGPT: Prometheus Analyzers
v0.3.26
からPrometheus の Analyzer がリリースされました
デモ映像はこちら
本PR作成者の Daniel Clark さんは Google の方 (2024/01/18時点)で,prometheus-engine (Cloud Managed Service for Prometheus (GMP)) に多くのコントリビューションをされています.
先にまとめ
-
Prometheus Analyzer には現在二つの機能が含まれる
- Config Analyzer と Relabel Analyzer
-
Config Analyzer は PrometheusConfig を見て以下を確認
- 対応していないパラメータを使っていないかどうか (YAML<->構造体の相互変換)
- スクレイピングの設定があるかどうか
- Relabel Analyzer は Validation 用途ではなく、何が設定されているかを簡易的に解説する機能
- Kubernetes 環境で Prometheus を初めて使うような方にとってはサポート役になってくれそうです
- 次の会は対話型でk8sgptを使いデバッグを行っていく interactive mode について紹介できたらと思います
https://github.com/k8sgpt-ai/k8sgpt/pull/854
実装を読み込む
ConfigAnalyzer
補足
-
ConfigReloader とは
- Prometheusの設定ファイルを動的に再読み込みし、Prometheusが再起動することなく変更を取り込むツール
- プロンプト本文はこちら
- Prometheus のドキュメントを参考に修正までの提案をしてくださいという内容
処理
- 以下のラベルを持つ Prometheus の Pod を取得
var prometheusPodLabels = map[string]string{
"app": "prometheus",
"app.kubernetes.io/name": "prometheus",
}
- ConfigReloader の Flag (
--config-file=
) から Prometheus設定ファイルが置いてあるパスを取得
2-1. ConfigReloader がなければ Prometheus の Flag から探す - パスからVolume名(k8s用語)を取得し,設定ファイルの中身を取り出す
(※ ここまでは下準備,以降 Analyze の内容) - Prometheus設定ファイルのバリデーション
- YAML<->構造体の変換
- スクレイピングの設定(ScrapeConfig)に値が入っているかどうか
出力結果 (Demo画面のスクショ)
RelabelAnalyzer
補足
-
Prometheus の
relabel_config
とは- Service Discovery (監視対象) に対する操作ができ
- 監視対象のフィルタ(ex: keep,drop)やラベルの変更等(ex: replace)が可能です
-
relabel_config は scrape_config のパラメータの一つ
-
プロンプト本文はこちら
- プロンプトではscrape_configから以下の三つのパラメータを渡している
-
job_name
,relabel_configs
,kubernetes_sd_configs
-
- 設定ファイルを見やすいよう指定したフォーマットに変換してくださいという内容
- プロンプトではscrape_configから以下の三つのパラメータを渡している
-
scrape_config のサンプル
- Argo Workflows に Prometheus Operator の Service Monitor を作成した際のサンプル
scrape_configs:
- job_name: serviceMonitor/argo-workflows/argo-workflows-workflow-controller/0
honor_labels: false
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- argo-workflows
scrape_interval: 30s
metrics_path: /metrics
relabel_configs:
- source_labels:
- job
target_label: __tmp_prometheus_job_name
- action: keep
source_labels:
- __meta_kubernetes_service_label_app_kubernetes_io_instance
- __meta_kubernetes_service_labelpresent_app_kubernetes_io_instance
regex: (argo-workflows);true
(長いので割愛)
処理
※ Prometheus Config を取得するところまでは ConfigAnalyzer と同じ
- relabel_configs 構造体を YAML に変換
- Service Discovery Config から Kubernetes の SDConfig を探す
- 見つかったら構造体を YAML に変換
- ①と② どちらかが空でない場合はプロンプトに渡す情報(補足参照)を作成
Discussion