Prometheus (ソフトウェア)

Prometheus（プロメテウス）は、イベント監視とアラート通知に利用される無料のアプリケーション・ソフトウェアである。時系列データベースをHTTPプル方式でリアルタイムに構築し、柔軟なクエリーとアラート機能を提供する。

PrometheusはGoで書かれ、Apache License 2.0の下でライセンスされ、ソースコードはGitHubで公開されており、KubernetesやEnvoyとともにCloud Native Computing Foundationの卒業プロジェクトとなっている。

歴史 

Prometheusは、2012年にSoundCloud社で開発された。同社は、既存のメトリクスおよび監視ソリューション（StatsDとGraphiteを使用）が同社の目的に不十分であると気づいた。そこで、多次元データモデル、運用のシンプルさ、スケーラブルなデータ収集、強力なクエリー言語など満たすべき目標を定め、Googleの監視ツールBorgmonを参考に単独のツールで実現すべく開発を始めた。このプロジェクトは当初からオープンソースであり、明確にアナウンスされていないにもかかわらず、BoxeverやDockerのユーザーにも利用され始めた。

2013年、SoundCloudの自社システム監視にPrometheusが導入された。それが正式に公示されたのは2015年1月である。

2016年5月、Cloud Native Computing Foundation（以下CNCF）は、Kubernetesに次ぐ2番目のインキュベートプロジェクトとしてPrometheusを受け入れた。発表記事には、DigitalOcean、Ericsson、CoreOS、Weaveworks、Red Hat、Googleなど多くの企業でPrometheusが利用されていることが記されている。

2016年7月、Prometheus 1.0がリリースされた。

2018年8月、CNCFは、Prometheusプロジェクトが“卒業”（graduated）したことを発表した。

アーキテクチャー 
Prometheusによる監視プラットフォームは、典型的には次のツールの組み合わせで構成される。

 監視対象ホスト上で実行され、メトリクスを提供するExporter
 メトリクスを定期的に要求（プル）し、一元化して管理するPrometheus
 メトリクスと設定条件に基づいてアラートを通知するAlertmanager
 メトリクスをダッシュボードにグラフ表示するGrafana
 アラート通知やグラフ表示に使用されるクエリ言語PromQL

データ格納形式 

Prometheusが扱う時系列データはメトリクスという形で保存され、各メトリクスには参照用の名前がついている。さらに各メトリクスは、任意の数のキー・バリューの組（ラベル）でドリルダウンすることが可能である。このラベルには、データソース（データがどのサーバーから送られてくるか）の情報や、HTTPステータスコード（HTTP応答に関連するメトリクス用）、HTTPクエリーメソッド（GETとPOST）、エンドポイントURLなど、アプリケーション固有のブレークダウン情報を含めることができる。これらのラベルを組み合わせてクエリーを実行できることから、Prometheusのデータは多次元データモデルと呼ばれる。

データ収集 

Prometheusは、Exporterと呼ばれるデータソースに特定のポーリング頻度で問い合わせを行う（プル方式）。各Exporterは、Prometheusが問い合わせたエンドポイントにそのデータソースの現在値メトリクスを提供する。Prometheusは、こうして集めたメトリクスを集約して保管する。なおPrometheusには、Exporterを自動的に発見するためのメカニズムがいくつか用意されている。

PromQL 
Prometheusはデータの選択と集計のため、独自のクエリー言語PromQL（Prometheus Query Language）を備えている。PromQLは時系列データベースに適合するよう設計されており、時間に関連した問い合わせ機能も豊富に用意されている。Prometheusには次の4つのメトリック型が定義されている。
 Counter
 値が増加する一方の単調な値
 Gauge
 自由に増減する値
 Histogram
 度数分布を収集し、ヒストグラムとして視覚的に処理できるようにする
 Summary
 Histogramと同様に度数分布が記録され、すべての観測値の数と合計も記録される

監視とアラート 

Prometheusでは、閾値や期間の条件によるアラート通知の設定を行うことができる。発行されたアラートはAlertmanagerに転送される。Alertmanagerには、アラートを制限したり、メール、Slack、PagerDutyなどに転送したりするロジックを含めることができる。Microsoft Teamsのような他のメッセージングシステムも、外部統合のためのメカニズム「Alertmanager Webhook Receiver」を経由して利用することができる。

ダッシュボード 

Prometheusは、ダッシュボードソリューションとしては設計されていない。特定のクエリーを簡易的にグラフ化することはできるものの、本格的なダッシュボードを生成するにはGrafanaなどと連携させる必要がある。

相互運用性 

Prometheusはホワイトボックス監視を推奨しており、アプリケーションには内部メトリクスを提供するExporterの公開が望まれている。実際、すでにさまざまなアプリケーションのエクスポーターが公式・非公式に用意されている。Prometheusは、移行時の相互運用を可能にするために、いくつかの監視・管理プロトコルをサポートしている（Graphite、StatsD、SNMP、JMX、CollectD等）。

Prometheusは、プラットフォームの可用性と基本的な操作に重点を置いている。メトリクスは通常数週間保存されるが、リモートストレージを利用することでより長期的かつ安全に保存することもできる。

OpenMetricsへの標準化 

Prometheusのメトリクス形式を「OpenMetrics」と呼ばれる標準として普及させる取り組みがある。InfluxDataのTICKスイート、InfluxDB、Google Cloud Platform、Datadogなど、すでにこの形式を採用した製品も存在する。

採用 

Prometheusは前述のとおり、開発元であるSoundCloud社の自社システム監視に初めて使用された。またCNCFには、デジタルホスティングサービスDigitalOcean、デジタルフェスティバルDreamHack、連絡先移行サービスShuttleCloudなど、Prometheusを利用する企業の事例が多数掲載されている。ほかにもデータパイプライン監Pandora Radio、リポジトリマネージャーGitLabなどがPrometheusを採用している。

出典

参考文献 
 
 
 
 
 
 

システムソフトウェア
オープンソースソフトウェア
Apache Licenseのソフトウェア
2012年のソフトウェア