Skip to content

Instantly share code, notes, and snippets.

@inokappa
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inokappa/668ddeaa3957f2f897e4 to your computer and use it in GitHub Desktop.
Save inokappa/668ddeaa3957f2f897e4 to your computer and use it in GitHub Desktop.
Chef Server で Sensu をセットアップするメモ

やりたいこと

  • Sensu ServerSensu Client の設定 Chef でやらせるにあたり、毎回 knife solo を叩くのは近い将来はやってられんので
  • あと、この作業に乗じて Chef Server を復習する
  • ほとんど Chef Server とか Chef Client の使い方メモになってしまってる...

参考


Chef Server の構築

環境

  • Amazon EC2CentOS 6.5
  • SELinux は無効にしておきたいのでこの辺も bootstrap でやってしまいたい

ステップ

wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.12-1.el6.x86_64.rpm
sudo rpm -Uvh chef-server-11.0.12-1.el6.x86_64.rpm 

してから...

chef-server-ctl reconfigure

以上。簡単。


Sensu セットアップ

こっから本題。

Sensu Server

まず、node の登録から始める。(整理することで自動化することが出来るはず)

  1. インスタンス起動
  2. Chef をインストール
  3. chef-client コマンドを利用して Chef Servernode を登録する
  4. Workstation にてこちらの通りに sensu-chef を取得しておく
  5. sensu-chefattributes/default.rb を以下の通り修正する
--- default.rb  2014-05-11 12:45:21.544293121 +0000
+++ default.rb.bk       2014-05-10 06:45:08.527128295 +0000
@@ -23,7 +23,7 @@
default.sensu.msi_repo_url = "http://repos.sensuapp.org/msi"

# rabbitmq
-default.sensu.rabbitmq.host = "${your_rabbitmq_host}"
+default.sensu.rabbitmq.host = "localhost"
default.sensu.rabbitmq.port = 5671
default.sensu.rabbitmq.vhost = "/sensu"
default.sensu.rabbitmq.user = "sensu"
  1. 一旦、Cookbook をアップロードする
cd ~/chef-repo-sensu
knife cookbook upload sensu --include-dependencies -o ./cookbooks/ -c ~/.chef/knife.rb
  1. Workstation にて role を追加(こちらの通り roles/sensu-server.json を用意する)
  2. role/sensu-server.jsonChef Server にアップロードする
cd ~/chef-repo-sensu
knife role from file roles/sensu-server.json -c ~/.chef/knife.rb
  1. rolenode に関連付ける
cd ~/chef-repo-sensu
knife node run_list add ${node} "role["sensu-server"]" -c ~/.chef/knife.rb 
knife node run_list set ${node} "role["sensu-server"]" -c ~/.chef/knife.rb 
  1. 新しい node 上で chef-client を実行する
chef-client -S https://${chef_server_fqdn}

Sensu Client

まず、node の登録から始める。(整理することで自動化することが出来るはず)

  1. インスタンス起動
  2. Chef をインストール
  3. chef-client コマンドを利用して Chef Servernode を登録する
  4. Workstation にて role を追加(こちらの通り roles/sensu-client.json を用意する)
  5. role/sensu-client.jsonChef Server にアップロードする
cd ~/chef-repo-sensu
knife role from file roles/sensu-client.json -c ~/.chef/knife.rb
  1. rolenode に関連付ける
cd ~/chef-repo-sensu
knife node run_list add ${node} "role["sensu-client"]" -c ~/.chef/knife.rb 
knife node run_list set ${node} "role["sensu-client"]" -c ~/.chef/knife.rb 
  1. 新しい node 上で chef-client を実行する
chef-client -S https://${chef_server_fqdn}

