Prometheusとは何か? metricsのmonitoringの解説
Prometheusは、数値のmetricsを時系列で収集し、時系列データベースに保存し、それらをクエリしてアラートできるようにするオープンソースのmonitoringシステムです。
Prometheusは、もともとSoundCloudで構築され、現在はCNCFのgraduatedプロジェクトであり、cloud-nativeなインフラで最も広く導入されているmetricsシステムの一つです。多くの他のツールが今では話すmetricsフォーマットとクエリ言語を定義しました。これを理解することは、metricsベースのmonitoring全般を理解する良い方法です。
pullモデル
アプリケーションがコレクターにmetricsをpushするシステムとは異なり、Prometheusはそれらをscrapeします。各targetがHTTP経由で公開するプレーンテキストのmetricsページを定期的に取得します。このpullモデルは、targetを書くのを簡単にし、targetがダウンしているとき(scrapeが失敗する)を明白にし、サーバーが収集頻度を制御し続けられるようにします。
時系列とラベル
Prometheusは、すべての測定を、metric名とキーと値のラベルのセット(例えばメソッドとステータスコードで分けたリクエスト数)によって識別される時系列として保存します。ラベルはデータをスライス可能にするものですが、cardinalityの問題が始まる場所でもあります。ラベルの組み合わせが多すぎると、系列の数が爆発します。
PromQL
クエリは、時系列を選択・集約するための関数型言語であるPromQLで書かれます。それを使って、counterからrateを計算し、histogramからパーセンタイルを取り、インスタンス間で集約します。PromQLは、dashboardとアラートルールの両方の背後にあるエンジンです。
アラート
PrometheusはPromQLで書かれたアラートルールを評価し、発火したアラートを companion コンポーネントであるAlertmanagerに渡します。Alertmanagerは、グループ化、重複排除、silencing、そしてemail、chat、on-callツールなどの宛先へのルーティングを処理します。この分離により、アラートの評価とアラートの配信が明確に区別されます。
CI/CDにおけるPrometheus
チームは一般的に、pipelineがdeployするサービスにPrometheusを向け、deploy後のcheckやcanary分析が実際のmetricsをクエリできるようにします。pipelineはまた、所要時間やテスト数といったjobに関する単発のmetricsをPushgateway経由でpushします。短命のCIのjobはscrapeされるほど長く存在しないからです。
強みと限界
Prometheusは、単一のcluster上での信頼できるリアルタイムのmetricsとアラートに優れています。その意図的なトレードオフには、ローカルストレージと、logsやtracesではなくmetricsへの焦点が含まれるため、チームはしばしば長期ストレージのバックエンドや、他のオブザーバビリティの柱をカバーするためのloggingおよびtracingツールと組み合わせます。
重要なポイント
- Prometheusは、オープンソースでpullベースのmetricsのmonitoringシステムです。
- ラベル付きの時系列を保存し、PromQLでそれらをクエリします。
- Alertmanagerがそのアラートのルーティングと重複排除を処理します。
- CI/CDでは、deploy後のcheck、canary分析、pipelineのmetricsを支えます。