どうも、cloudpackかっぱ (@inokara) です…

追記

chef-solo がオワコンという話を聞きまして代わりに chef-client の local mode を試してみました。

chef-client -z -c .solo.rb -j .nodeslocalhost.json

こんな感じで実行することで chef-solo のように利用することが出来ました。尚、local mode では chef-zero と呼ばれる簡易的な Chef-Server を利用しています。


はじめに

前回の続きです。
sensu-client for Windows をそれなりに使う為に設定を幾つか追加してみました。


memo

それなりに使う為に

  • プラグインの追加
  • sensu-client のログローテーション

をやってみたいと思います。

プラグインの追加

まずは監視のプラグインを追加してみます。

include_recipe "sensu::default"
include_recipe "sensu::client_service"

sensu_client node.name do
  address node.ipaddress
  subscriptions node.roles + ["all"]
  #additional(:cluster => node.cluster)
end
#
plugins = ['check-disk-windows.rb','check-windows-cpu-load.rb']
plugins.each do |plugin|
  cookbook_file "/opt/sensu/etc/plugins/#{plugin}" do
    source "sensu-community-plugins/plugins/windows/#{plugin}"
    action :create
  end
end
#
gems = ['sensu-plugin','activesupport']
gems.each do |gem|
  gem_package "#{gem}" do
    gem_binary("/opt/sensu/embedded/bin/gem")
    options("--no-ri --no-rdoc")
  end
end
#
sensu_check "check-disk-windows" do
  command "/opt/sensu/embedded/bin/ruby.exe /opt/sensu/etc/plugins/check-disk-windows.rb"
  handlers ["default"]
  subscribers ["windows"]
  interval 60
  standalone true
end
#
sensu_check "check-windows-cpu-load" do
  command "/opt/sensu/embedded/bin/ruby.exe /opt/sensu/etc/plugins/check-windows-cpu-load.rb"
  handlers ["default"]
  subscribers ["windows"]
  interval 60
  standalone true
end

プラグインはあらかじめ git clone しておきましょう。

cd C:\chef-repocookbookssensu-deployfilesdefault
git clone https://github.com/sensu/sensu-community-plugins.git

そして chef-solo をかまします。

cd C:\chef-repo
chef-solo -c .solo.rb -j .nodeslocalhost.json

以下のように出力されました。

sensu-client for Windows を chef-client (local mode) で構築: プラグイン追加の実行結果

もちろん、uchiwa を見ても…

sensu-client for Windows を chef-client (local mode) で構築: プラグイン追加の実行結果 (uchiwa)

プラグインの追加も Chef なら簡単っすな!

sensu-client.log のローテ

Windows 以外で動作する sensu-client のログは logrotate でローテーションされますが、残念ながら Windows 版ではバッチや powershell でやるしか無いのかなって思っていたら logrotatewin というツールを教えて頂いたので利用させて頂くことにしました。

このツールも chef でセットアップしてしまいますのでレシピは以下のように書きました。

windows_package "logrotatewin" do
  action :install
  source "http://softlayer-sng.dl.sourceforge.net/project/logrotatewin/logrotateSetup.msi"
end
#
cookbook_file "/Program Files (x86)/Logrotate/Content/logrotate.conf" do
  source "logrotate.conf"
  action :create
end
#
windows_task 'sensu-client logrotation' do
  user 'Administrator'
  password 'your_password'
  cwd 'C:Program Files (x86)Logrotate'
  command 'C:Program Files (x86)Logrotatelogrotate.exe C:Program Files (x86)LogrotateContentlogrotate.conf'
  frequency :daily
  frequency_modifier 1
end

ポイントは windows_task で一日一回 logrotatewin を実行させる設定を行っているところです。Windows のタスクも chef で登録出来るのは素晴らしい!

ちなみに logrotatewin の設定は以下のような書式となります。

c:optsensuvarlogsensu-client.log {
    rotate 5
    daily
    prerotate
        net stop sensu-client
    endscript
    postrotate
        net start sensu-client
    endscript
}

どっかで見たことのある書式ですね…そう、logrotate の設定と似ていますね。

ということで、あらためて chef-solo を実行します。

cd C:\chef-repo
chef-solo -c .solo.rb -j .nodeslocalhost.json

既に適用済みですので以下のように表示されました。

sensu-client for Windows を chef-client (local mode) で構築: logrotatewin 追加の実行結果

task に登録されているかは powershell から以下のように確認します。

schtasks.exe /Query /TN "sensu-client logrotation"

以下のように出力されました。

sensu-client for Windows を chef-client (local mode) で構築: logrotatewin 追加の実行結果 (task)

おお、ちゃんと登録されていますね。明日あたり改めて確認してみたいと思います。


正直なところ Windows と Chef の組み合わせについては懐疑的でしたが sensu-client をセットアップしたり、ログのローテーション等の設定も Linux 環境と遜色無く行えました。

sensu-client については sensu-chef のリソースを使いまわすことが出来ますし、windows cookbook を利用することでパッケージのインストールやタスクの登録等も簡単でした。

ということで、引続き Windows と sensu と chef について色々と弄っていきたいと思います。

追伸:powershell サイコー!

元記事はこちらです。
chef-solo で始める sensu-client for Windows(2)