Prometheusって何?
Pull型の監視システム。OSS。
メモリ、CPUの使用量などが監視できるシステム。
プル型の監視システムって何?
通常の監視システム(Meckerel,Sensuなど)は、
監視する側にエージェントをインストールして、監視サーバーへ情報を送る。
反対にPull型は、監視サーバーが監視する側から情報を取得する。
メリット・デメリット
Push型
[メリット]
・監視対象にアプリをインストールだけで簡単
・監視対象が増えてもサーバーの設定変更が少ない
[デメリット]
・監視量が増えると、監視サーバーの負荷が多い
Pull型
[メリット]
・監視対象がダウンしていることがPush型より簡単に分かる
・監視サーバーの負荷がPushより低負荷
[デメリット]
・監視対象のエンドポイントを設定しないといけない。単純インストールだけではない。
・監視対象が増えると、都度設定が必要
今回のゴール
Springのアプリケーションで、Promethusにデータを連携して、
Grafana(グラファナ)でいい感じに表示にする。
手順
SpringにPromethusのエンドポイント作成
Spring Initializr [ https://start.spring.io/ ]より、Spring Actuatorを追加。
Spring Actuator(アクチュエータ)はSpringのダンプやヘルスチェックなどを確認できるようになる。
依存関係にMicrometer Registry Prometheusをセット。
[ https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus ]
プロパティファイルより、エンドポイントをオープン。
# フルオープン
management.endpoints.web.exposure.include=*
アプリケーションを起動してエンドポイントができたことを確認。
Prometheusの設定
以下のYMLで設定が可能
global:
# Target取得の頻度
scrape_interval: 10s
evaluation_interval: 10s
#監視対象の設定
scrape_configs:
# Spring Boot App Exporter 監視設定
- job_name: 'springboot'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['web:8080']
labels:
group: 'docker-springboot'
Prometheus・Grafana・アプリの起動
DockerComposeで起動する。
version: '3.1'
services:
web:
build: app/
ports:
- "8080:8080"
monitor:
build: prometheus/
ports:
- "9090:9090"
depends_on:
- "web"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
Prometheusを確認
▼ 監視対象を確認する画面
▼ グラフの確認画面
しかし、グラフのUIがいまいち。ということでGrafanaで見る。
Grafanaを確認
URL: http://localhost:3000
ID: admin(初期)
PASS: admin(初期)
▼ データソースを選択
以下のようにURLを設定
▼ ダッシュボード作成
AddQueryを選択
あとは、自身のお好みで設定
その他余談
・ Springで設定するPromethunsのエンドポイントのクラスは継承して独自カスタマイズ可能
・ 通知設定がPromethunsとGrafanaは大変かも