Prometheusとは?監視とアラートのOSS

2月 16, 2025

Prometheusは、アプリケーションやインフラストラクチャからメトリクスを収集・処理するために設計されたオープンソースの監視およびアラートシステムです。Prometheusはプルモデルで動作し、設定されたターゲットから定期的にHTTPリクエストを送信してデータを取得します。収集されたデータは、カスタムデータベースにローカルに保存され、PromQL言語を使用してクエリできます。Prometheusは分散システムの監視に非常に効果的で、DockerやKubernetesなどの最新テクノロジーと連携するように最適化されています。

図1:

通常、アプリケーションは自動的にメトリクスを生成するわけではなく、開発者がコードにインスツルメンテーション(計測)を組み込む必要があります。Client Librariesはこのプロセスを簡素化し、わずか数行のコードで、メトリクスの定義と計測を制御中のソースコードに直接統合できます。これはDirect Instrumentation(直接計測)と呼ばれます。Prometheusは、Go、Python、Java/JVM、Ruby、Rustなど、一般的な言語用のClient Librariesを提供しています。さらに、C#/.Net、Node.js、Haskell、Erlangなどの他の言語向けのサードパーティライブラリも多数存在します。

コードにアクセスして追加のコードを挿入できない場合、つまり直接計測を実行できない場合があります。Exporterは、メトリクスを取得したいアプリケーションと一緒にインストールされる小さなソフトウェアです。Prometheusからのリクエストを受け取り、アプリケーションからデータを収集し、Prometheusが理解できる形式に変換して結果を返します。Exporterは、アプリケーションとPrometheus間のデータ変換器と考えることができます。Client Librariesを使用した直接統合とは異なり、ExporterはCustom CollectorsまたはConstMetricsと呼ばれる別の種類の計測を使用します。

Prometheusをアプリケーションに統合し、Exporterを設定した後、Prometheusはそれらを監視するためにアプリケーションとExporterの正確な場所を知る必要があります。クラウドなどの動的な環境では、サービスは常に変化(作成または削除)する可能性があるため、アプリケーションとExporterのリストを一度だけ提供することはできません。このリストはすぐに古くなってしまうため、Service Discoveryが必要です。Prometheusは、Kubernetes、EC2、Consulなどの一般的なService Discoveryメカニズムと統合されており、監視が必要なアプリケーションを自動的に検出します。システムがこれらのサービスを使用していない場合でも、Prometheusは他のシステム向けの一般的な統合方法を提供しています。

図2:

PrometheusがService DiscoveryとRelabelingを通じて監視対象のリストを見つけ出した後、それらのターゲットからデータを取得する必要があります。Prometheusは、Scrapeと呼ばれるHTTPリクエストを送信してメトリクスを収集することでこれを行います。データの収集時に、Prometheusは、Scrapeが成功したかどうか、Scrapeの完了にどれくらい時間がかかったかなど、いくつかの有用な情報を記録します。Scrapingは定期的に実行されるように設定されており、通常、各ターゲットに対して10〜60秒ごとに行われます。Prometheusはプルモデルを使用しており、監視対象から積極的にデータを収集します(プッシュモデルとは対照的です)。

Prometheusは、カスタムデータベースを使用して、サーバーにデータを直接保存します。複雑な分散ストレージシステムを構築する代わりに、Prometheusはローカルストレージを選択して、システムの運用を容易にし、信頼性を高めています。現在のPrometheus 2.0バージョンは、毎秒数百万のサンプルデータを収集でき、単一のPrometheusサーバーで数千台のコンピューターを監視するのに十分な強力さを備えています。Prometheusは強力な圧縮アルゴリズムを使用しており、実際のデータサンプルごとに1.3バイトの圧縮率を実現しています。速度を上げるためにSSDの使用を推奨していますが、必須ではありません。Prometheusはローカルサーバーにのみデータを保存するため、そのコンピューターのディスク容量によって制限されます。これは、データを長期間保存したい場合に問題になる可能性があります。Prometheusには、複数のコンピューターにデータを保存するためのソリューション(クラスタストレージ)はありません。ただし、外部ストレージシステムに接続できるRemote ReadおよびRemote Write APIがあります。これにより、クエリ方法を変更することなく、ローカルデータとリモートデータの両方からデータをクエリできます。

Leave A Comment

Create your account