ServiceVision for PrometheusでPromQLクエリーをより早く簡単に

By 清水 孝郎 - MAY 9, 2021

SHARE:

本文の内容は、2021年4月29日にDamir Krstanovicが投稿したブログ(https://sysdig.com/bfaster-promql-servicevision-prometheus)を元に日本語に翻訳・再構成した内容となっております。

この度、ServiceVision for Prometheusを発表致しました。ServiceVision for Prometheusは、Sysdig MonitorにおけるネイティブPromQLサポートをさらに拡張し、よりシンプルなPromQLクエリーを迅速に作成できるようになりました。ServiceVision for Prometheusには、Prometheusのメトリクスを探索する新しい方法、ラベルの自動生成、ワークロードをグループ化する新しい方法が含まれており、可視性を高め、問題を迅速に解決するためのリッチなダッシュボードを実現します。

ServiceVisionは、Sysdigの特許技術を使用して、Kubernetesやアプリケーションのコンテキストでメトリクスを自動的にエンリッチします。これにより、環境にラベルを追加して計測する必要がなく、運用の複雑さとコストを削減します。

ServiceVision for Prometheusでは、PromQLを介してクエリーされたメトリクスは、Kubernetes、ホスト、およびクラウドのコンテキストでエンリッチされます。このエンリッチメントは、時系列メトリクスがバックエンドに送信された後、メトリクスインジェクションパイプラインで行われます。

例えば、各デプロイメントにおけるクラスターのCPU使用率を知りたいとします。次のようなクエリーを書くことができます。

sum by(cluster,namespace,owner_name) (
(sysdig_container_cpu_cores_used
* on(container_id) group_left(pod,namespace,cluster) kube_pod_container_info)
* on(pod,namespace,cluster) group_left(owner_name) kube_pod_owner{owner_kind="Deployment",owner_name=~".+",cluster=~".+",namespace=~".+"})

新しい ServiceVision for Prometheus を使うと、クエリーは次のようになります。

sum by (kube_cluster_name,kube_namespace_name,kube_deployment_name) (sysdig_container_cpu_cores_used{kube_cluster_name=~".+",kube_namespace_name=~".+",kube_deployment_name=~".+"})

魔法のように見えますよね?心配しないでください。この仕組みについては後で説明します。

どうやってやるの?

Sysdigエージェントは、すべてのクラスターからメトリクスをスクレイピングし、クラウドプロバイダー、ホスト、コンテナレベルのインフラ情報を取得します。もしKubernetesクラスターがあれば、Podからも情報を取得します。

Sysdig Monitorは、すべてのメトリクスにインフラ情報のアノテーションを施し、時系列データベースに保存します。これにより、すべてのインフラ情報がメトリクスと一緒に簡単にアクセスできるようになります。

PromQL Explorerですべてのデータを確認

ServiceVision for Prometheusでは、メトリクスに、より良い、より説明的なラベルを付けることができます。Sysdig MonitorのPromQL Explorerを使って、この豊富なメタデータを分析し、最大限に活用することができます。

なお、Kubernetesのメタデータのラベルはkube_で始まるため、ユーザーが作成したラベルとは簡単に区別することができます。

デフォルトのラベル情報(ServiceVisionを使用しない場合)
Screenshot showing the default labels you see when you're not using ServiceVision for Prometheus

ServiceVisionで強化されたラベル情報
Screenshot showing the extra labels you see in your PromQL queries thanks to the enrichment of ServiceVision for Prometheus

PromQLとの後方互換性

SysdigでPrometheusを使用し、PromQLクエリーを作成していた場合、これらのクエリーは同じパフォーマンスで動作します。

ServiceVision for Prometheusを利用して、クエリーを簡素化したい場合は、クエリーの簡素化とパフォーマンスの向上を得ることができます。

複雑なクエリーへの対応

ここでは、非常に複雑なクエリーを見ていきます。新しいSysdig MonitorのServiceVision for Prometheusを最大限に活用し、日々の作業が楽になるように書き換えていきましょう。Kubernetesのクラスター名、ネームスペース、ワークロードクラスターごとにまとめられたコンテナのメモリ使用量を知りたいと想像してみてください。この例では、StatefulSetsでやってみます。

PromQLでは、3つのメトリクスを結合(ベクターマッチ)する必要があります:

  • sysdig_container_memory_used_bytes、これはあなたが欲しい主な情報を持っています。
  • sysdig_container_info、どのコンテナがどのPodに属しているかを知っています。
  • kube_pod_owner、これはどのKubernetesオブジェクトがPodの所有者であるかを教えてくれます。

また、ラベル名が一致しない場合には、label_replaceというPromQL関数に頼る必要がありますが、これは頻繁に起こります。

この場合、kube_pod_ownerメトリクスのPod名のラベル名はpodなので、label_io_kubernetes_pod_nameラベルをpodという名前に置き換える必要があります。

ServiceVisionを使用しないPromQLではこのようにします:

sum by(cluster,namespace,owner_name) (sum by(pod)
(label_replace(sysdig_container_memory_used_bytes * on(container_id,host_mac) group_left(label_io_kubernetes_pod_namespace,label_io_kubernetes_pod_name,label_io_kubernetes_container_name) sysdig_container_info{label_io_kubernetes_pod_namespace=~".+",cluster=~".+"}
,"pod" ,"$1" ,"label_io_kubernetes_pod_name","(.*)")
)  * on(pod) group_right sum by(cluster,namespace,owner_name,pod) (kube_pod_owner{owner_kind=~"StatefulSet",owner_name=~".+",cluster=~".+",namespace=~".+"}))

これが ServiceVision for Prometheus でのやり方です。もっとシンプルですね:

sum by (kube_cluster_name,kube_namespace_name, kube_statefulset_name) (sysdig_container_memory_used_bytes{kube_namespace_name=~".+",kube_cluster_name=~".+",kube_statefulset_name=~".+"})

ご覧のように、ServiceVision for Prometheusでは、(group_leftやgroup_rightのような)ベクトルマッチング操作を行う必要はありません。また、メトリクス間の共通ラベルを意識したり、label_replace PromQL関数を使用する必要もありません。これらの時間節約のためのラベルは、検索バーに入力してPromQL Explorerで見つけることができます、PromQL Explorerは自動的に一致する構文を表示します。

Sysdig MonitorでのPromQLサポートの拡張

ServiceVision for Prometheusは、Sysdig MonitorにおけるPromQLのサポートをさらに拡張します。クラスターとアプリケーションのコンテキストに基づいて、追加のインフラストラクチャー情報を自動的に収集します。これにより、クエリーの複雑さが軽減され、クエリーをより速く書くことができます。

Prometheusは多くの採用実績がありますが、PromQL自体は学習曲線が険しく、複雑なコンテナオーケストレーション環境で使用するのは困難です。ServiceVision for Prometheusを活用すると、必要なコンテナ、ホスト、クラスターのメタデータがすべてのメトリクスに設定されています。これにより、クエリーの記述と理解が非常に容易になります。

ServiceVision for Prometheusを使い始める準備はできましたか?

ServiceVision for Prometheusの利用を開始するには、Sysdig MonitorのExplore機能に移動し、新しいPromQL Explorerをチェックするだけです。ダッシュボードにクエリーを追加したり、アラートを作成したりすることができます。

この機能は、Sysdig US-Eastリージョンから既存のお客様に提供されており、今後数週間のうちに他のリージョンにも展開される予定です。また、ServiceVision for Prometheusの動作については、Supercharging Kubernetes Labels and Metricsのウェビナーでご覧いただけます。