Grafana + Prometheus を稼働させてみる手順

# 概要
Grafana + Prometheus を動かして、サーバのリソースなどがグラフ化されるのを体験してみたい人向け。


# 環境
- CentOS 6.9 (まっさらな状態を想定)
- Prometheus 2.0.0
- node_exporter 0.15.1
- Grafana 4.6.3-1


# Prometheus 本体のインストール
```
# cd /tmp
# curl -LO https://github.com/prometheus/prometheus/releases/download/v2.0.0/prometheus-2.0.0.linux-amd64.tar.gz
# tar xvzf prometheus-2.0.0.linux-amd64.tar.gz
# mv -i prometheus-2.0.0.linux-amd64 /etc/prometheus
```

## Prometheus の起動スクリプト設定
```
# vim /etc/rc.d/init.d/prometheus
```
```
#!/bin/bash
#
# /etc/rc.d/init.d/prometheus
#
# Prometheus monitoring server
#
#  chkconfig: 2345 20 80 Read
#  description: Prometheus monitoring server
#  processname: prometheus

# Source function library.
. /etc/rc.d/init.d/functions

PROGNAME=prometheus
PROG=/etc/prometheus/$PROGNAME
USER=root
LOGFILE=/var/log/prometheus/prometheus.log
DATADIR=/etc/prometheus/data
LOCKFILE=/var/run/$PROGNAME.pid
CONFIG_FILE=/etc/prometheus/prometheus.yml

start() {
    echo -n "Starting $PROGNAME: "
    daemon --user $USER --pidfile="$LOCKFILE" "$PROG --config.file=$CONFIG_FILE --storage.tsdb.path $DATADIR &>>$LOGFILE &"
    echo $(pidofproc $PROGNAME) >$LOCKFILE
    echo
}

stop() {
    echo -n "Shutting down $PROGNAME: "
    killproc $PROGNAME
    rm -f $LOCKFILE
    echo
}


case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    status)
    status $PROGNAME
    ;;
    restart)
    stop
    start
    ;;
    reload)
    echo "Sending SIGHUP to $PROGNAME"
    kill -SIGHUP $(pidofproc $PROGNAME)
    ;;
    *)
        echo "Usage: <servicename> {start|stop|status|reload|restart}"
        exit 1
    ;;
esac
```

```
# chmod +x /etc/init.d/prometheus
# mkdir /var/log/prometheus
# /etc/init.d/prometheus start
# chkconfig prometheus on
```

## ログローテート設定(prometheus)
```
# vim /etc/logrotate.d/prometheus
```

```
/var/log/prometheus/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /etc/init.d/prometheus reload > /dev/null 2>/dev/null || true
    endscript
}
```



# node_exporter のインストール
```
# curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.15.1/node_exporter-0.15.1.linux-amd64.tar.gz
# tar xvzf node_exporter-0.15.1.linux-amd64.tar.gz
# mv -i node_exporter-0.15.1.linux-amd64 /etc/node_exporter
```

## node_exporter の起動スクリプトの設定
```
# vim /etc/rc.d/init.d/node_exporter
```
```
#!/bin/bash
#
# /etc/rc.d/init.d/node_exporter
#
#  chkconfig: 2345 20 80 Read
#  description: Prometheus node_exporter
#  processname: node_exporter

# Source function library.
. /etc/rc.d/init.d/functions

PROGNAME=node_exporter
PROG=/etc/node_exporter/$PROGNAME
USER=root
LOGFILE=/var/log/node_exporter/node_exporter.log
LOGLEVEL=info
LOCKFILE=/var/run/$PROGNAME.pid

start() {
    echo -n "Starting $PROGNAME: "
    daemon --user $USER --pidfile="$LOCKFILE" "$PROG --log.level="$LOGLEVEL" &>>$LOGFILE &"
    echo $(pidofproc $PROGNAME) >$LOCKFILE
    echo
}

stop() {
    echo -n "Shutting down $PROGNAME: "
    killproc $PROGNAME
    rm -f $LOCKFILE
    echo
}


case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    status)
    status $PROGNAME
    ;;
    restart)
    stop
    start
    ;;
    *)
        echo "Usage: <servicename> {start|stop|status|restart}"
        exit 1
    ;;
esac
```
```
# chmod +x /etc/rc.d/init.d/node_exporter
# mkdir /var/log/node_exporter
# /etc/init.d/node_exporter start
# chkconfig node_exporter on
```

## ログローテート設定(node_exporter)
```
# vim /etc/logrotate.d/node_exporter
```

```
/var/log/node_exporter/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /etc/init.d/node_exporter restart > /dev/null 2>/dev/null || true
    endscript
}
```


# 監視されるサーバを Prometheus の設定に追加
```
# vim /etc/prometheus/prometheus.yml
```

以下を最下部に記載

```
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']
```
```
# /etc/prometheus/promtool check config /etc/prometheus/prometheus.yml
※SUCCESSが表示されてればたぶんOK
# /etc/init.d/prometheus reload
```

http://[サーバのIP]:9090/ → node_memory_Cached_bytes など入力して Excuteボタン → その下にある Graphタブ に切り替えてグラフが描画されていれば動作確認OK

# Grafana インストール & Prometheus と連携
```
# yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.6.3-1.x86_64.rpm
# /etc/init.d/grafana-server start
# chkconfig grafana-server on
```
http://[サーバのIP]:3000/ → admin/admin
左上のロゴマーク → DataSources → +Add data source

```
Name: Prometheus
Type: Prometheus

HTTP Settings
URL: http://localhost:9090/
Access: Server(Default)
Access: proxy

Auth
(何もチェックしない)

Skip TLS Verification(Insecure): (チェックを入れる)

Scrape interval: (何も入れない)    ← 重要
```
上記設定にて Add 。問題無ければ Data Source is working と出る。

## Dashboard の追加
https://grafana.com/dashboards?dataSource=prometheus&panelType=graph&category=hostmetrics&collector=nodeExporter
らへんから好きなのを選ぶ。

自分が選んだのは以下。
https://grafana.com/dashboards/405
このページの右側にある Download JSON から JSON をローカルにDLして Grafana に戻る。

左上のロゴマーク → Dashboard にカーソルを併せて → Import
Upload .json file → ローカルにDLした .json を選択 → Name はそのままで Prometheus は Prometheus に → Import

グラフが表示されればOK。右上のところから表示期間が変更できるので Last 3 hours など弄って見やすいものに設定してください。


# 参考にさせて頂いたサイト
- https://prometheus.io/
- https://grafana.com/
- http://tyru.hatenablog.com/entry/2017/07/27/235416
- https://gist.github.com/JoergM/489b21d903134db5d3c2