このブログを検索

この記事の内容は、個人の見解、検証の範囲のものであり、誤りがある可能性があります。
個人の責任において情報活用をお願いします。


2024年9月30日月曜日

Prometheus で kubernetes 上のリソースを監視してみる その3 Prometheus から Kubernetes のメトリクスを取得して Grafana で可視化してみる

前回、Prometheus と Grafana の構築を kubernetes 上で行ってくれる yaml を作成しました。
今回はこれに、Prometheus に監視対象となる Pod や Service の追加が行われた状態の yaml を作ってみます。
前回に引き続き今回も Chat-GPT さんに協力をしてもらいました。

Kubernetes のリソースについてメトリクスを取得するための作業を開始

前回作ったyamlをベースに追加していくことを考え、作成してもらったyamlにdefaultのnamespaceに展開されたPod、DeploymentあとServiceを監視するための情報をconfigmapに追加してほしいと依頼しました。

出てきたものをそのまま展開し、Pod、Deployment、Serviceを展開したのですが確認のクエリをPrometheusから実行しても何も表示されません。
そのため、何も表示されなかったことを伝えると、アノテーションを追加するように言われました。
ところがやはり何も表示されません。

何か足りてないんじゃないかなと漠然とですが思ったので、問題の解決をするために何から順番に調査したらいいかをおたずねしたところ以下の通りメトリクスエクスポーターについて確認するよう案内があり「あっ、エクスポーター展開してなかったわ」と気が付かされました。
メトリクスエクスポーターの展開と設定

なので、メトリクスエクスポーターの展開と情報収集するためのyamlをお願いしたところ、なぜかメトリクスエクスポーターと一緒にノードエクスポーターのyamlも作ってくれました…w
Kubernetes上の事だけにとらわれず、その土台であるノードもちゃんと確認するんだよというChat-GPTさんの優しさでしょうか。
気が利いていますね。

ところがどっこい。
頂いたものをそのまま使ってもうまくいかないのが、Chat-GPTさん。
いつでも我々の技術力と理解力のアップのため何かしらの罠を仕掛けてくるのです。

まず、Pod間の通信が行われていないというエラーがありました。
サービスの状態を確認したら、ServiceのClusterIPが割り当てられていなかったのでそこはServiceでtype: ClusterIPをちゃんと設定して解消されました。

一回、展開していたDeploymentやServiceなどを消してきれいにして再作成して状況を見ます。
こういう時、環境をきれいにしてやり直せるのがKubernetes上で検証を行うときの利点ですね。
ですが、だろうなとは思いつつやっぱりまだ何かが足りてない様子。

というわけで、kubectl logs でメトリクスエクスポーターを調査したところ、どうやらSAやRole、Rolebindingを設定していなかったのでprometheusがAPIでアクセスできなかったのが原因と考えられました。
成る程…権限ですか、必要な権限を一個一個足していくのが正しいのでしょうが今回は検証。
さっさと Grafana にたどり着きたい。

そこで私は考えました。
権限を全部与えちゃえばいいよね…と。
しかし、そのような行為はChat-GPTさんとしてはNG。
くっ…、ここまでお手伝いしてくれたChat-GPTさんの忠告を無視したくはない…。
ですが、問題の切り分けとして一旦すべての権限を与えて問題が解決するかどうか確認したいですとお伝えすると、それは良いアイデアだと思いますと賛同を得られました。
メトリクスエクスポーターが使うSAにすべての権限を与えるyamlを展開して、ついにPrometheusでクエリを実行して情報を得ることができたのです…長かった~。

Grafana で Kubernetes 上のリソースについて監視。

いよいよ、Grafanaでその情報を表示してみようと思います。
表示する内容としては、kuardを展開しているDeploymentのステータスを見てみようと思います。
見るステータスはreplicaがavailableかunavailableかについてを見るのがわかりやすいかなと思いやってみました。

まず、Prometheus の方でちゃんと情報が取得できているか実際にクエリを実行してみます。 実行するのは以下のDeploymentの状態について確認するコマンドです。
kube_deployment_status_replicas_available{deployment="kuard"}
kube_deployment_status_replicas_unavailable{deployment="kuard"}
ちゃんと実行結果が返ってきてくれました。(歓喜)

続いては、このクエリを使って Grafana でダッシュボードを作ってみます。

まず Grafana にログインします。
Data sources の追加は終わっているので、そのまま Dashboards をクリックしてCreate dashbprad をクリックします。

Add visualization をクリックします。
Select data source で追加済みの prometheus を選択します。
Metrics browser に kube_deployment_status_replicas_available{deployment="kuard"} を入力して『Run queries』をクリックします。
グラフが表示されました。
Deployment で定義している Replica の数が3つで3つとも正常に稼働していることがわかりますね。
何の情報を表示しているのかわかるようにパネルのタイトルを入力します。
右側の『Panel options』で『kuard_deployment_status_replicas_available』と入力して、上の方の『Save』をクリックします。
ダッシュボードのタイトルを入力します。
今回は『kuard-deployment』と入力して『save』をクリックします。
これでダッシュボードのは作成はできました。
続いてパネルをもう一つ追加しようと思います。
『Add』から『Visualization』をクリックします。
Metrics browser に kube_deployment_status_replicas_unavailable{deployment="kuard"} を入力して『Run queries』をクリックします。
グラフが表示されました。 このパネルは unavailable の状態がないか監視するメトリクスのため 0 となっていることが望ましいためOKですね。
こちらも、パネルの名前を右側の『Panel options』で『kuard_deployment_status_replicas_unavailable』と入力して、上の方の『Save』をクリックします。
『Save』を押して保存しましょう
改めて『Dashnords』を見てみると、作成した『kuard-deployment』が表示されています。
これをクリックすると内容が見れます。
パネルが縦に並んでいるので横に変えます。
パネルをクリック&ドロップで移動できるので『kuard_deployment_status_replicas_unavailable』横にずらします。
この状態でフロッピーディスクのマークをクリックします。
『Save』をクリックして保存します。
これで、Kubernetes 上のリソースについて Prometheus で情報を収集し Grafana を使用して可視化することができました。
Prometheus の yaml 作成や、メトリクスエクスポーターの設定などおそらく一人でやったら無理だったろうなぁと正直思います。
Chat-GPTさんの手助けがあってここまでこれたのは間違いありません。

自分自身で考えて物事を理解することはもちろん重要ですが、今回のように学習コストをChat-GPTさんに負担してもらって進めていく方法もそれはそれで自分では気が付かなかったことを気が付かされてそこから知識や経験が伸びていくことを感じましたので、どちらもバランスよくやっていけたらいいなと思いました。

今回で Prometheus と Grafana を使用したリソース管理は一旦終わりとなります。
読んでいただきありがとうございました。