前回、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の使用方法について、ドキュメントがあまり見つからなかったため、コード内に書かれた説明を参考にしました。