概要
Prometheusとは?
Prometheusは、もともとSoundCloudで開発されたオープンソースのシステム監視およびアラートツールキットです。2012年の開始以来、多くの企業や組織がPrometheusを採用しており、このプロジェクトには非常に活発な開発者とユーザーのコミュニティがあります。現在では独立したオープンソースプロジェクトとして、いかなる企業からも独立してメンテナンスされています。このことを強調し、プロジェクトのガバナンス構造を明確にするため、Prometheusは2016年にCloud Native Computing Foundationに参加し、Kubernetesに次ぐ2番目のホストプロジェクトとなりました。
Prometheusはメトリクスを時系列データとして収集・保存します。つまり、メトリクス情報は記録されたタイムスタンプと、オプションのキーと値のペアであるラベルとともに保存されます。
Prometheusの詳細な概要については、メディアセクションにリンクされているリソースを参照してください。
機能
Prometheusの主な機能は以下の通りです
- メトリック名とキー/値ペアで識別される時系列データを持つ多次元データモデル
- この次元性を活用するための柔軟なクエリ言語であるPromQL
- 分散ストレージに依存せず、単一サーバーノードが自律的である
- HTTP経由のプルモデルによる時系列データの収集
- 中間ゲートウェイを介した時系列のプッシュをサポート
- サービスディスカバリまたは静的構成によるターゲットの発見
- グラフ化とダッシュボードの複数のモードをサポート
メトリクスとは?
メトリクスとは、一般的に数値による測定値を指します。時系列という用語は、時間とともに変化を記録することを意味します。ユーザーが測定したいものは、アプリケーションによって異なります。Webサーバーの場合、リクエスト時間、データベースの場合、アクティブな接続数やアクティブなクエリ数などが考えられます。
メトリクスは、アプリケーションが特定の方法で動作している理由を理解する上で重要な役割を果たします。Webアプリケーションを実行していて、それが遅いとわかったとしましょう。アプリケーションで何が起こっているかを知るには、いくつかの情報が必要です。たとえば、リクエスト数が多い場合、アプリケーションが遅くなることがあります。リクエスト数のメトリクスがあれば、原因を特定し、サーバー数を増やして負荷を処理できます。
コンポーネント
Prometheusエコシステムは複数のコンポーネントで構成されており、その多くはオプションです
- 時系列データをスクレイプして保存する主要なPrometheusサーバー
- アプリケーションコードをインストルメント化するためのクライアントライブラリ
- 短期間のジョブをサポートするためのプッシュゲートウェイ
- HAProxy、StatsD、Graphiteなどのサービス用の特殊なエクスポーター
- アラートを処理するためのアラートマネージャー
- 様々なサポートツール
PrometheusのコンポーネントのほとんどはGoで記述されており、静的バイナリとして簡単にビルドおよびデプロイできます。
アーキテクチャ
この図は、Prometheusとそのエコシステムコンポーネントの一部を示しています。
Prometheusは、インストルメントされたジョブから、直接または短期間のジョブ用の中間プッシュゲートウェイを介してメトリクスをスクレイプします。スクレイプされたすべてのサンプルをローカルに保存し、このデータに対してルールを実行して、既存のデータから新しい時系列を集約・記録したり、アラートを生成したりします。Grafanaやその他のAPIコンシューマーは、収集されたデータを視覚化するために使用できます。
フィットする場面
Prometheusは、純粋な数値時系列の記録に優れています。マシン中心の監視と、非常に動的なサービス指向アーキテクチャの監視の両方に適しています。マイクロサービスの世界では、多次元データ収集とクエリのサポートが特に強みです。
Prometheusは信頼性を重視して設計されており、障害発生時に問題を迅速に診断できるシステムとして活用できます。各Prometheusサーバーはスタンドアロンであり、ネットワークストレージや他のリモートサービスに依存しません。インフラストラクチャの他の部分が故障している場合でも頼りになり、利用するために大規模なインフラストラクチャをセットアップする必要はありません。
フィットしない場面
Prometheusは信頼性を重視しています。システムに関する利用可能な統計情報は、障害状況下でも常に確認できます。ただし、リクエストごとの課金など、100%の精度が必要な場合、収集されるデータは詳細かつ完全ではない可能性が高いため、Prometheusは良い選択肢ではありません。そのような場合は、課金のために別のシステムでデータを収集・分析し、監視の残りの部分にPrometheusを使用するのが最善でしょう。