本文の内容は、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」ボタンをクリックすれば、できあがりです。