< back to blog

Kubernetesを監視するためのPromQL 実用例 Top10

清水 孝郎
Kubernetesを監視するためのPromQL 実用例 Top10
Published by:
清水 孝郎
@
Kubernetesを監視するためのPromQL 実用例 Top10
Published:
May 30, 2021
シスディグによるファルコフィード

Falco Feedsは、オープンソースに焦点を当てた企業に、新しい脅威が発見されると継続的に更新される専門家が作成したルールにアクセスできるようにすることで、Falcoの力を拡大します。

さらに詳しく

本文の内容は、2021年5月27日にJesus Ángel Samitierが投稿したブログ(https://sysdig.com/blog/prometheus-query-examples)を元に日本語に翻訳・再構成した内容となっております。

この記事では、Kubernetesクラスターを監視するための10個の実用的なPrometheusクエリーの例を紹介します。

Sysdigは、Prometheus を使い始めたばかりで、PromQL クエリーの書き方がわからないという方、そんなあなたをサポートします。少し前に、PromQLのスタートガイドを作成しました。ここでは、理論的な話は抜きにして、PromQLの例をいくつか紹介します。

これらのPrometheusクエリー例は、何百人ものお客様のKubernetesクラスターを毎日監視してきた私たち自身の経験に基づいています。

Prometheusクエリー例 Top10

クラスターとネームスペースごとのポッド数

クラスター内のネームスペースにあるポッドの数のリストを持つことは、ネームスペースのポッドの数が異常に多かったり少なかったりすることを検出するのに役立ちます。

sum by (kube_namespace_name) (kube_pod_info)

CPUリミットのないクラスターとネームスペースごとのコンテナ数

アプリケーションとクラスターのパフォーマンスを最適化するには、クラスターに適切なリミットとリクエストを設定することが不可欠です。このクエリーは、CPUリミットのないコンテナを検出します。

count by (namespace)(sum by (namespace,pod,container)(kube_pod_container_info{container!=""}) unless sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="cpu"}))

ネームスペースごとのポッドの再起動

このクエリーでは、再起動しているすべてのポッドを取得できます。ポッドの再起動率が高いとCrashLoopBackOffになることが多いので、これはとても重要です。

sum by (kube_namespace_name)(changes(kube_pod_status_ready{condition="true"}[5m]))

準備ができていないポッド

このクエリーでは、何らかの問題が発生しているポッドをすべてリストアップします。トラブルシューティングの最初の一歩になるかもしれません。

sum by (kube_namespace_name) (kube_pod_status_ready{condition="false"})Kubernetesを監視するためのPromQL実用例トップ10🔥📊Click to tweet

CPUオーバーコミット

クラスターのキャパシティを超えるCPUリミットは、避けなければならないシナリオです。さもなければ、CPUスロットリングの問題が発生してしまいます。以下のクエリーでCPU オーバーコミットを検出することができます。

sum(kube_pod_container_resource_limits{resource="cpu"}) - sum(kube_node_status_capacity_cpu_cores)

メモリのオーバーコミット

クラスターのキャパシティを超えるメモリリミットは、ノードがメモリ不足になるとPodEvictionになってしまう可能性があります。このPromQLクエリーでこの状況に注意してください。

sum(kube_pod_container_resource_limits{resource="memory"}) - sum(kube_node_status_capacity_memory_bytes)

クラスターごとの準備完了ノード数

各クラスターで利用可能なノード数を一覧表示します。

sum(kube_node_status_condition{condition="Ready", status="true"}==1)

ノードリードネスフラッピング

準備ができている状態とできていない状態の間でフラッピングしているノードを特定します。

sum(changes(kube_node_status_condition{status="true",condition="Ready"}[15m])) by (node) > 2

クラスターごとのCPUアイドル数

コンピューティングキャパシティは最も繊細な設定の一つであり、Kubernetesのキャパシティプランニングを行う際の基本的なステップの一つです。このクエリーでは、何個のCPUコアが利用されていないかを検出できます。

sum((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[30m]) - on (namespace,pod,container) group_left avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="cpu"})) * -1 >0)

クラスターごとのメモリのアイドル状態

このクエリーを使用して、リクエストされたメモリがクラスター内でどの程度活用されていないかを検出することで、コストを削減できます。

sum((container_memory_usage_bytes{container!="POD",container!=""} - on (namespace,pod,container) avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="memory"})) * -1 >0 ) / (1024*1024*1024)

見逃したクエリーはありませんか?この記事を最新の状態に保つために、Twitterで教えてください!!

もっと詳しく知りたいですか?

PromQLを学ぶために、いくつかのリソースがオンラインで利用できます。私たちのPromQL Cheatsheetをダウンロードして、より複雑なPromQLクエリーの書き方を学ぶことができます。

また、素晴らしいAwesome Prometheus alerts collectionもチェックしてみてください。何百ものPrometheusアラートルールがあり、PromQLとPrometheusの詳細を学ぶことができます。

PromQL ライブラリーにおけるその他の Prometheus クエリー例

これらのPrometheusのクエリー例は、Sysdig MonitorのPromQLライブラリーから選びました。このライブラリーには、厳選された Prometheus クエリーの例が掲載されていますので、PromQL クエリーの書き方をググったり Stackoverflow で尋ねたりする必要はありません。

提案されたPrometheusのクエリー例から必要なクエリーを見つけて、「Try Me」ボタンをクリックしてください。PromQL Explorerが表示されますので、それを実行してください。

Sysdig Monitorの無料試用版に登録すると、新しいPromQLライブラリーを試すことができます。必要なPromQLクエリーを見つけて、「Try me」ボタンをクリックすれば、できあがりです。

About the author

Monitoring
Open Source

セキュリティの専門家と一緒に、クラウド防御の最適な方法を探索しよう