sensu-pluginとInfluxDBとGrafanaで簡単Metrics監視

sensu-pluginを使ってMetricsを取得しGrafanaで表示してみます。

# 環境

Ubuntu 14.04

（今回はsensu-server, sernsu-client, InfluxDB, Grafana全部１つのサーバでやってます）

# InfluxDB

[公式ドキュメント](https://docs.influxdata.com/influxdb/v0.9/introduction/installation/)の通りにインストールしていきます。

```
$ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
$ source /etc/lsb-release
$ echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
$ sudo apt-get update && sudo apt-get install influxdb
$ sudo service influxdb start
```

`http://<サーバIP>/8083`にアクセスするとInfluxDBのDashboardが表示される。

<img width="1432" alt="スクリーンショット 2016-07-24 16.00.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/32184/f91a7d16-d810-3bcb-f36e-171af24cfda6.png">


# Grafana

Grafanaを動かすためにはNginxが必要なのでインストールします。

## Nginxのインストール

```
$ sudo apt install nginx
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo mkdir -p /var/www/html
$ cat <<EOF | sudo tee /etc/nginx/sites-available/grafana
server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/html/;
        index index.html index.htm;

        server_name localhost;

        location /grafana {
                index index.html index.htm;
        }
}
EOF
$ sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/
$ sudo service nginx configtest
$ sudo service nginx restart
```

# Grafanaのインストール

```
$ echo "deb https://packagecloud.io/grafana/stable/debian/ wheezy main" | sudo tee /etc/apt/sources.list.d/grafana.list
$ curl https://packagecloud.io/gpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install grafana
```

`http://<サーバIP>/3000`にアクセスするとGrafanaのDashboardが表示される。

<img width="1436" alt="スクリーンショット 2016-07-24 15.57.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/32184/c67d21a8-5065-c03e-bdfc-a67bae940a7a.png">

`User=admin`, `Password=admin`でログインすることができる。

<img width="1435" alt="スクリーンショット 2016-07-24 16.03.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/32184/b161c1e2-b0cf-680e-9bca-2291c576ba60.png">

# 設定

## InfluxDB

[公式ドキュメント](https://docs.influxdata.com/influxdb/v0.13/introduction/getting_started/#creating-a-database)通りにdatabaseを作成します。

InfluxDBのダッシュボードからも作成可能です。

<img width="777" alt="スクリーンショット 2016-07-24 16.16.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/32184/f7099a8d-738a-5008-2624-b5c8feda407e.png">

## Sensu

## sensu pluginのインストール

* [sensu-plugins-vmstats](https://github.com/sensu-plugins/sensu-plugins-vmstats)
* [sensu-plugins-influxdb](https://github.com/sensu-plugins/sensu-plugins-influxdb)

`sensu-install`コマンドでプラグインをインストールします。
`sensu-plugins-vmstats`はChecks、`sensu-plugins-influxdb`はHandlerを使います。

```
sudo sensu-install -p vmstats
sudo sensu-install -p influxdb
```

実行すると`/opt/sensu/embedded`の中にインストールされます。

## sensuの設定

Sensuの設定を追加していきます。（今回はsensu-serverとsensu-clientは同じサーバ上で動かしています）

```
"client": {
  "name": "localhost",
  "address": "127.0.0.1",
  "subscriptions": [
    "test"
  ]
}
```

Checksを追加します。`command`には`sensu-plugins-vmstats`の`metrics-vmstat.rb`を指定します。

```/etc/sensu/conf.d/vmstat_metrics.json
{
  "checks": {
    "vmstat_metrics": {
      "type": "metric",
      "handlers": [ "influxdb" ],
      "command": "metrics-vmstat.rb",
      "interval": 60,
      "subscribers": [ "test" ]
    }
  }
}
```

Handerを設定します。`influxdb`というHandlerを追加しています。
handlerのタイプを[pipe](https://sensuapp.org/docs/0.24/reference/handlers.html#pipe-handler-commands)にするとコマンドを実行してくれます。
`command`には`sensu-plugins-influxdb`の`metrics-influxdb.rb`を指定します。

InfluxDBの設定を[Usage](https://github.com/sensu-plugins/sensu-plugins-influxdb#usage)を参考に書きます。

```/etc/sensu/conf.d/handler_influxdb.json 
{
  "handlers": {
    "influxdb": {
      "type": "pipe",
      "command": "metrics-influxdb.rb"
    }
  },
  "influxdb": {
    "hosts" : ["localhost"],
    "host": "localhost",
    "port": "8086",
    "username": "root",
    "password": "root",
    "database": "metrics"
  }
}
```

## Sensuの再起動

Sensuを再起動して設定を反映します。

```
$ sudo service sensu-server start 
$ sudo service sensu-client start 
$ sudo service sensu-api start 
```

# InfluxDBで動作確認

InfluxDBのDashboardで`SHOW MEASUREMENTS`クエリを実行すると、measurements一覧が表示される。

* vmstat_cpu_idle
* vmstat_cpu_steal
* vmstat_cpu_system
* vmstat_cpu_user
* vmstat_cpu_waiting
* vmstat_io_received
* vmstat_io_sent
* vmstat_memory_buffers
* vmstat_memory_cache
* vmstat_memory_free
* vmstat_memory_swap_used
* vmstat_procs_uninterruptible
* vmstat_procs_waiting
* vmstat_swap_in
* vmstat_swap_out
* vmstat_system_context_switches_per_second
* vmstat_system_interrupts_per_second

適当にmeasurementを選んで`SELECT * FROM <measurement名>`を実行してちゃんとデータが入っているか確認します。

# Grafanaに表示を追加

GrafanaにDashboardを追加します。

## DataSourcesを追加

DataSourceにInfluxDBを追加します。
左上のGrafanaアイコンからDataSource選択。`Add data source`ボタンを押します。

<img width="543" alt="スクリーンショット 2016-07-24 18.05.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/32184/dcdbe10c-b020-bfdb-5184-711250178baf.png">

|Field  |Value  |  |
|---|---|---|
|Name  |development  |適当につける  |
|Default  |True  |defaultにしておくと楽  |
|Type  |InfluxDB  |  |
|Url  |http://localhost:8086  |  |
|Access  |proxy  |  |
|Database  |metrics  |作成したDatabase名  |
|User |root  |  |
|Password |root  |  |

設定したら`Save`ボタンを押します。

## Dashboardを追加

左上のGrafanaアイコンから`Dashboard > New`で追加する。
左の緑のバーから`Add Panel > Graph`を選択します。
`Metrics`のQueryを弄って好きなようにデータを表示します。
上にある保存ボタンを押して完了。

<img width="1430" alt="スクリーンショット 2016-07-24 18.12.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/32184/ac26ebae-fb2d-4803-46cd-2c03817b635b.png">

# できた

<img width="905" alt="スクリーンショット 2016-07-24 18.28.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/32184/b69e8f43-cfc0-21a6-9fcc-62c1451f022d.png">

# 参考

http://gihyo.jp/admin/serial/01/ubuntu-recipe/0361?page=5

http://qiita.com/airtoxin/items/806e0bfbdecba115b3be

http://qiita.com/airtoxin/items/806e0bfbdecba115b3be