prometheus のデータを grafana でグラフ表示してみた

## prometheus

* 初期設定

```yaml:prometheus.yml
global:
  external_labels:
      monitor: 'codelab-monitor'

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
```

```yaml:docker-compose.yml
prometheus:
  image: prom/prometheus
  volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml
  ports:
    - "9090:9090"
```

* http://localhost:9090
* http://localhost:9090/metrics (取れる値はここで確認できる)

### dockerを使わない場合

* 公式ページから[download](https://prometheus.io/download/)

```sh:
wget "https://github.com/prometheus/prometheus/releases/download/v2.0.0-rc.2/prometheus-2.0.0-rc.2.linux-amd64.tar.gz"
tar xzf "prometheus-2.0.0-rc.2.linux-amd64.tar.gz"
cd prom*
./prometheus
```

### 監視対象の追加方法

https://github.com/prometheus/node_exporter/releases
から node_exporter-0.15.0.linux-amd64.tar.gz 内の`node_exporter` を取得。

```sh:起動。9100でLISTEN
./node_exporter
```

もしくはdockerを使っても良い。参考:[PrometheusでDockerホスト + コンテナを監視してみた](https://techracho.bpsinc.jp/ika/2017_07_18/43117)

```sh:prometheus/node-exporter(22.8MBと小さい)
docker run -d \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --net="host" \
  quay.io/prometheus/node-exporter
```

```diff:prometheus.ymlに対象の追加
 global:
   external_labels:
       monitor: 'codelab-monitor'
 
 rule_files:
 
 scrape_configs:
   - job_name: 'prometheus'
     static_configs:
       - targets: ['localhost:9090']
 
+  - job_name: 'node'
+    static_configs:
+      - targets: ['localhost:9100']
```

```sh:設定反映
./prometheus
```

nodeが追加されたことを確認。

![スクリーンショット_2017-09-17_14-23-12.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c01976c2-9f70-e3e7-cbe4-bea40ff04d62.png)

* [Understanding Machine CPU usage | Robust Perception](https://www.robustperception.io/understanding-machine-cpu-usage/)

```rb:全CPU合計の最大が100として
100 - (avg by (instance) (irate(node_cpu{job="node",mode="idle"}[5m])) * 100)
```

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6d042076-fa95-6e7c-4e43-76375d3b298e.png)

## さらなる監視対象の追加方法

```diff:prometheus.yml
+      - targets: ['192.168.100.53:9100']
```

```sh
# ymlを書き換えた後はHUPかければ良い (6秒位反映に時間がかかる)
killall -HUP prometheus
```

### グラフ描画例

http://localhost:9100/metrics にアクセスすると
node_load1 0.13
などあるので、こちらを prometheusの入力欄に貼り付けると下のConsoleに指定方法が表示される。

![スクリーンショット_2017-11-24_21-12-26.png](https://qiita-image-store.s3.amazonaws.com/0/25728/88626a46-5523-8cb0-f898-fbd2c92cf29c.png)

![11.png](https://qiita-image-store.s3.amazonaws.com/0/25728/479dd41e-7559-fae8-519b-7e2be24b621a.png)

grafanaに貼り付けてグラフが描画されることを確認。

![スクリーンショット_2017-11-24_21-15-13.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a7638c4d-2ea2-4b35-859e-78d3eff61e2b.png)


## grafana

* Grafana公式ページで様々なテンプレートが用意されている
    * [Grafana Dashboards - discover and share dashboards for Grafana. - Grafana.net](https://grafana.net/dashboards)

```yaml:docker-compose.yml
grafana:
  image: grafana/grafana
  ports:
    - "3000:3000"
```

* http://localhost:3000
    * admin : admin でログイン

設定を指定するには以下

```yaml:docker-compose.yml
grafana:
  image: grafana/grafana
  container_name: grafana
  environment:
    - TZ=Asia/Tokyo
    - GF_PATHS_DATA=/var/lib/grafana
    - GF_PATHS_LOGS=/var/log/grafana
    - GF_SECURITY_ADMIN_USER=admin
    - GF_SECURITY_ADMIN_PASSWORD=admin
    # iframeの埋め込みに対応
    - GF_SECURITY_ALLOW_EMBEDDING=true
    # iframeの埋め込みを認証なしで表示
    - GF_AUTH_ANONYMOUS_ENABLED=true
    # Grafanaサーバーのアドレスを指定 (share時に便利)
    - GF_SERVER_ROOT_URL=http://192.168.100.65:3000
  ports:
    - "3000:3000"
```


![login.png](https://qiita-image-store.s3.amazonaws.com/0/25728/2e4ce85e-ba1f-5d74-f0a6-55ba1316c333.png)


![スクリーンショット_2016-12-12_07-41-38.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3c3f06e2-f4fa-ef5e-5b51-b1979b74b6a2.png)

* Data Source に prometheus を追加
    * localhost で `Templating init failed` が出た場合は ipアドレスを指定すれば良い。(prometheusをtar.gzから展開して実行したホストと、grafanaがdockerで起動した場合、ipアドレス指定が必要。)

![スクリーンショット_2016-12-12_07-49-38.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a405bf50-f6ab-3151-f2f5-16beebf59709.png)


Dashboards -> Import

![スクリーンショット_2016-12-12_07-43-57.png](https://qiita-image-store.s3.amazonaws.com/0/25728/9c998bd4-a830-a69e-9415-a1c939c72c38.png)

![a.jpg](https://qiita-image-store.s3.amazonaws.com/0/25728/be5f1152-461d-a18b-4fdf-6893d5138a42.jpeg)

![スクリーンショット_2016-12-12_07-50-39.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e581b059-ef43-0432-fbb9-00262bbc89ba.png)

![dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/25728/2561f913-1987-faa9-42ec-77536cc050f5.png)

![スクリーンショット_2017-09-17_16-31-06.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b44d79ca-3895-8c7d-4787-ab85a75d5428.png)

### グラフの編集

グラフのタイトルを左クリック -> Edit

![title.png](https://qiita-image-store.s3.amazonaws.com/0/25728/591e3f5a-4a5c-a7e1-09c2-1edc349d4e38.png)

Metrics -> クエリを入力 -> (グラフが表示されていなければ)右の目アイコンをクリック

![スクリーンショット_2017-11-04_11-48-32.png](https://qiita-image-store.s3.amazonaws.com/0/25728/02d99774-aff0-0b27-f04c-c0b2f683f51b.png)


* Legend format : `{{instance}}` にすると prometheus に登録されているipaddress:port が表示される。

終わったら 右の目アイコンの上の `×` をクリック


### 負荷をかけてみる

* [Linuxで手軽にCPU負荷をかける方法をまとめてみた | あいしんくいっと](https://i-think-it.net/linux-cpu-stress-how-to/)

```sh
yes > /dev/null
```


## flowchart-plugin

https://www.factry.io/blog/tutorial-using-the-grafana-flowchart-plugin-to-create-a-process-diagram/?utm_medium=social&utm_source=twitter