読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

GrafanaでSensuのモニタリングを可視化

概要

Sensuはサーバを監視してアラートを鳴らすことはできますがそのデータを可視化することはできません。
なのでそれを可能にするGrafanaを扱います。

環境

  • Ubuntu 14.04
  • Sensu 0.21.0
  • InfluxDB 0.9.6
  • Grafana 2.5.0

サーバ構成

サーバ IP
Sensu-Server 192.168.33.100
Sensu-Client 192.168.33.101
Grafana、InfluxDB 192.168.33.103

時系列DBのインストール

今回はInfluxDBを使います。

$ wget https://s3.amazonaws.com/influxdb/influxdb_0.9.6_amd64.deb
$ sudo dpkg -i influxdb_0.9.6_amd64.deb

最初から自動起動が入っています。
起動します。

$ sudo service influxdb start

今回可視化するためのDatabaseを作成しておきます。

$ influx
> CREATE DATABASE vmstat

Grafanaインストール

レポジトリの登録

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

インストール

$ sudo apt-get update
$ sudo apt-get install grafana

起動し、自動起動設定をしておきます。

$ sudo service grafana-server start
$ sudo update-rc.d grafana-server defaults 95 10

動作確認

http://192.168.33.103:3000/login

にアクセスします。ID, PWはadminです。

f:id:quoll00:20151210210209p:plain

初期画面はこんな感じです。

f:id:quoll00:20151210210218p:plain

Sensuとの連携

クライアント側

プラグインインストール

今回はvmstatの値を可視化してみます。

$ sudo sensu-install -p vmstats

/etc/sensu/config.json

設定を追加。

{
  "client": {
    "name": "client1",
    "address": "localhost",
    "subscriptions": [
      "vmstat"
    ]
  }
}

終わったら再起動

$ sudo service sensu-client restart

サーバ側

フォルダ構造

.
├── conf.d
│   ├── checks
│   │   └── metrics_vmstat.json
│   ├── handlers
│   │   └── metrics.json
│   └── influxdb.json
├── config.json
├── extensions
│   └── influxdb.rb
├── handlers
├── mutators
└── plugins

/etc/sensu/conf.d/checks/metrics_vmstat.json

{
  "checks": {
    "metrics_vmstat": {
      "type": "metric",
      "handlers": [ "metrics" ],
      "command": "metrics-vmstat.rb",
      "interval": 10,
      "subscribers": [ "vmstat" ]
    }
  }
}

handlersmetricsという自作のハンドラーに設定します。 handlerはEvent Dataを受け取ったときに,何か特別なことをさせたいときに使用します。例えばアラートを送信したり、データを他のプログラムに渡したりなどです。

influxDBへ流す設定

influxdbへデータを送るためのスクリプトを設定します。

$ cd /etc/sensu/extensions
$ sudo wget https://raw.githubusercontent.com/seegno/sensu-influxdb-extension/master/influxdb.rb
$ sudo chmod 755 influxdb.rb

また、依存ライブラリをインストールしておきます。

$ sudo /opt/sensu/embedded/bin/gem install em-http-request

/etc/sensu/conf.d/handlers/metrics.json

先ほど指定していた自作ハンドラーmetricsの設定です。

{
  "handlers": {
    "metrics": {
      "type": "set",
      "handlers": [ "debug", "influxdb"]
    }
  }
}

/etc/sensu/conf.d/influxdb.json

influxdbへ接続するための設定です。

{
  "influxdb": {
    "host": "192.168.33.103",
    "port": "8086",
    "user": "root",
    "password": "root",
    "database": "vmstat"
  }
}

終わったら再起動します。

$ sudo service sensu-server restart

動作確認

ちゃんとinfluxDBに流し込まれているか確認します。

{"timestamp":"2015-12-11T04:08:12.010333+0000","level":"info","message":"handler extension output","extension":{"type":"extension","name":"influxdb"},"output":"","status":0}

成功していればstatus:0が返ってきます。また

http://192.168.33.103:8083/

でアクセスできるWebコンソール上でも以下のようにデータが保存されていることが分かります。 f:id:quoll00:20151211131226p:plain

Grafanaダッシュボード設定

データベースの登録

左メニューから f:id:quoll00:20151211131819p:plain

以下のように登録します。 f:id:quoll00:20151211131852p:plain

ダッシュボードの作成

新しいダッシュボードを作成します。 f:id:quoll00:20151211131940p:plain

左の黄緑色のハンバーガーメニューをクリックし、パネルを追加します。 f:id:quoll00:20151211132019p:plain

サンプルデータのグラフが生成されます。 f:id:quoll00:20151211132200p:plain

vmstatの可視化

これはサンプルデータのグラフなので、InfluxDBのデータに変更します。
グラフのno titleのところをクリックしてeditします。

f:id:quoll00:20151211132258p:plain

下部にメニューが出てくるので、Metricsタブを開きます。 f:id:quoll00:20151211132406p:plain

Datasourceが未設定なので設定します。 f:id:quoll00:20151211132509p:plain

FROM select measurementの部分をクリックすると、一覧が出るので使いたいデータを選択します。

f:id:quoll00:20151211132616p:plain

するとグラフがそのデータに変更されました。 f:id:quoll00:20151211132655p:plain

このような形でポチポチと作ります。
作ったダッシュボードの設定はエクスポート可能です。
以上、お疲れ様でした。

ソース