ワークフロー

  • Sensu Server 追加
  1. node 追加
  2. role["sensu-server"]node を関連付ける
  3. chef-client 実行
  • Sensu Client 追加
  1. node 追加
  2. role["sensu-client"]node を関連付ける
  3. chef-client 実行
  • 監視項目の追加、削除
  1. 監視内容を cookbook に落としこむ
  2. cookbook をテストする(test-kitchenServerspec
  3. cookbookChef Server にアップロード
  4. cookbooknode を関連付ける
  5. chef-client 実行

定期的な chef-client の実行

cron に任せる。

*/5 * * * * /opt/chef/bin/chef-client -S https://${chef_server_fqdn}

定期的な chef-client の結果を確認する方法を別途検討する。(Chef Handles を活用する。)


起動の図とか

Sensu の Client リスト

Chef Handlers で結果を Graphite に飛ばした結果等


Chef Server を扱うコマンド等

Chef のインストール

curl -L https://www.opscode.com/chef/install.sh | bash

ノードの登録

  • knife bootstrap でもイケるけど試せてない
  • Chef Server 上で
chef-client -K /etc/chef-server/chef-validator.pem
  • Chef Server 以外で(これから登録したい node 上で)
chef-client -S https://${chef_server_fqdn} -K /etc/chef/validation.pem

/etc/chef-server/chef-validator.pem = /etc/chef/validation.pem なので何かしらの方法でコピーしておく。

Node の一覧を取得

knife コマンドを利用。

knife node list -c ~/.chef/knife.rb

Cookbook をアップロード

knife コマンドを利用。

cd ~/chef-repo-sensu
/opt/chef/bin/knife cookbook upload sensu --include-dependencies -o ./cookbooks/ -c ~/.chef/knife.rb -V
/opt/chef/bin/knife cookbook upload sensu --include-dependencies -o ./cookbooks/ -c ~/.chef/knife.rb

role の登録

rolerun_listattribute をガッチャンコして登録出来る。JSON 形式で書いたファイルを from file ${PATH} でアップする。

knife role from file roles/sensu-client.json -c ~/.chef/knife.rb

role の書式は以下の通り。JSON 形式以外にも ruby でも書けるらしい。

{
  "name": "sensu-client",
  "default_attributes": {
  },
  "override_attributes": {
  },
  "run_list": [
    "sensu::default",
    "sensu::client_service"
  ]
}

run_list 又は Role の登録

knife node run_list add ${node} "role["sensu-server"]" -c ~/.chef/knife.rb
knife node run_list set ${node} "role["sensu-server"]" -c ~/.chef/knife.rb

設定ファイル各種

/etc/chef/client.rb

log_level        :info
log_location     STDOUT
chef_server_url  'https://ip-xxx-xxx-x-xxx'
validation_client_name 'chef-validator'

~/.chef/knife.rb

log_level                :info
log_location             STDOUT
node_name                'sensu'
client_key               "#{ENV["HOME"]}/.chef/sensu.pem"
validation_client_name   'chef-validator'
validation_key           "#{ENV["HOME"]}/.chef/validation.pem"
chef_server_url          'https://ip-xxx-xxx-x-xxx'
syntax_check_cache_path  "#{ENV["HOME"]}/.chef/syntax_check_cache"

トラブル

node が登録出来ない...

  • 対処

  • Chef Server のダッシュボード上で chef-validator クライアントの秘密鍵を再度作成して利用する

  • memo

  • validation.pemnode 登録の為に必要

  • node 登録後は validation.pem は削除可能(削除が推奨されている)

knife cookbook upload

  • 現象

  • これと同じ現象

  • 存在していない Chef Servercookbook をアップロードしようとするがホストが存在していないのでエラーになる

  • 対処

  • Chef Server 側で chef-server-ctl reconfigure

knife cookbook upload で Invalid value '[]' for metadata.platforms

  • 現象
  • ulimit という cookbook をアップロード時発生
  • 以下のようなエラーが出た
ERROR: The data in your request was invalid
Response: Invalid value '[]' for metadata.platforms
cd ~/.berkshelf/cookbooks/ulimit-0.3.2/
/opt/chef/bin/knife cookbook metadata from file metadata.rb
cp metadata.json ~/chef-repo-sensu/cookbooks/ulimit/

やってみてどう?

  • Chef Server 便利
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment