LoginSignup
8
8

More than 5 years have passed since last update.

Consulでざっくり死活監視してみる

Last updated at Posted at 2015-06-18

Consulで少し遊んだ。
Consulでできることはいろいろあるけど、死活監視機能があるので、単体でHTTPの死活監視をしてみる。

インストール

Mac OS Xの場合brew cask でインストールできる

$ brew cask install consul

監視設定

例えば、http://eiel.info/を10秒に1度チェックする。

consulの設定は /etc/consul.d/ に置くとする。

/etc/consul.d/.json
{
  "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で表示したときと同じもの)

設定ファイルに記述したい場合は

config.json
{
  "watches": [{
    "type": "checks",
    "state": "critical",
    "handler": "jq . > /tmp/critical.log"
  }]
}

みたいにしてやると良い。/tmp/critical.logに現在の状態がかきこまれる。
あとはメールに送るなりチャットに送るなり、好きにするとよさそうだ。

死活監視のための機能はあまり充実はしていない。

参考 https://www.consul.io/docs/agent/options.html#watches

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8