Prometheus×Grafanaでfluentdのプロセス監視を行う【process-exporter】

# <font color="OrangeRed">Prometheus</font>でプロセス監視をやりたい

<font color="OrangeRed">**Prometheus**</font>を使う上で主流なのは各アプリ毎の専用の<font color="Crimson">**exporter**</font>を使うことみたい。

https://prometheus.io/docs/instrumenting/exporters/#miscellaneous
Third-party exportersに載ってた[**process-exporter**](https://github.com/ncabatoff/process-exporter)を使います。

# 動作確認したいからローカルで実行する

## 準備

以下を準備する

```shell

- config
    - grafana
        - grafana.env(雛型として用意してるだけ) 
    - process-exporter
        - config.yml
    - prometheus
        - prometheus.yml
    - fluentd-data
- docker-compose.yml
```

```shell:grafana/grafana.env
# [server]
# GF_SERVER_DOMAIN=localhost
# GF_SERVER_HTTP_PORT=3000
# GF_SERVER_PROTOCOL=http
```

```yml:process-exporter/config.yml
process_names:
    - name: "{{.Comm}}"
      comm:
      - fluentd
```

```yml:prometheus/prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
  external_labels:
      monitor: 'codelab-monitor'
  
rule_files:
#   - "/var/app/prometheus/alert.rules"
  
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: 
        - 'localhost:9090'
    
  - job_name: 'node-exporter'
    static_configs:
      - targets:
        - '[host or ip address]:9100'

  - job_name: 'process-exporter'
    static_configs:
      - targets:
        - '[host or ip address]:9256'
```

**[host or ip address]**は、自分のマシンに割り当てられている<font color="DarkBlue">**localhost**</font>以外の<font color="DarkBlue">**ip address**</font>や<font color="DarkBlue">**hostname**</font>を指定します。

```yml:docker-compose.yml
version: '3'
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - 9090:9090
      
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000
    env_file:
      - ./config/grafana/grafana.env

  node-exporter:
    image: quay.io/prometheus/node-exporter
    container_name: node-exporter
    ports:
      - 9100:9100
    volumes:
      - /proc:/host/proc
      - /sys:/host/sys
      - /:/rootfs

  process-exporter:
    image: ncabatoff/process-exporter
    container_name: process-exporter
    ports:
        - 9256:9256
    volumes:
      - /proc:/host/proc
      - ./config/process-exporter:/config
    command: >
      --procfs /host/proc
      -config.path /config/config.yml

  fluentd:
    image: fluent/fluentd
    container_name: fluentd
    ports:
      - 24224:24224
    volumes: 
      - ./fluentd-data:/fluentd/log
```

## 起動

```shell
$ docker-compose up -d
```

### Prometheus-exporterの疎通確認

http://localhost:9090/targets にアクセスしてexporterのStateがUPになっているか確認

![スクリーンショット 2020-05-26 12.55.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/6089a49c-1d55-8db8-433b-dfc1d54ac02f.png)

### Grafana

#### Login

<img width="1440" alt="スクリーンショット 2020-05-26 12.56.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/abab7a5a-f48d-bf92-696d-35f409f3977c.png">

username : <font color="DarkBlue">**admin**</font>
password : <font color="DarkBlue">**admin**</font>

でログイン

#### Add data source

<font color="DarkBlue">**Add data source**</font>をクリック

<img width="1440" alt="スクリーンショット 2020-05-26 12.57.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/d594446a-e390-fad2-cf73-e64010653a40.png">

URL : <font color="DarkBlue">**http://localhost:9090**</font>
Access : <font color="DarkBlue">**Browser**</font>

にして<font color="Green">**Save & Test**</font>

<img width="1440" alt="スクリーンショット 2020-05-26 12.57.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/b626c014-8b70-94e7-11b5-478c49f1bb5f.png">

#### New dashboard

<font color="DarkBlue">**New dashboard**</font>をクリック

<img width="1440" alt="スクリーンショット 2020-05-26 12.57.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/c03438ba-3e30-1619-3f8f-09c453c790a6.png">

<font color="DarkBlue">**Add Query**</font>をクリック

<img width="767" alt="スクリーンショット 2020-05-26 12.58.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/edf7a93f-223f-54bf-fea6-3fdb53290b0a.png">

Metricsを<font color="DarkBlue">**namedprocess_namegroup_procs**</font>にする。
プロセス数の監視は<font color="DarkBlue">**namedprocess_namegroup_procs**</font>が基本だと思う。

Legendに<font color="DarkBlue">**{{groupname}}**</font>でプロセス名(グループ名)だけ表示する

<img width="1440" alt="スクリーンショット 2020-05-26 12.59.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/55eda662-1694-0137-2c6d-36e454a52f50.png">

グラフは以下の様に設定してみた。
Table Transformは<font color="DarkBlue">**Time series aggregations**</font>にする。

<img width="1440" alt="スクリーンショット 2020-05-26 13.00.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/d4d7f44d-b92e-bc1f-d76d-6ea0cf170246.png">

次にアラート用の新しいpanelを設定する。
Metricsは上で設定したのと同じ

<img width="1440" alt="スクリーンショット 2020-05-26 14.02.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/d5c1f7c1-414e-8c3b-a043-20e809e8dff7.png">

アラート設定は以下

<img width="1440" alt="スクリーンショット 2020-05-26 14.02.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/c346c6f4-622a-adb3-7db2-780142a3794c.png">

こんな感じになりました。
良い感じかな。

<img width="1440" alt="スクリーンショット 2020-05-26 14.02.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/1fef3be4-6921-1799-e37a-a1dbc18e4616.png">

## fluentdを止めてみる

```shell
$ docker stop fluentd
```

取れてる取れてる。

<img width="1440" alt="スクリーンショット 2020-05-26 14.03.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/6c16be8f-10b2-7558-4167-aabd2226108b.png">

## fluentdを起動しなおす

復帰した。
よきよき。

<img width="1440" alt="スクリーンショット 2020-05-26 14.35.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/11740321-88b4-9784-a808-fc7c4cf84d2e.png">

# 終わりに

とりあえずローカルで動かしてみたけどプロセスが死んだかどうかの確認とれるからいいかな？

アラートはGrafanaで設定してみたけど
実際はalertmanagerでやると思います。

Prometheusでプロセス監視をするのに良い方法があれば教えてください。

# 参考にしたサイト
【GitHub】
https://github.com/ncabatoff/process-exporter
【Prometheusのすすめ - プロセス監視 -】
https://qiita.com/nekoneck/items/a9deab623da277afc4be