どうも、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 => installedsensu-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

ヘルプは以下の通りです。(手抜きですいません)
sensu-cli のヘルプ一覧

とりあえずクライアント一覧を取得する

以下を実行するとクライアント一覧が取得可能です。

/opt/sensu/embedded/bin/sensu-cli client list --format table

以下のように表示されます。
sensu-cli  でクライアント一覧を取得する

詳しい使い方は改めて書きます。(多分)

個人的に役立ちそうなメモ

クライアントを一気にクライアントから削除するワンライナー

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 をちょっと触ってみた