はじめに
Prometheusの全体的なアーキテクチャをざっと理解していきます。
アーキテクチャ
アーキテクチャの全体像は下記の図になります。
大まかな流れとして、
- Service discoveryから監視対象を見つける
- クライアントライブラリやexporter経由でメトリクスを収集する
- データが格納される
- Alertmanagerでアラートを送ったり、PromQLでダッシュボードを表示したりする
という感じでPrometheusは機能しています。
Prometheusのドキュメントより
ざっとアーキテクチャの登場人物について紹介します。
Service Discovery
- 監視対象がどこにあるのかPrometheusに伝える
- Kubernetesやfile_sd(File-based Service Discovery)など
Prometheus Server
- 監視対象をスクレイプ(HTTPリクエストを送ってメトリクスを取得)する
- 時系列データとしてデータを格納する
- アラートルールを評価し、アラートをAlertmanagerに送る
exporter
- Prometheusからリクエストを受け取り、アプリケーションから必要なデータを収集して、Prometheusに返す
- 監視対象のアプリケーションごとにさまざまな種類のexporterがある
Pushgateway
- バッチジョブなど短い期間しか存在できないようなジョブのメトリクスをPrometheusがスクレイプできるようにする
Alertmanager
- Prometheusから受け取ったアラートをもとに通知を行う
- 集約・重複排除・一時的な通知の停止などのアラート管理
クライアントライブラリ
- GoやPythonなどに用意されているライブラリ
- メトリクスをPrometheusに公開できる
ダッシュボード
- PrometheusのWeb UI上でPromQLを使ってデータの可視化ができる(簡単なデータ探索程度)
- Grafanaが使われることが多い