Javaからの監視入門　Prometheusに触れる

### Prometheusって何？

Pull型の監視システム。OSS。
メモリ、CPUの使用量などが監視できるシステム。

### プル型の監視システムって何？

通常の監視システム（Meckerel,Sensuなど）は、
監視する側にエージェントをインストールして、監視サーバーへ情報を送る。

反対にPull型は、監視サーバーが監視する側から情報を取得する。

#### メリット・デメリット

Push型

[メリット]
・監視対象にアプリをインストールだけで簡単
・監視対象が増えてもサーバーの設定変更が少ない

[デメリット]
・監視量が増えると、監視サーバーの負荷が多い

Pull型

[メリット]
・監視対象がダウンしていることがPush型より簡単に分かる
・監視サーバーの負荷がPushより低負荷

[デメリット]
・監視対象のエンドポイントを設定しないといけない。単純インストールだけではない。
・監視対象が増えると、都度設定が必要

#### 今回のゴール

Springのアプリケーションで、Promethusにデータを連携して、
Grafana(グラファナ)でいい感じに表示にする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/d907eea5-531d-b139-6aa1-fb4fd2350130.png)

### 手順

##### SpringにPromethusのエンドポイント作成

Spring Initializr [ https://start.spring.io/ ]より、Spring Actuatorを追加。
Spring Actuator(アクチュエータ)はSpringのダンプやヘルスチェックなどを確認できるようになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/fa297ab0-e6f5-2e93-ad69-ccddc229cf77.png)

依存関係にMicrometer Registry Prometheusをセット。
[ https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus ]
 
![Maven Repository:.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/44b9dfc8-07c3-493a-9b9d-b12f7ecde734.png)

プロパティファイルより、エンドポイントをオープン。

```yml:application.properties
# フルオープン
management.endpoints.web.exposure.include=*
```

アプリケーションを起動してエンドポイントができたことを確認。

http://localhost:8080/actuator/prometheus

##### Prometheusの設定

以下のYMLで設定が可能

```yml: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で起動する。

```yml:docker-compose.yml
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を確認

▼　監視対象を確認する画面

http://54.238.228.193:9090/targets

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/9229ac14-3902-a7d9-88f0-dd56dd179d03.png)

▼　グラフの確認画面

http://54.238.228.193:9090/graph

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/c31a775c-ee46-2b88-93e7-c1d5af84b7f3.png)

しかし、グラフのUIがいまいち。ということでGrafanaで見る。

##### Grafanaを確認

URL: http://localhost:3000
ID: admin（初期）
PASS: admin（初期）

▼　データソースを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/75f80e1b-ec96-b40b-ac86-6ad69490b865.png)

以下のようにURLを設定

![Prometheus.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/0cc30171-3b4a-b439-9854-71b55a6cbed1.png)

▼　ダッシュボード作成

AddQueryを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/063b30a2-ad58-b0f1-6849-e56f3b41f82a.png)

あとは、自身のお好みで設定

![New dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/7ca5cadb-5ce3-3f85-a798-f63520018e64.png)

### その他余談

・　Springで設定するPromethunsのエンドポイントのクラスは継承して独自カスタマイズ可能

・　通知設定がPromethunsとGrafanaは大変かも