「New Relic Kubernetes integration」というエージェントを使うことで Kubernetes のメトリクスを簡単に New Relic へ送ることができる。
この Kubernetse integration は OpenShift にも対応しているが、kube-state-metrics には注意が必要。
何が起こるか:nrk8s-ksm で Warning が出続ける
Kubernetes integration は Helm を使ってインストールでき、色々はリソースがデプロイされる。 そのうちの一つに nrk8s-ksm というコンポーネント (Deployment) があるが、デフォルト設定で Kubernetes integration をインストールすると、この nrk8s-ksm が次の Warning メッセージを出し続けてしまう。
Error populating KSM metrics: populate errors:, querying KSM: getting filtered metric families: error calling prometheus exposed metrics endpoint. Got status code: 400どうすればよいか:参照する kube-state-metrics の namespace を指定する
Kubernetes integration を Helm でインストールするとき、次の values.yaml が使われる。
この values.yaml に nrk8s-ksm が参照する kube-state-metrics がある namespace を指定することで上記の Warning メッセージは出力されなくなる。 例えば、Kubernetes integration はデフォルトで newrelic namespace にコンポーネントをデプロイするので、次のように newrelic namespace を指定すること解消する。
newrelic-infrastructure:
enabled: true
# 追加した項目
ksm:
enabled: true
config:
namespace: "newrelic"なぜ Warning メッセージが出続けてしまうのか
nrk8s-ksm はクラスタから kube-state-mertrics を探してスクレイピングする役割がある。
OpenShift ではデフォルトで openshift-monitoring namespace に kube-state-metrics がデプロイされる。 なので nrk8s-ksm はデフォルトの kube-state-metrics を見ればいいように思えるが、デフォルトの kube-state-metrics は OpenShift コアコンポーネントの用途でしか使えないよう制限されている。 そのため、nrk8s-ksm が openshift-monitoring namespace の kube-state-metrics を参照すると上記の Warning メッセージが出力される。
一方、New Relic の Kubernetes integration でもデフォルトでは newrelic namespace に kube-state-metrics がデプロイされる。 nrk8s-ksm はすべての namespace から kube-state-metrics を探すようになっているため、openshift-monitoring namespace の kube-state-metrics と newrelic namespace の kube-state-metrics 両方に対してスクレイピングする。
nrk8s-ksm はリトライ回数が指定されていてエラーが続けば Pod が停止されるが、newrelic namepsace のほうは問題なくスクレイピングできるため両方の kube-state-metrics に対してスクレイピングしているとリトライ回数がリセットされるらしく、そのせいで openshift-monitoring namespace へのスクレイピングで発生した Warning メッセージが出続けてしまう(ここは推測)。

そこで、values.yaml で kube-state-metrics を探す namespace を指定する(=openshift-monitoring namespace を除外する)ことで Warning メッセージが出なくなるということ。

ちなみに、New Relic Kubernetes integration での kube-state-metrics デプロイを無効化することもでき、openshift-monitoring namespace の kube-state-metrics だけ存在するようにすると、次の New Relic のドキュメントに載っているように Warning メッセージのあとに Error メッセージが出る。
time="2024-10-18T04:04:21Z" level=warning msg="Error populating KSM metrics: populate errors:, querying KSM: getting filtered metric families: error calling prometheus exposed metrics endpoint. Got status code: 400"
time="2024-10-18T04:04:21Z" level=warning msg="Error populating KSM metrics: populate errors:, querying KSM: getting filtered metric families: error calling prometheus exposed metrics endpoint. Got status code: 400"
time="2024-10-18T04:04:21Z" level=warning msg="Error populating KSM metrics: populate errors:, no data was populated"
time="2024-10-18T04:04:21Z" level=error msg="retrieving scraper data: retrieving ksm data: KSM data was not populated after trying all endpoints"今回の対処方法は上記ページに記載されているものとほぼ同じだけど、openshift-monitoring の kube-state-metrics でなんとかできんのか?といろいろ試して結局ダメだったのでここに供養する。
No comments yet