Prometheusとは
Prometheus は、サーバのリソース状況やソフトウェアの統計情報といった各種メトリックスを収集して監視を行うモニタリングシステムです。ロギングやトレーシングを行うといった多用途のものではなくメトリックス収集に特化しているモニタリングシステムで、人気が高まりつつあるモニタリングシステムです。
もともと SoundCloud 社によって開発されたツールで、現在では、Cloud Native Computing Foundation によってメンテナンスされており、クラウドや Kubernetes 環境で利用されるケースが多いのも特徴です。
Prometheus のアーキテクチャ
Prometheus の全体的なアーキテクチャは次のようになっています。
Prometheus は Prometheus サーバから各コンポーネントに HTTP 通信にてメトリックスの収集、サービスディスカバリ、通知を行います。メトリックスの収集はプル方式( Prometheus サーバから命令を出す方式)で行うのが特徴です。バッチ処理の実行結果など、Prometheus サーバに値を送りたい場合には、Pushgateway 宛に値を送り、Prometheusサーバからは Pushgateway にプル方式で値を取得するようなアーキテクチャとなっております。
プル方式のメリットとして、Prometheus のFAQでは次のような説明があります。
- You can run your monitoring on your laptop when developing changes.
- You can more easily tell if a target is down.
- You can manually go to a target and inspect its health with a web browser.
プッシュ方式で値を取得する場合には、サーバ側の負荷を超えて値が送られる場合もあり、プル方式は、サーバ側の性能を超えた処理はしないため、安定的に運用をしやすいのもメリットだと考えられます。一方、プッシュ方式のメリットとしては、プッシュされたデータに監視対象のデータを入れ込むことで、新しくシステムに追加された監視対象を容易に発見(ディスカバリ)できる点にあります。Prometheus は監視対象のディスカバリ機能を持っており、プッシュ方式でなくとも、監視対象のディスカバリができるようになっています。
exporter
Prometheus のライブラリを利用してメトリックスを提供している一部のソフトウェアでは、Prometheus サーバから直接アクセスを行うことで、メトリックスを収集することがきます。独自のメトリックス形式を持っている多くのソフトウェアに対しては、exporter とよばれるものでメトリックスを公開します。
例えば、PostgreSQL、Redis、JMX、Linux システム用の exporter といったように用途ごとに exporter が存在します。利用者は、環境に合わせて必要な exporter を利用することになります。
exporter一覧
サービスディスカバリ
Prometheus のサービスディスカバリを利用することで、監視対象を自動的に見つけることができます。
主なサービスディスカバリ
- Azure
Azure上のVMのディスカバリ - ec2
Amaozn EC2インスタンス向けのディスカバリ - gce
Google Cloud Platform向けのディスカバリ - kubernetes
kubernetes向けのディスカバリ - dns
DNSレコードを利用したディスカバリ - file
ファイルに記載された情報をもとにディスカバリ
スクレイピング
サービスディスカバリによって取得した監視対象のリストを利用して、Prometheus サーバによりメトリックスの収集を行えます。Prometheus ではメトリックスの収集を「スクレイピング」と呼びます。サーバ側の設定でスクレイピングの時間間隔を設定することができるようになっています。また、ルールという機能を利用して、スクレイピングして取得したメトリックスを集計・計算して保存するといったこともできます。
ダッシュボード
Prometheus のダッシュボードとしては、別の OSS ソフトウェアである Grafana が利用できます。
Grafana では標準で、データストアとして複数の Prometheus サーバを登録することができるようになっているので、拠点ごとに導入している複数の Prometheus を一つのダッシュボードで表現するといったこともできます。
Prometheus 本体にも、取得した値の確認、評価を行う expression browser というものが用意されていますが、機能が限られた UI となっております。
通知
通知の閾値設定は Prometheus サーバで行われます。閾値を超えた場合には、メール等の通知を行われますが、Prometheus サーバからメール送信は行われません。Prometheus サーバは HTTPリクエストにて Alertmanager に処理を依頼して、Alertmanager からメール通知やslack通知が行われます。Alertmanager には、通知を集約する機能や、一時的に通知を送らない(ミュートする)といったユニークな機能を有しております。
ストレージ
デフォルトでは、Prometheusはローカルのストレージを利用してデータを蓄積します。Prometheus自体は、複数のマシンを利用したクラスタストレージは提供しておりませんが、リモート読み出し書き込みのAPIを提供しています。APIを利用することで、複数のマシン上でデータを読み書きする構成も利用することができるようになっています。
可用性について
Prometheusサーバを複数利用して同じ監視対象、exporter から値をとることで可用性を担保することができます。複数の Prometheus サーバから飛んできた通知リクエストを Alertmanager で集約させることもできます。また Alertmanager はクラスタリング機能を有しています。
フェデレーションについて
Prometheusサーバも exporter として機能します。フェデレーションという機能を利用することで Prometheus サーバが収集したメトリックスを選択して外部に公開することもでき、他の Prometheus サーバからスクレイピングすることができます。ユースケースとしては、データセンタごとに配置してある Prometheus サーバに対して、外部の Prometheus からアクセスして値を評価するといったことに用いられます。
まとめ
Prometheusの概要について説明いたしました。次はPrometheusのセットアップとデータ構造について、説明したいと思います。