Sensu導入と初期設定について

May 2, 2014

Chef: 11.8.0
sensu: 0.12.3
RabbitMQ: 3.1.5
erlang R14B-04.1.4
Redis :2.6.17

参考 :

監視ソフトをNagiosからSensuに切り替えて2ヶ月経ったのでまとめた - Glide Note
Amazon Linux 上に sensu-server を構築する(1)- ようへいの日々精進 XP

特にようへいさんのブログはSensuのエントリーが多く、大変参考になります。
ありがとうございます。

Sensu server + Sensu client のインストール

Chefを利用します。
インストール自体はRabbitMQでコケる記事を参考にして下さい。
2014/05/02 現在、RabbitMQのインストールで失敗することはなくなりました。 また、下記に記載しますが、インストール先サーバのRubyのバージョンに環境が左右されないように
"use_embedded_ruby": trueとしてembedded rubyを利用することをおすすめいたします。

tips

sensu-chef から include_recipe”yum” 外す

基本的にsensuをインストールするのに既存のものを破壊することはないのですが
sensu-chefの中にinclude_recipe “yum”しているところがあり
この設定をよしなにしないとyum.confが書き換えられてしまいます。

sensuのインストールはsensu.repoを追加して行うので「include_recipe “yum”」は不要です。
既存のサーバにインストールするときは気を付けて下さい。

この前ryuzeeさんのpull requestが取り込まれて
Amazon Linuxにインストールすることができるようになりました。

  • sensu_server.json

sensuとredisとrabbitmqをインストールしてください。

  • sensu_server.json
{
  "sensu": {
      "use_embedded_ruby": true,
      "dashboard": {
          "user": "foo",
          "password": "bar"
      },
       "rabbitmq": {
          "host": "localhost",
          "port": 5671,
          "vhost": "/sensu",
          "password": "baz"
      },
      "node_subscriptions": [
          "sensu_server"
      ]
  },
  "run_list": ["recipe[sensu]", "recipe[sensu::redis]", "recipe[sensu::rabbitmq]"]
}

上記内容でChefを廻せばインストールされるかと思います。
パスワードやポートなどデフォルトの設定のままで問題なければ指定は不要です。

Sensu client のインストール

clientはsensu-clientだけが動いていれば大丈夫です。

  • sensu_client.json
{
  "sensu": {
        "use_embedded_ruby": true,
        "node_subscriptions": [ "sensu_client" ],
        "use_embedded_ruby": true,
        "rabbitmq": {
              "host": "sensu-server",
              "port": 5671,
              "vhost": "/sensu",
              "password": "baz"
          }

    }
  },
  "run_list": ["recipe[sensu]"]
}

上記内容でChefを廻せばインストールされるかと思います。
パスワードやポートなどデフォルトの設定のままで問題なければ指定は不要です。

Sensu serverの設定

Chefの動作が問題なければ/etc/sensu/config.jsonのファイルが作成されているかと思います。

$ /etc/init.d/sensu-server start
$ tail -F /var/log/sensu/sensu-server.log

起動できることを確認してください。
最初、すごい勘違いしていたのですが、sensu-apiはdashboardの為の機能で
sensu-serverには必要ないと思っていたのですが、基本的なミドルウェア間のやり取りは
sensu-apiを通して利用することになります。なので

$ /etc/init.d/sensu-api start
$ tail -F /var/log/sensu/sensu-api.log

として、sensu-apiを起動してください。
これでsensu-clientからデータを受け付ける準備ができました。

Sensu clientの設定

https://github.com/kenjiskywalker/sensu-client-plugin

多分みなさんこのような自前recipeを作成しているかと思いますが
上記のrecipeを利用して/etc/sensu/conf.d/client.jsonという
client用のjsonファイルを作成します。

pluginの配布も上記cookbookを利用して配布しようかなと考えていますが
Chefの実行自体のコストが地味に大きいので、配布自体はrsyncか何かで配布して
Chefで冪等性を確保するのが効率良いのかなとも考えています。

$ /etc/init.d/sensu-client start
$ tail -F /var/log/sensu/sensu-client.log

監視項目の追加(server)

  • 監視に利用するプラグインのコマンド置き場

/etc/sensu/plugins/

  • 通知に利用するプラグインのコマンド置き場

/etc/sensu/handlers/

  • 監視内容の設定・通知の設定など

/etc/sensu/conf.d/

ファイル構成

  • server
/etc/sensu/
├── conf.d
│   ├── checks
│   │   ├── check_cpu.json
│   │   ├── check_disk.json
│   │   ├── check_mailq.json
│   │   ├── check_memcached.json
│   │   ├── check_mongodb.json
│   │   ├── check_mongodb_replica.json
│   │   ├── check_proc_apache.json
│   │   ├── check_proc_nginx.json
│   │   ├── check_redis_info.json
│   │   ├── check_redis_info_slave.json
│   │   ├── check_smtp.json
│   ├── handlers
│   │   ├── graphite.json
│   │   ├── hipchat.json
│   │   └── mailer.json
│   ├── metrics
│   │   ├── metrics-cpu.json
│   │   ├── metrics-disk_usage.json
│   │   ├── metrics-net.json
│   │   ├── metrics-netstat-tcp.json
│   │   └── metrics-vmstat.json
│   └── README.md
├── config.json
├── extensions
├── handlers
│   ├── hipchat.rb
│   └── mailer.rb
├── mutators
├── plugins
└── ssl
    ├── cert.pem
    └── key.pem

Sensu serverを監視しないとういことはないので
/etc/sensu/plugins/配下に監視用のコマンドを起きますが
Sensu serverが動く最低限の設定例を記載します。

Sensu serverはSensu clientにこれを実行してねという機能を持ち
Sensu clientはserverから受け取ったjobを実行し
serverへ結果を返す。という繰り返しを行います。

  • client
/etc/sensu/
├── conf.d
│   ├── client.json
│   └── README.md
├── config.json
├── extensions
├── handlers
├── mutators
├── plugins
│   ├── check-cpu.rb
│   ├── check-disk.rb
│   ├── check-http.rb
│   ├── check-mailq.rb
│   ├── check-memcached-stats.rb
│   ├── check_mongodb.py
│   ├── check_mongo_replica_stat.rb
│   ├── check-procs.rb
│   ├── check-redis-info.rb
│   ├── cpu-pcnt-usage-metrics.rb
│   ├── disk-usage-metrics.rb
│   ├── metrics-net.rb
│   ├── metrics-netstat-tcp.rb
│   └── vmstat-metrics.rb
└── ssl
    ├── cert.pem
    └── key.pem

Sensu server

  • 監視の設定は必要(/etc/sensu/conf.d/etc/)
  • 監視のコマンドは必要ない(/etc/sensu/plugins/)

Sensu client

  • 監視の設定は必要ない(/etc/sensu/conf.d/etc/)
  • 監視のコマンドは必要(/etc/sensu/plugins/)

ということになります。

まだ完全に動作を理解してるわけではないので
次はもう少し確認した後、監視の仕組みについてまとめたいと思います。