公式ドキュメントのINTRODUCTION- OVERVIEWから抜粋メモ


OVERVIEW – 概要

Prometheusとは

OSSのモニタリングとアラーティングソフト
SoundCloud社が2012年から作ってる
2016年にはcncf参加

Features – 特徴

Prometheusの主な特徴

  • データモデル
    ・時系列データ
    ・多次元データモデル
    →メトリック名とkey/valueセットによって一意になる

  • クエリ
    非常に柔軟

  • 依存性
    分散ストレージに依存しない
    単一サーバで自律的に動作する

  • pull型
    HTTPによるクライアントへのpull型監視
    時系列でデータを収集

  • pushにも対応
    push gatewayを仲介することでクライアントからのpushにも対応

  • サービスディスカバリー
    監視対象の自動探索機能あり
    静的に指定することも可能

  • 多重描画とダッシュボードに対応

Components – 構成要素

Prometheusはエコなシステム。いろんな要素で構成されるけれども、だいたいがオプション的なもの。それらを使用するかどうかは選択可能。
ほとんどのコンポーネントはGo製。

  • Prometheus server
    プロメテウスサーバー
    時系列データのスクラップと保存

  • client libraries
    アプリケーションコードを実装するためのクライアントライブラリ

  • push gateway
    単発のジョブなどのメトリクスを収集するときに使用すると良い

  • exporters
    様々な目的に合わせてメトリクスをエクスポートしてくれるやつ

  • alertmanager
    アラートのハンドリングを行う

  • その他ツール

とりあえずPrometheus serverとexportersのがそろえば監視はできる。プラスalertmangaerを用意すれば必要十分だと思う。push gaetwayとclient librariesはオプション的。

Architecture – アーキテクチャ

Prometheusは監視対象に対して直接(pull)、あるいは、push gatewayを介してメトリクスをスクラップする。スクラップしたサンプルはすべてローカルで保存して、
保存したデータに対して
・「データの集約(アグリゲート)と新たな時系列データとしての記録(レコード)」
・「アラートの生成」
をするためのルールを適用する。

コンフィグ(ex:prometheus.yml)の中でこのルール(ex:prometheus.rule)を使うよと指定する

Retrieval – 検索

PrometheusはPull型のモニタリングシステムなので、Prometheus Server自身監視対象を検索・捕捉しなければならない。検索する方法としては、「staticにターゲットを指定」および「Service Discovery機能を使用して動的にターゲットを探索」の2つがある。

Storage

検索した監視対象(ターゲット)からメトリクスをスクラップし、データを時系列に保存していく。保存するのはPrometheus serverが起動しているサーバのローカル領域。デフォルトではprometheusバイナリと同じ階層に/dataというフォルダが作られて保存されていく。

PromQL

保存したデータに対して独自のクエリ言語であるPromQLを用いてクエリ操作を行う。Prometheus server自身でも簡易なWebUIを持っていてるので、Web上でPromQLを使用してメトリクスの値を表示or描画したり、保存したデータをアグリゲート/レコードする際にもPromQLによるクエリを行うことができる。

Web UI

Prometheus Serve自身のUIでは不十分なため、一般的にGrafanaを連携させて、時系列データのグラフ化を行う。

Alertmanager

Prometheus Serverが生成したアラートの集約、静観、通知などを行う。

When does it fit? – どういうときにフィットする?

動的なサービス指向アーキテクチャだけでなく、物理的な機器を対象にした監視にもフィットする。マイクロサービスの世界においては多次元データモデルとPromQLによるクエリが特に強力に機能する。

プロメテウスは、問題を迅速に診断できるように信頼性を重視して設計されている。スタンドアローンで動くので、ネットワークストレージや他のリモートサービスに依存しない。監視をするために広範囲に及ぶインフラ環境を構築する必要がない。

When does it not fit? – どんなときに使いづらい?

障害状態であっても、システムに関する統計情報はいつでも表示できる。要求ごとの課金など、100%の精度が必要な場合は、収集されたデータが詳細で十分なものではないため、Prometheusは適していない。このような場合は、課金用のデータを収集して分析するために他のシステムを使用するのが最善で、残りの監視についてはPrometheusを使用するのが最良。