どうも、cloudpack の かっぱ(@inokara)です。
はじめに
sensu の検証にて sensu-client を出来るだけ多く用意する為に、以前に自作した Dockerfile を利用したら見事に使いづらかった(ニーズに合わなかった)ので修正した際のメモです。
Dockerfile
sensu-client 以外にも色々ありますが、メンテナンス出来てないのがとてもツライ。
修正したところ
ざっくりと
- docker run だけで監視が開始されるようにした(自作のスクリプトにて)
- sensu-client をフォアグランドで起動するようにした
- クライアントのホスト名、IP アドレスを自動で設定出来るようにした(puppet の factor 使った)
- sensu-plugin のインストール出来るようにした
- embedded な Ruby を使うようにした
- 証明書の設定各種は外した(一時的に…)
尚、修正にあたっては以下の記事を参考にさせて頂きました。有難うございます。
memo
sensu-client をフォアグラウンドで…
デフォルトの sensu-client は -b
オプション付きのバックエンドモードで起動します。このバックエンドモードを外せばフォアグラウンドで起動してくれます。
/opt/sensu/embedded/bin/ruby /opt/sensu/bin/sensu-client -c /etc/sensu/config.json -d /etc/sensu/conf.d -e /etc/sensu/extensions -p /var/run/sensu/sensu-client.pid -l /var/log/sensu/sensu-client.log -L info
また、自作スクリプトなので embedded な Ruby を使うように以下のようにパスを定義しました。
export PATH=/opt/sensu/embedded/bin:$PATH:$PLUGINS_DIR:$HANDLERS_DIR export GEM_PATH=/opt/sensu/embedded/lib/ruby/gems/2.0.0:$GEM_PATH
sensu-client 起動時に client.json をちょっと書き換える等…
sensu 環境の構築には sensu-puppet を利用しているので factor でホストの情報を取得して config.json を書き換えてしまいます。以下、マニフェストの抜粋です。
site.pp
class {'sensu': sensu_plugin_version => installed, use_embedded_ruby => true, manage_services => false, 〜略〜 subscriptions => 'test', client_name => "${fqdn}", client_address => "${ipaddress}", safe_mode => true }
client_name => "${fqdn}"
でホスト名を定義しますclient_address => "${ipaddress}"
で IP アドレスを定義します
上記以外にも
sensu_plugin_version => installed
で sensu-plugin をインストールしますuse_embedded_ruby => true
で sensu 組み込みの Ruby を利用しますmanage_services => false
で service コマンドによるデーモン管理を行わないようになります
sensu-puppet に定義することでやりたいことが出来ました。
ということで…
修正した Dockerfile で build してから以下のようにコンテナを起動することで、サクサク sensu-client を立ち上げることが出来るようになりましたとさ…。
docker run -t -d your_container /root/start.sh
これから検証のはじまりです。
閑話休題…sensu-cli を触ってみた
先日の Sensu Casual Talks #1 で @la_luna_azul さんが紹介されていた sensu-cli を触ってみました。
導入
とっても簡単。
sudo gem install sensu-cli --no-ri --no-rdoc -V
インストール後に以下のように sensu-api の情報を指定します。
mkdir ~/.sensu/ cat << EOT > ~/.sensu/setting.rb host "127.0.0.1" port "4567" ssl false read_timeout 20 open_timeout 20 EOT
とりあえずクライアント一覧を取得する
以下を実行するとクライアント一覧が取得可能です。
/opt/sensu/embedded/bin/sensu-cli client list --format table
詳しい使い方は改めて書きます。(多分)
個人的に役立ちそうなメモ
クライアントを一気にクライアントから削除するワンライナー
for i in `/opt/sensu/embedded/bin/sensu-cli client list --format json | jq -r .[].name | grep internal` do /opt/sensu/embedded/bin/sensu-cli delete $i done
まとまってないまとめ
- 久しぶりに Docker 触りました
- 久しぶりに Puppet 触りました
- Docker コンテナ内でサービスを動かそうとすると色々とコツが必要なことを再認識しました
元記事はこちらです。
「自分で作った sensu-client を実行する Dockerfile を修正したのでメモ+ sensu-cli をちょっと触ってみた」