sensu + puppet を導入してみた。

今まではnagiosを使っていましたが、サーバを追加するたびに、
監視サービスを設定するのが面倒になっていました。
ちょうど、社内のサーバを新サーバに移行する機会があり、
別のサービスを検討したところ、sensuにたどり着きました。
参考サイトの記事を読んで、puppet と一緒に導入することを決めました。
詳しい内容は他サイトに譲るとして、いくつか備忘録的なものをメモ。

(puppet) directory environments の設定

最新版のpuppetでは、importがdeprecatedになっており、
/etc/puppet/environments/ 以下に、環境ごとに設定を
分けるような形になっていました。
ただし、デフォルトではこの設定が無効になっているので、
以下の設定をpuppet.confに追記しました。

environmentpath = $confdir/environments

あとは、agentのpuppet.confで environment を指定して、
/etc/puppet/environments/{指定したenvironment名}/以下に、
manifests, modules を置いていけばオーケーっぽい。

(sensu) standalone

sensu のチェック項目の設定に、standaloneというのがあります。
いろいろ試行錯誤したところ、次のような挙動でした。

standaloneがfalseの場合
  1. sensu-server に登録されている check 項目ごとに、各agentに「チェックしろ!」と指令が下る。
  2. sensu-client は、指令を受けて、チェックして、結果をサーバへ送信する。
standaloneがtrueの場合
  1. sensu-client は、subscriptionsに関係なく、指定された間隔でチェックを行う。
  2. チェックを行ったあと、チェック結果をサーバへ送信する。
つまり?

standaloneがtrueじゃないと、サーバに存在しないチェック項目、
つまり、agentにしか存在しないチェック項目は、チェックされない。
最初、サーバから「チェックしろ!」指令を受けたagentは、
そのagentが持ってるチェック項目を全部チェックするのかと勘違いしてました。


agent固有の監視項目や、SSLの有効期限チェックのような、
1つのagentでチェックしてれば充分なものは、standaloneで動かしてみてます。

sensu-community-plugins の使い方

sensu-community-plugins に、超素敵なチェックスクリプトが大量にあります。
わんだほーですね。びゅーてぃほーですね。感謝。

使い方

まずは、チェックしたい内容に則したスクリプトを探します。
例えば、SSLの有効期限をチェックしたいなら、plugins/httpの中に
check-https-cert.rbというのがあるので、これを見てみます。


ファイルを見ると、以下の様なオプションが並んでます。

  option :url,
    :short => '-u URL',
    :long => '--url URL',
    :proc => proc { |i| i.to_s },
    :description => 'A URL to connect to'

  option :warning,
    :short => '-w',
    :long => '--warning DAYS',
    :proc => proc { |a| a.to_i },
    :description => 'Warn EXPIRE days before cert expires'

  option :critical,
    :short => '-c',
    :long => '--critical DAYS',
    :proc => proc { |a| a.to_i },
    :description => 'Critical EXPIRE days before cert expires'

これを参考に、チェックスクリプトのコマンドを書きます!それだけ!
以下の例は、有効期限が4週間切るとワーニング、14日切るとクリティカル判定されます。

/etc/sensu/plugins/check-https-cert.rb -u https://example.com -w 28 -c 14

参考サイト