素のサーバーに Sensu + Graphite + Grafana を導入して Dashboard を作るまでのメモ

素のサーバーに Sensu + Graphite + Grafana を導入して Dashboard を作るまでのメモ

Webの情報を断片的に見ても一発で導入できるページがなかったのでまとめてみる。
(Debianで入れてみたらGraphite周りでどうしてもうまくいかなかった)

まずバージョンとしては

    root@sensu:~# cat /etc/lsb-release
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=14.04
    DISTRIB_CODENAME=trusty
    DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

    root@sensu:~# dpkg -l | grep '\(sensu\|uchiwa\|graphite\|elasticsearch\)'
    ii  elasticsearch    1.0.3
    ii  graphite-carbon  0.9.12-3
    ii  graphite-web     0.9.12+debian-3
    ii  python-whisper   0.9.12-1
    ii  sensu            0.14.0-1
    ii  uchiwa           0.2.4-1

Grafanaはそれほど依存関係厳しくなさそうなので最新版(1.8.1)を利用。

インストールで参考にしたのは下記のページ。

  1. [How To Configure Sensu Monitoring, RabbitMQ, and Redis on Ubuntu 14.04][1]
  2. [How To Install and Use Graphite on an Ubuntu 14.04 Server][2]
  3. [Installation][3] (Grafana)

[1]: https://www.digitalocean.com/community/tutorials/how-to-configure-sensu-monitoring-rabbitmq-and-redis-on-ubuntu-14-04
[2]: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-graphite-on-an-ubuntu-14-04-server
[3]: http://grafana.org/docs/

ポートは

|サービス        | ポート|
|---------------|------|
| SensuAPI      | 4567 |
| Uchiwa        | 3000 |
| RabbitMQ      | 5672 |
| Redis         | 6378 |
| Graphite      | 8081 |
| Grafana       | 80   |
| ElasticSearch | 9200 |

な感じでGrafanaをメインっぽくしてある。

作業の流れ的には、

  1. UbuntuサーバーをデスクトップもなしのMinimumな状態で作成
  2. [参考1][1]に沿ってSensu, RabbitMQ, Redisをインストールして設定
     - SSL付きで作成したが、ClientにWindowsマシンもあるのでSSLでの接続を無効化(一旦SSLでサーバーを作成してから必要箇所を変更した)
       - SSLの設定を削除( `/etc/rabbitmq/rabbitmq.config` を適当にリネーム)
       - Sensuの設定ファイル `rabbitmq.json` でRabbitMQへの接続ポートを5672へ変更してsslの部分を削除
     - そのままだとDataCenter名がSENSUになるので任意の文字に変更
       - 具体的には `sudo rabbitmqctl add_vhost /sensu` の `sensu` の部分を変更
  3. [参考2][2]に沿って Graphiteをインストールして設定
     - DatabaseはPostgreSQLではなくSQLiteを利用
       - 途中のPostgreSQL関係のインストールと設定は飛ばす
       - 標準のDBセッティングを使うので `/etc/graphite/local_settings.py` もDBの設定は無し
     - Graphiteは8081で起動させる
       - `/etc/apache2/sites-enabled/apache2-graphite.conf` のポートを8081に変更
       - `/etc/apache2/ports.conf` に `Listen 8081` を追加
  4. Graphiteで左のTreeに「/Graphite/carbon」が追加されてることを確認出来たらSensuからGraphiteに送り込む設定
     - SensuからGraphiteへ送信する設定のサンプルはWebにたくさんあるのでそれを参照
        - ただ、環境依存なのか `mutators/graphite.rb` をそのまま使うとcarbon-cacheが受け付けてくれないので Gist: [graphite.rb](https://gist.github.com/nobuhito/1598aad30aa412173924#file-graphite-rb-diff) のように変更(一旦改行でSplitして一行単位で吐き出し)
        - これは他の人の環境では動いてるのかな？パッチ送ったほうがいい？
  5. Sensuから送り込んだデータがGraphiteで確認出来たら[参考3][3]に沿ってダウンロードして設定
     - ダウンロードしたあとはDebianっぽく `/usr/share/grafana` に配置
     - 「Graphite & Elasticsearch setup example」の項目を参考に `config.js` を設定
       - graphiteとelasticsearcのurlはgrafanaサーバーから見たアドレスではなく、grafanaを表示しているクライアントから見たurlになる(localhostとかでは動かない)
     - 「Graphite server config」の項目を参考にgraphite用のapache設定ファイルに `Header set Access-Control-Allow-*` を追記
     - `/etc/apache2/sites-enabled/grafana.conf` を作成して `alias /grafana /usr/share/grafana` を書き込み、Apacheを再起動
  6. ここまで出来て「 http://grafanaサーバー/grafana/ 」にアクセスしてグラフが表示されていれば作業完了

![grafana.png](https://qiita-image-store.s3.amazonaws.com/0/15745/0c9e40c6-bfc3-f4ac-1608-76109d0f360e.png)

自作のサーバー管理用ダッシュボードを作ってたけど、それを捨てれるほど自由度が高いし綺麗でかっこいい！

あとは、Windowsクライアントでの設定TipsとかGrafanaでのグラフ作成方法とか書こっかな。