Carpe Diem

備忘録

Sensu クライアントインストール

概要

Sensuのクライアント側です。
簡単のため、RabbitMQの通信にSSLは導入していません。

環境

サーバ構成

サーバ IP
sensu-server, rabbitMQ 192.168.33.100
sensu-client 192.168.33.101

sensuのインストール

パッケージを追加。

$ wget -q http://repositories.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
$ echo "deb     http://repositories.sensuapp.org/apt sensu main" | sudo tee /etc/apt/sources.list.d/sensu.list

インストール。

$ sudo apt-get update
$ sudo apt-get install sensu

設定

RabbitMQ設定

サーバと通信するための設定です。

/etc/sensu/conf.d/rabbitmq.json

{
  "rabbitmq": {
    "host": "192.168.33.100",
    "vhost": "/sensu",
    "user": "sensu",
    "password": "secret"
  }
}

詳細説明

項目 説明
host RabbitMQサーバ 192.168.33.100
vhost sensuで使うvirtual host /sensu
user sensuで使うユーザ sensu
password 上記ユーザのパスワード secret

監視設定

サーバからどんな監視コマンドを受け取るかの設定です。

/etc/sensu/config.json

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

詳細説明

項目 説明
name クライアント名。任意。ただしユニークIDになること cilent1
address 監視したいサーバアドレス localhost
subscriptions サーバで設定したトピック名。そのトピックで実行されるコマンドを受け取る test

設定ファイルの権限をsensuに統一します。

$ sudo chown -R sensu:sensu /etc/sensu

agentの起動

$ sudo service sensu-client start

自動起動設定

$ sudo update-rc.d sensu-client defaults

プラグインのインストール

コミュニティから出されているプラグインであれば簡単に導入できます。
今回はdisk-checkという監視を入れようと思うので、以下のプラグインを入れます。

$ sudo sensu-install -p disk-checks

サーバ側監視設定

sensuはサーバ側で命令をブロードキャストします。
それをクライアント側で取得し、commandを実行します。
なのでサーバ側でcommandを設定します。
命令は先程挙げたdisk-checkです。

/etc/sensu/conf.d/check_disk_usage.json

{
  "checks": {
    "check_disk_usage": {
      "command": "check-disk-usage.rb -w 75 -c 85",
      "interval": 10,
      "subscribers": [ "test" ]
    }
  }
}

詳細説明

項目 説明
checks モニタリングの種類。監視なのでchecks。 checks
check_disk_usage 監視名。任意 check_disk_usage
command 実行したい監視コマンド。
実行ファイルはサーバ側でなくクライアントにあること
プラグインインストールであればパスなしで直接実行可
check-disk-usage.rb -w 75 -c 85
interval 監視頻度(sec) 10
subscriptions サーバで設定するトピック名。もしクライアントがこのトピック名を指定していれば、commandを実行する test

agentの再起動

$ sudo service sensu-server restart

動作確認

クライアント側

クライアント側のログを見ます。

$ tail -f /var/log/sensu/sensu-client.log 
{"timestamp":"2015-12-10T01:22:20.269511+0000","level":"warn","message":"config file applied changes","file":"/etc/sensu/conf.d/check_disk_usage.json","changes":{"checks":{"check_disk_usage":[null,{"command":"check-disk-usage.rb -w 75 -c 85","interval":10,"subscribers":["test"]}]}}}
{"timestamp":"2015-12-10T01:22:20.269572+0000","level":"warn","message":"loading config file","file":"/etc/sensu/conf.d/rabbitmq.json"}
{"timestamp":"2015-12-10T01:22:20.269631+0000","level":"warn","message":"config file applied changes","file":"/etc/sensu/conf.d/rabbitmq.json","changes":{"rabbitmq":[null,{"host":"192.168.33.100","vhost":"/sensu","user":"sensu","password":"REDACTED"}]}}
{"timestamp":"2015-12-10T01:22:20.272755+0000","level":"warn","message":"loading extension files from directory","directory":"/etc/sensu/extensions"}
{"timestamp":"2015-12-10T01:24:12.694113+0000","level":"info","message":"received check request","check":{"name":"check_disk_usage","issued":1449710652,"command":"check-disk-usage.rb -w 75 -c 85"}}
{"timestamp":"2015-12-10T01:24:12.820804+0000","level":"info","message":"publishing check result","payload":{"client":"client1","check":{"name":"check_disk_usage","issued":1449710652,"command":"check-disk-usage.rb -w 75 -c 85","interval":10,"subscribers":["test"],"executed":1449710652,"duration":0.126,"output":"CheckDisk OK: All disk usage under 75% and inode usage under 85%\n","status":0}}}
{"timestamp":"2015-12-10T01:24:22.696241+0000","level":"info","message":"received check request","check":{"name":"check_disk_usage","issued":1449710662,"command":"check-disk-usage.rb -w 75 -c 85"}}

ちゃんとサーバからpublishされたcommandをsubscribeできていますね。

サーバ側

APIでクライアントの一覧を取得できます。

$ curl -s localhost:4567/clients | jq .
[
  {
    "timestamp": 1449710920,
    "version": "0.21.0",
    "subscriptions": [
      "test"
    ],
    "address": "localhost",
    "name": "client1"
  }
]

先ほど設定していたclient1という名前のクライアントが登録されてますね。

ソース