fluentd+dstat+InfluxDB v0.9.x+Grafana v2でサーバのメトリクスを可視化する

fluentd+dstat+InfluxDB v0.9.x+Grafanaでの、サーバのメトリクスの可視化について書きます。

# 用意するもの
* fluentd (v0.12以降)
* [fluent-plugin-dstat](https://github.com/shun0102/fluent-plugin-dstat)
* [fluent-plugin-filter-object-flatten](https://github.com/winebarrel/fluent-plugin-filter-object-flatten)
* [fluent-plugin-filter-record-map](https://github.com/winebarrel/fluent-plugin-filter-record-map)
* [Rinflux](https://github.com/winebarrel/rinflux)
* [fluent-plugin-rinflux](https://github.com/winebarrel/fluent-plugin-rinflux)
* [InfluxDB v0.9.x](https://influxdb.com/download/index.html)
* [Grafana v2.0.2](http://grafana.org/download/)

# 作業手順

# InfluxDBのセットアップ
https://influxdb.com/download/index.html

```bash
wget http://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb
sudo dpkg -i influxdb_latest_amd64.deb
sudo service influxdb start
```

## databaseの作成

InfluxDBの管理画面（localhost:8083）から以下のクエリを実行して、あらかじめデータベースを作成しておきます。

```sql
CREATE DATABASE mydb
```

# Grafanaのセットアップ
http://docs.grafana.org/installation/

```bash
wget https://grafanarel.s3.amazonaws.com/builds/grafana_2.0.2_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_2.0.2_amd64.deb
```

## Rinflux/fluent-plugin-rinflux

[InfluxDB公式のRubyライブラリ](https://github.com/influxdb/influxdb-ruby)はv0.9.0に対応中のステータスで、fluentdプラグインも含め、InfluxDB v0.9.xではまだ使えない状態です（2015/07/18現在）

※[v0.2.0](https://rubygems.org/gems/influxdb/versions/0.2.0)が出たようです

なので、とりあえずv0.9.x対応のInfluxDBクライアントとfluentdのプラグインを自作しました。本家の対応状況を鑑みてrubygems.orgには登録していません。従って、`git clone`してインストールする必要があります。

```bash
# install rinflux
git clone https://github.com/winebarrel/rinflux.git
cd rinflux
bundle install
bundle exec rake install

cd ..

# install fluent-plugin-rinflux
git clone https://github.com/winebarrel/fluent-plugin-rinflux.git
cd fluent-plugin-rinflux
bundle install
bundle exec rake install
```

## fluent.conf

dstatメトリクスの収集までは以下のエントリと同じです。

* [fluentd+dstat+libratoでサーバのメトリクスを可視化する - Qiita](http://qiita.com/winebarrel/items/ab9d8e0d2e331d68c6e7)

`fluent.conf`は以下のようになります。

```apache
<source>
  type dstat
  tag dstat.${hostname}
  option -clmdrn --freespace
  delay 3
</source>

<filter>
  type object_flatten
  separator _
  tr [" /", "__"]
</filter>

<filter>
  type grep
  exclude1 hostname .+
</filter>

<filter>
  type record_map
  map1 record.each {|k, v| new_record[k] = v.to_f }
</filter>

<match dstat.**>
  type rinflux
  db mydb
  flush_interval 1s
</match>
```

InfluxDBに流れるレコードは以下のような感じです。

```json
{"dstat_net_total_send":1138.667}
{"dstat___used":3879976960.0}
{"dstat___free":38361186304.0}
{"dstat__dev_used":12288.0}
{"dstat__dev_free":251576320.0}
{"dstat__run_used":360448.0}
{"dstat__run_free":51019776.0}
{"dstat__rpc_pipefs_used":0.0}
{"dstat__rpc_pipefs_free":0.0}
{"dstat__systemd_used":0.0}
{"dstat__systemd_free":0.0}
{"dstat__vagrant_used":68592746496.0}
{"dstat__vagrant_free":430489739264.0}
{"dstat_total_cpu_usage_usr":0.0}
{"dstat_total_cpu_usage_sys":0.667}
{"dstat_total_cpu_usage_idl":99.333}
{"dstat_total_cpu_usage.wai":0.0}
```

# Grapanaにデータソースを追加
管理ユーザ（admin/admin）でログインして、データソースを追加します。

![](https://qiita-image-store.s3.amazonaws.com/0/20100/e450d77c-69d6-d5eb-34b1-c09ae13268e1.png)

まだアルファ版とのこと。

```
Data source implementation: Alpha stage

This data source implementation is not complete, a lot is not working and implemented yet
Updates can be tracked, and feedback directed here #1525.
```

# Grapanaにグラフを追加

Grapanaに適当にダッシュボードを作って、グラフを追加します。

![](https://qiita-image-store.s3.amazonaws.com/0/20100/377a9c9e-55dc-0d25-ab83-cf89ace08ade.png)

グラフを追加すると以下のようなダッシュボードが作れます。

![](https://qiita-image-store.s3.amazonaws.com/0/20100/d9d4e098-22c6-6fa2-e740-41fdc51ee576.png)