b-shock. Fortress

Sensuクライアントの構築(FreeBSD)

  1. サーバ構築編
  2. クライアント構築編(FreeBSD)
  3. クライアント構築編(Ubuntu)
  4. 監視プラグイン実装編
  5. 通知プラグイン実装編

全5回予定。(2017/10/03更新)

前回(サーバ構築編)引き続き、クライアント (被監視ノード)の構築について述べていく。
記事で対象にしているクライアントはFreeBSDだが、OSに依存する箇所は ログまわりぐらいかと思われる。

追記(2017/10/03)
Ubuntuむけの記事を分けました。

Sensuクライアントの設定

ここ以降全て、suしてroot権限で実行。

パッケージ導入

1
2
3
4
gem install sensu
sysrc sensu_client="YES"
mkdir /usr/local/etc/sensu
ln -s /usr/local/etc/sensu /etc/sensu

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

サーバ側の同名ファイルとほとんど同じ。
パスワード等は当然、前回サーバに仕込んだものと合わせる。

/usr/local/etc/sensu/conf.d/client.json

クライアントごとに監視内容が異なるので、これはサンプル。
ウチのLAN内のサーバに対する設定を修正して、ご参考までにサンプルにしたもの。

name はホスト名…じゃなくてもいいみたいだけど、極力ホスト名を。

address はそのホストのグローバルIPアドレス…じゃなくていいみたいだけど、 極力グローバルIPアドレスを。
LAN内のサーバだったら、ローカルアドレスを。DDNSを使ってたりしたら、 仕方ないから0.0.0.0とでも。(一応、監視動作とは無関係らしい)

subscriptions は、監視の内容に関連する。
監視項目(check)については次回説明の予定だが、各checkはひとつ又は複数の subscriptionに属する。
subscriptionは、監視項目を役割等によってグループ化する概念で、 Nagiosのテンプレートに近い?ただ、Sensuでは各監視対象に複数のsubscriptionを 紐付けることができ、この点ではsubscriptionはテンプレートと異なっている。
このサンプルでは、このサーバがLAN内の雑多なサービスを任されていることをご理解頂ける ことと思うw

keepalive 配下には、この例ではメールでの通知(handler)を設定している。
この指定を入れないと、サーバがダウンしてる間は監視が止まってしまい、正常な状態と 見分けがつかない。まさに監視を行っている意味が全くなくなってしまうので、 この指定は必ず必要。
但し、開発用のVMなんかをkeepaliveなしで登録すれば、「起動している間は監視して、 起動していない間は監視しない」ということも一応出来そう。

/usr/local/etc/rc.d/sensu_client

/usr/local/etc/rsyslog.d/sensu.conf

サーバ同様、ログはrsyslogで処理するものとする。

/usr/local/etc/newsyslog.conf.d/sensu

ログのローテーション設定。
Linuxのひとはlogrotateの設定と読み替えてください。

追記(2017/10/03)
Ubuntuむけの記事を分けました。

起動

rsyslogも再起動。

1
2
service rsyslogd restart
service sensu_client start

起動後にサーバ上で動いてるUchiwaの画面を開くと、クライアントが自動的に登録されてる。 このお手軽さもSensuのよさのひとつ。
設定内容を変更したら(subscriptionの追加等)、 単に service sensu_client restart を実行すれば、サーバ側に変更を通知できる。

問題点

Sensuクライアントは割とよく落ちるような気がする。(サーバもだけど!)
大抵のサーバは常時起動しているべきだろうから、この対策も兼ね、繰り返しになるけど keepaliveの監視は必ず行うものとする。

次回予定

この時点では監視項目(check)を登録していない。
それでもkeepalive、つまり監視対象サーバが落ちていないことだけは監視できる。

次回で、一連のSensuの話題はひとまず終わり。監視項目(check)と通知手段(handler)の 実装と登録を行い、監視系として完成させる。

追記(2017/10/03)
監視と通知の実装については、記事を分けることにしました。