Consulで少し遊んだ。
Consulでできることはいろいろあるけど、死活監視機能があるので、単体でHTTPの死活監視をしてみる。
インストール
Mac OS Xの場合brew cask でインストールできる
$ brew cask install consul
監視設定
例えば、http://eiel.info/
を10秒に1度チェックする。
consulの設定は /etc/consul.d/
に置くとする。
{
"check": {
"id": "eiel.info",
"name": "HTTP eiel.info",
"http": "http://eiel.info/",
"interval": "10s",
"timeout": "1s"
}
}
この状態でconsul agentを起動する。
$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -config-dir=/etc/consul.d/
引数の意味なんかは公式サイトなどを参考にして欲しい。
参考: http://qiita.com/foostan/items/954f73173ea34eb361da#server1%E3%81%AE%E8%B5%B7%E5%8B%95-bootstrap-expect%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E4%BD%BF%E7%94%A8
死活監視の実行結果は curl コマンドなどで確認できる。
$ curl http://127.0.0.1:8500/v1/health/state/any | jq .
[
{
"Node": "xxx.local",
"CheckID": "eiel.info",
"Name": "HTTP eiel.info",
"Status": "passing",
"Notes": "",
"Output": "中略",
"ServiceID": "",
"ServiceName": ""
},
{
"Node": "xxx.local",
"CheckID": "serfHealth",
"Name": "Serf Health Status",
"Status": "passing",
"Notes": "",
"Output": "Agent alive and reachable",
"ServiceID": "",
"ServiceName": ""
}
]
jqコマンドはみやすくするためだけに利用している。
なにもしなくてもAgentの死活監視が行なわれている。
状態がcritical
なものだけwarning
のものだけを表示したりすることもできる。
jsonファイルで指定していたurlにアクセスできない状態になるとcritical
になる。
$ curl http://127.0.0.1:8500/v1/health/state/critical | jq .
[]
他にも絞り込みする機能が一応あるが説明していない概念が登場する。
参考: https://www.consul.io/docs/agent/http/health.html
HTTP以外のチェックがしたい場合は下記を参考になる
参考: https://www.consul.io/docs/agent/checks.html
criticalになったときにコマンドを実行
ちょっと試すには consul watch
コマンドが便利だ。
$ consul watch -type checks -state critical "jq ."
-type checks
の変更を検知するという意味らしい。
-state critical
は状態がcritical
なものだけ表示され、ここに変化があればコマンドが実行される。何かがcriticalになっても実行されるし、ciriticalじゃなくなっても実行される。実行されるコマンドは jq .
となる。
あとは監視しているサーバのapacheなり,nginxをとめたりすると、JSONが表示される。(curlで表示したときと同じもの)
設定ファイルに記述したい場合は
{
"watches": [{
"type": "checks",
"state": "critical",
"handler": "jq . > /tmp/critical.log"
}]
}
みたいにしてやると良い。/tmp/critical.log
に現在の状態がかきこまれる。
あとはメールに送るなりチャットに送るなり、好きにするとよさそうだ。
死活監視のための機能はあまり充実はしていない。