ChefからSensuの監視定義を設定する
前回、ChefからDockerコンテナにSensu Serverをインストールすることができました。そこで、今回はSensuの監視定義として、CPU使用率監視、メモリ使用率監視、ログ監視、プロセス監視を設定してみました。
Dockerコンテナ
前回作成したDockerコンテナを使用します。
Sensu ServerのChefレシピ
それでは、Sensuの監視定義をインストールするレシピについて見ていきます。
cookbookの構成
cookbookの構成は以下の通りです。
site-cookbook
└──sensu-server
└──recipes
│ └──default.rb
└──templates
└──default
├──check_cpu.json.erb ... 監視動作定義ファイル(CPU使用率監視)
├──check_memory_pcnt.json.erb ... 監視動作定義ファイル(メモリ使用率監視)
├──check_log.json.erb ... 監視動作定義ファイル(ログ監視監視)
├──checks_proc.json.erb ... 監視動作定義ファイル(プロセス監視)
├──client.json.erb ... Sensu Clientの監視定義ファイル
├──config.json.erb ... Sensu Serverの定義ファイル
├──sensu.list.erb ... リポジトリの定義ファイル
└──sensu-server.conf.erb ... supervisorの定義ファイル
recipesファイル
recipesファイルは以下の通りです。
$ vi site-cookbooks/sensu-server/recipes/default.rb
template "check_cpu.json" do
path "/etc/sensu/conf.d/check_cpu.json"
owner "root"
group "root"
mode "0644"
source "check_cpu.json.erb"
end
template "check_memory_pcnt.json" do
path "/etc/sensu/conf.d/check_memory_pcnt.json"
owner "root"
group "root"
mode "0644"
source "check_memory_pcnt.json.erb"
end
template "check_log.json" do
path "/etc/sensu/conf.d/check_log.json"
owner "root"
group "root"
mode "0644"
source "check_log.json.erb"
end
template "checks_proc.json" do
path "/etc/sensu/conf.d/checks_proc.json"
owner "root"
group "root"
mode "0644"
source "checks_proc.json.erb"
end
bash "sensu server restart" do
code "service sensu-server stop"
action :run
end
- Sensuの監視定義を有効にするため、Sensu Serverの再起動が必要となります。supervisorでSensu Serverプロセスのautorestartをオンにしているため、service sensu-server stopコマンドだけ実行しています。
templateファイル
templateファイルは以下の通りです。(監視定義のみ説明します。)*1
check_cpu.json
CPU使用率監視は、SensuのCommunity Pluginのcheck-cpu.rbを利用します。
上限警告値は-w、上限異常値は-cで設定します。
※bcコマンドを内部で使用しているため、予めインストールしておきます。
{
"checks": {
"check_cpu": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/system/check-cpu.rb -w 90 -c 100",
"interval": 60,
"occurrences": 5,
"subscribers": ["default","sensu"]
}
}
}
check_memory_pcnt.json
メモリ使用率監視は、SensuのCommunity Pluginのcheck-memory-pcnt.shを利用します。
上限警告値は-w、上限異常値は-cで設定します。
{
"checks": {
"check_memory_pcnt": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/system/check-memory-pcnt.sh -w 90 -c 100",
"interval": 60,
"occurrences": 5,
"subscribers": ["default","sensu"]
}
}
}
check_log.json
ログ監視は、SensuのCommunity Pluginのcheck-log.rb を利用します。
監視対象のログファイルは-f、監視文字列は-qで設定します。
{
"checks": {
"check_log": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/logging/check-log.rb -f /var/log/syslog -q test",
"interval": 60,
"occurrences": 5,
"subscribers": ["default","sensu"]
}
}
}
checks_proc.json
プロセス監視は、SensuのCommunity Pluginのcheck-procs.rbを利用します。
監視対象のプロセスは-p、プロセス数の上限異常値/下限異常値は-C/-cで設定します。
プロセス数の上限警告値/下限警告値は-W/-wで設定します。
$ vi site-cookbooks/sensu-server/templates/default/checks_proc.json.erb
{
"checks": {
"sensu-rabbitmq-beam": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/processes/check-procs.rb -p beam -C 1 -w 4 -c 5",
"interval": 60,
"occurrences": 2,
"refresh": 300,
"subscribers": [ "sensu" ]
},
"sensu-rabbitmq-epmd": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/processes/check-procs.rb -p epmd -C 1 -w 1 -c 1",
"interval": 60,
"occurrences": 2,
"refresh": 300,
"subscribers": [ "sensu" ]
},
"sensu-redis": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/processes/check-procs.rb -p redis-server -C 1 -w 4 -c 5",
"interval": 60,
"occurrences": 2,
"refresh": 300,
"subscribers": [ "sensu" ]
},
"sensu-api": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/processes/check-procs.rb -p sensu-api -C 1 -w 4 -c 5",
"interval": 60,
"occurrences": 2,
"refresh": 300,
"subscribers": [ "sensu" ]
},
"sensu-dashboard": {
"handlers": [
"default"
],
"command": "/etc/sensu/plugins/processes/check-procs.rb -p sensu-dashboard -C 1 -w 1 -c 1",
"interval": 60,
"occurrences": 2,
"refresh": 300,
"subscribers": [ "sensu" ]
}
}
}
Chefレシピの実行
Dockerコンテナのポート番号を確認します。
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b245647afb46 ubuntu-supervisor:12.04 supervisord -n 27 minutes ago Up 27 minutes 0.0.0.0:4567->4567/tcp, 0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcp, 0.0.0.0:[ポート番号]->22/tcp, 0.0.0.0:8080->8080/tcp drunk_mayer
Sensu ServerのChefレシピを流します。
Chefを実行する時は、22番ポートにフォワードされているポート番号を指定します。
$ vi nodes/<IPアドレス>.json
{
"run_list": [
"recipe[sensu-server]"
]
}
$ knife solo bootstrap root@<IPアドレス> -p [ポート番号]
Sensu Serverの管理画面
Sensu Serverの監視定義が反映されていることを確認するため、「http://<サーバのIPアドレス>:8080」にアクセスし、Sensuのダッシュボードに接続します。ダッシュボードの「Checks」をクリックし、監視定義が表示されることを確認します。

おわりに
Sensu Serverに監視定義を設定することができました。基本的な監視定義ができたので、今後SensuのCommunity Pluginでどのような監視が可能か見てみようかと思います。
*1:SensuのCommunity Pluginの使用方法について、ドキュメントがあまり見つからなかったため、コード内に書かれた説明を参考にしました。