Posted on May 6
前回の記事で Chef
には Handlers
と呼ばれるレポート機能が備わっていることを知った。レポートの出力先としては JSON
ファイルや IRC
等があり、みんな大好き、私も大好き(になろうと頑張る)Graphite
に出力出来るようなので試してみたいと思う。尚、Fluentd
にも出力することが出来るようなので(以下、参考リンク)活用の機会が広がるような気がしている。
135
ページから 145
ページの「5.7.1 ハンドラ(Chef::Handler)」)13
ページから 18
ページあたりで Handlers
について言及されている)登場人物(Chef Handlers
と Graphite
)について。
Chef Client
のレポーティング機能Start Handlers
と Report Handlers
と Exception Handlers
の三種類node
の情報、経過時間、例外が発生した際の各種情報等を取得可能JSON
ファイル以外にも書き出し先は選べるし自作も可能Chef::Handler
を継承して独自のハンドラを作成することも可能Python
で実装されているcarbon
と whisper
そして graphite webapp
という三つのコンポーネントで構成されているcarbon
は Twisted
というデーモンツールで時系列データを収集する役目whisper
は時系列データを保存しておくデータベース graphite webapp
は whisper
からデータを取り出してグラフを描画するGraphite
について @y_uuk1 さんの以下の資料の図が個人的には一番解りやすかったので拝借させて頂きます…
上の一枚だけで概要は掴めるかと。
Chef Handlers
と Graphite
を設定。 利用した環境は下記の通り。
CentOS 6
の AMI
m3.medium
chef-11.12.4-1.el6.x86_64
(オムニバスインストーラーからインストール)既に Chef
はセットアップされた状態から、chef-handler-graphite
をgem
を使ってインストールする。
インストールは下記のように行った。
/opt/chef/embedded/bin/gem install chef-handler-graphite --no-ri --no-rdoc -V
これだけ…簡単。
設定は以下のページに書いた。
Graphite-web の初期設定を行う場合に以下を実行する。
/usr/lib/python2.6/site-packages/graphite/manage.py syncdb
実行すると以下のようにユーザー名やパスワードを問われる。
詳細の出力については以下の通り。
設定後、ブラウザで Graphite
ホストにアクセスすると…
これで Graphite
は使える状態になった。
Chef Handlers
は Cookbook
内に設定するか、client.rb
や solo.rb
に設定すれば利用出来るとのことなので、solo.rb
に設定してみる。
solo.rb
に以下を追加する。
require 'chef-handler-graphite'
graphite_handler = GraphiteReporting.new
graphite_handler.metric_key = "kappatest.chef.#{Chef::Config.node_name}"
graphite_handler.graphite_host = "localhost"
graphite_handler.graphite_port = "2003"
report_handlers << graphite_handler
exception_handlers << graphite_handler
テストに以下の Cookbook
を選んだ。
Berksfile
に以下を追加して…
source "https://api.berkshelf.com"
cookbook "java"
cookbook "elasticsearch"
berks vendor
を実行する。
/opt/chef/embedded/bin/berks vendor cookbooks
以下のように run_list
を用意する。
{
"name": "elasticsearch-cookbook-test",
"run_list": [
"recipe[java]",
"recipe[elasticsearch]"
],
"java": {
"install_flavor": "openjdk",
"jdk_version": "7"
},
"elasticsearch": {
"cluster" : { "name" : "elasticsearch_test_chef" }
}
}
run_list
を用意したら以下のようにして Cookbook
を適用する。
chef-solo -c solo.rb -j nodes/localhost.json
ちなみに、-W
オプションつけて何度か why-run
で試してもみた。Cookbook
適用後に以下のように表示された。
おお、ちなみに Graphite
の方は…
おお。
以下のような値が Graphite
で確認することが出来る。
all_resources
は run_list
に定義されたレシピの各種リソース(の数)elapsed_time
は start_time
と end_time
の差を表現fail
は例外を含んでいる(数)success
は例外を含んでいない(数)updated_resources
は all_resources
のうちで Chef::Runner
によって変更されたリソース(の数)詳細については以下を参考になる。
上記を参考にしながら Graphite
のグラフを眺めているとより理解が深まる…(かも)。
Chef Handlers
をやっと試せたHandlers
を活用していきたいGraphite
に飛ばすだけだったが、fluentd
を介して MongoDB
等に保存するという事例もあるGraphite
の使い方もなんとなく解ってきたのは良かった2014 かっぱのほげふが