Prometheus -> InfluxDB -> Grafana

# はじめてのモニタリング
モニタリングツールを仕事で触る機会があったのだが、全然上手くいかなくて困ったので手順をここに残しておく。いろいろ見ていると、進化が激しいようでちょっとバージョンが違うとかなり操作が変わるようだ。この記事も数カ月たつ間に使えなくなるかも。

## やりたいこと
```
node_exporter -> prometheus -> influxdb -> grafana
```
- node_exporterでホストを監視
- prometheusでnode_exporterのデータを取得
- prometheusのデータをinfluxdbへ保存
- grafanaでinfluxdbの情報取得して表示

## 環境
AWS EC2上でAmazon Linux

## Influxdb

```
$ mkdir -p ~/data/influxdb
$ sudo docker run --rm -p 8086:8086 -p 8083:8083 -e INFLUXDB_ADMIN_ENABLED=true -v ~/data/influxdb:/var/lib/influxdb:rw influxdb &
```
influxdbをAmazon Linuxへインストール & Setup
参照元(http://kmikmy.hatenablog.com/entry/2018/08/25/130350)

```
$ cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL 7
baseurl = https://repos.influxdata.com/rhel/7/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
```
```
$ sudo yum install influxdb
$ influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> CREATE DATABASE prometheus
```

## node_exporter

```
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
$ tar xzf node_exporter-0.18.1.linux-amd64.tar.gz
$ cd node_exporter-0.18.1.linux-amd64
$ ./node_exporter &
```

## Prometheus
```
$ wget https://github.com/prometheus/prometheus/releases/download/v2.13.0/prometheus-2.13.0.linux-amd64.tar.gz
$ tar xzf prometheus-2.13.0.linux-amd64.tar.gz
$ cd prometheus-2.13.0.linux-amd64/
```
次にprometheus.ymlを編集。

```
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9100']
      

remote_write:
  - url: "http://localhost:8086/api/v1/prom/write?db=prometheus"

remote_read:
  - url: "http://localhost:8086/api/v1/prom/read?db=prometheus"
```
prometheusを起動。

```
./prometheus --config.file=prometheus.yml &
```

次に、ブラウザからprometheusへアクセスしてみる。URLに

```
IPアドレス:9090
```
を打ち込むとprometheusの画面が開けるはず。ここで、アクセスできない場合は、そのポートがブロックされていないか確認する。AWSであれば、セキュリティグループのインバウンドで「カスタム TCP ルール」で9090を開ける。ソースは社内からしか見ないのであれば、IPアドレスは縛った方がよいだろう。

![prometheus.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/353d95b1-383a-ee08-894d-e01488de5f03.png)

## grafana

参照元(http://blog.serverworks.co.jp/tech/2016/03/11/play-with-grafana-1/)

/etc/yum.repos.d/grafana.repoを作成し以下を追加

```
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
```
grafanaをインストール

```
sudo yum install grafana
```

grafanaを起動

```
$ sudo service grafana-server start
```

ブラウザのULRに

```
IPアドレス:3000
```

を入力すると以下の画面が表示されるはず。prometheusと同様にポートを開いておくこと。

![grafana.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/bf69416b-1b18-43c4-c632-fb0c63daacae.png)

username/password共に、admin

次にdata sourceを追加する
![Datasource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/6c3e11cb-c2b2-c255-1d31-960dfcece867.png)

Add data sourceをクリックして、influxdbを選択する

![influx_select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/3dec3579-eb2d-4a8d-0b2c-52d920fe281b.png)

Influxdbへの接続を設定する
![setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/30205d32-5c87-84f2-9f06-6ea91202b266.png)

画面の下の方に「Save & Test」ボタンがあるのでクリックする。エラーの場合は、赤いバーが出る。

![success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/59010e4b-cf81-5b86-7f36-543668538a28.png)

Dashboardを作る。New dashboardをクリックする。

![dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/3fec3ba1-1860-5982-5e0c-4d64495593a5.png)

Add queryをクリックする。

![addquery.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/6ba167f5-fdf8-9377-8014-a6be59ef5f4a.png)

Queryを作成する画面が出るが、このままだと少々分かりにくい。Aのところを二回くらいクリックすると表示が変わる
![query.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/9a207b6c-0533-fd67-4c44-5070628c86a7.png)

直接クエリを書いてあげる。今回はSELECT * FROM  node_cpu_seconds_total

![query_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410706/c434e4f8-94a8-97a4-0dc7-762dcd726ff5.png)

やっとグラフが表示された！！

## 所管
今回はとりあえず動かすところまでやりたかったので、セキュリティ面やどのデータをとるか、いろいろと細かいところは省略した。ただ、それでもかなり手こずった。いやー大変だった・・・。丸一日かかった。ネットでも似たようなことやってるサイトはあったが微妙にどれもやりたことと違っており苦戦した。次はこれをコンテナ化しよかな。