Successfully reported this slideshow.
ザビ家の野望!
∼全自動ZABBIX AWS編∼
け や ぼ う
2014.05.15
株式会社 サイバード
三浦 克浩
自己紹介
• 名前:三浦 克浩

• Twitter ID:@MiuraKatsu

• 仕事:ソーシャゲ開発

• 好きなフレームワーク:
CakePHP、Yacafi

• 浦和レッズ:
全自動ZABBIX AWS編
• 全自動で登録
• 全自動で削除
• 全自動で登録 Mk-II
• 全自動で削除 改
• 分散監視について
• Zabbix API
• サーバ設定の自動化
• 全自動Zabbix 完全版
ZABBIXで自動登録
・ネットワークディスカバリ
ポーリング型
!
・Zabbix Agent アクティブチェック
 PUSH型
 
ネットワークディスカバリ
• ポーリング型
• 定期ポーリング
• 登録も削除も
• IPアドレスの範囲指定
• SNMPとかでも
• 時間がかかる
ネットワークディスカバリ
ZABBIX Server
Node
Node Node Node
Agent アクティブチェック
• PUSH型
• 起動時にサーバから監視項目のリスト取得
• 登録されてなかったら登録
• 削除はできない
• Zabbix Agentのみ
Agent アクティブチェック
ZABBIX Server
Node
Node Node Node
全自動で登録 AWS編
AWSだと増えたり減ったり
ZABBIX Server
Node
Node Node Node
Node
Node Node
全自動で登録 AWS編
• アクティブチェックを使う
• zabbix_agentd.conf 
→ ServerActive に 設定 (Server は パッシブ)
• amiでもchefでも
• 「アクション」-「自動登録」で「ホストの追...
こんな感じ
ここまでは
全自動ZABBIXでも
やってる
全自動で削除 AWS編
AWSだと増えたり減ったり
ZABBIX Server
Node
Node Node Node
Node
Node Node
全自動で削除 AWS編
• ディスカバリを使う
• 「ディスカバリ」-「ルールの作成」で アベイ
ラビリティゾーン毎にIPアドレスの範囲を指定
• 「アクション」-「ディスカバリ」で「ディスカ
バリのステータス」が「Down」のとき「ホスト
の...
こんな感じ
そしてこんな感じ
問題が
• 登録しているIPアドレスの範囲を全部チェック
• Terminateしてから削除まで時間がかかる
• いつになったら削除されるか分からない
そこで
全自動で登録 Mk­II
• 「アイテム」:インスタンスIDを取得
• → Zabbixエージェント:system.run[curl http://
169.254.169.254/latest/meta-data/instance-id ]
...
こんな感じ
そしてこう
さらにこう
そしてこうなる
全自動で登録 Mk­II
• 「アイテム」:インスタンスIDを取得
• → Zabbixエージェント:system.run[curl http://
169.254.169.254/latest/meta-data/instance-id ]
...
なので
全自動で削除 改
• 「アイテム」:インスタンスIDを使ってec2のステータ
スを取得
• →外部チェック:スクリプト実行(aws command
line interfaceで)
• 「トリガー」:running -> terminated
...
こんな感じ
ちなみに
スクリプトの実行結果を監視
・ユーザパラメータ
 Agent側で実行
 zabbix_agentd.conf
 →UserParameter=key[*],command
!
・外部チェック
 サーバ側で実行
 zabbix_server.co...
スクリプトの中身
RESULT=`aws --output json ec2 describe-instances 
--instance-id ${INSTANCE_ID} ¦ 
/usr/lib/zabbix/externalscripts...
そしてこうなる
まだちょっと問題
• ec2のステータスが「terminated」を返す時間
が短すぎる
• トリガーが起動しない場合も
結局
• 「スクリプト」:ホスト削除スクリプトを登録
• →グローバルスクリプト
• →アラート発生時のオペレーションとしても実
行できる
• 手動でも簡単に消せる!
こんな感じ
さらにこう
こんな風にも使える
ところで
Zabbixサーバって
どんどん増えますよね。
複数Zabbixサーバ
ZABBIX Server
ZABBIX Server ZABBIX Server
ZABBIX Server
分散&統合監視
ZABBIX Server
ZABBIX Server ZABBIX Server
ZABBIX Server
Node Node Node Node
分散監視について
• プロキシ
• ノード → 2.4で廃止
Zabbixサーバの構成
ZABBIX
Server
Web
DB
Server
Agent
全部別のサーバでもOK
}
プロキシ
ZABBIX Server
ZABBIX Server ZABBIX Server
ZABBIX Server
Node Node Node Node
Server Server
Server
Server DB
ノード
ZABBIX Server
ZABBIX Server ZABBIX Server
ZABBIX Server
Node Node Node Node
Server DB
Server
DB
Server
DB
Server
DB
設定が面倒くさい
廃止になるくらい
それぞれ独立
ZABBIX Server
ZABBIX Server ZABBIX Server
ZABBIX Server
Node Node Node Node
変更を全部に反映する
のが面倒くさい
ZABBIX API
わりと何でもできる
• マクロに登録
• ホストを削除
• テンプレートのexport/import
• てゆうか全部できる
Sample (Python)
#!/usr/bin/env python
!
zbxsv = "http://localhost/zabbix/api_jsonrpc.php"
headers = {"Content-Type":"appli...
Sample (Python)
### delete host ###
json_str = {
'jsonrpc':'2.0',
'method':'host.delete',
'params':[{
'hostid':zbx_hostid,...
Sample (Python)
### post request ###
auth_post = json.dumps(json_str)
request = urllib2.Request(zbxsv, auth_post, headers)...
Sample
json_str = {
'jsonrpc':'2.0',
'method':'script.create',
'params':{
"name":"delete terminated host",
"command":"/usr...
JenkinsのJOB
変更をJenkinsから
Jenkins
ZABBIX Server ZABBIX Server
ZABBIX Server
サーバ構築はChefで
自動化済
サーバの構築時
Jenkins
ZABBIX Server
Jenkins API
Zabbix API
サーバ設定も自動化
サーバが増えても安心
スクリプトでの設定変更
Chefのレシピ作成中
(20%くらい)
全自動ZABBIX 完全版
乞うご期待
Upcoming SlideShare
Loading in …5
×

ザビ家の野望 〜 全自動ZABBIX AWS編 〜

10,280 views

Published on

社内LT大会で発表した資料です。

Published in: Technology

ザビ家の野望 〜 全自動ZABBIX AWS編 〜

  1. 1. ザビ家の野望! ∼全自動ZABBIX AWS編∼ け や ぼ う 2014.05.15 株式会社 サイバード 三浦 克浩
  2. 2. 自己紹介 • 名前:三浦 克浩 • Twitter ID:@MiuraKatsu • 仕事:ソーシャゲ開発 • 好きなフレームワーク: CakePHP、Yacafi • 浦和レッズ:
  3. 3. 全自動ZABBIX AWS編 • 全自動で登録 • 全自動で削除 • 全自動で登録 Mk-II • 全自動で削除 改 • 分散監視について • Zabbix API • サーバ設定の自動化 • 全自動Zabbix 完全版
  4. 4. ZABBIXで自動登録 ・ネットワークディスカバリ ポーリング型 ! ・Zabbix Agent アクティブチェック  PUSH型  
  5. 5. ネットワークディスカバリ • ポーリング型 • 定期ポーリング • 登録も削除も • IPアドレスの範囲指定 • SNMPとかでも • 時間がかかる
  6. 6. ネットワークディスカバリ ZABBIX Server Node Node Node Node
  7. 7. Agent アクティブチェック • PUSH型 • 起動時にサーバから監視項目のリスト取得 • 登録されてなかったら登録 • 削除はできない • Zabbix Agentのみ
  8. 8. Agent アクティブチェック ZABBIX Server Node Node Node Node
  9. 9. 全自動で登録 AWS編
  10. 10. AWSだと増えたり減ったり ZABBIX Server Node Node Node Node Node Node Node
  11. 11. 全自動で登録 AWS編 • アクティブチェックを使う • zabbix_agentd.conf  → ServerActive に 設定 (Server は パッシブ) • amiでもchefでも • 「アクション」-「自動登録」で「ホストの追加」
  12. 12. こんな感じ
  13. 13. ここまでは 全自動ZABBIXでも やってる
  14. 14. 全自動で削除 AWS編
  15. 15. AWSだと増えたり減ったり ZABBIX Server Node Node Node Node Node Node Node
  16. 16. 全自動で削除 AWS編 • ディスカバリを使う • 「ディスカバリ」-「ルールの作成」で アベイ ラビリティゾーン毎にIPアドレスの範囲を指定 • 「アクション」-「ディスカバリ」で「ディスカ バリのステータス」が「Down」のとき「ホスト の削除」
  17. 17. こんな感じ
  18. 18. そしてこんな感じ
  19. 19. 問題が • 登録しているIPアドレスの範囲を全部チェック • Terminateしてから削除まで時間がかかる • いつになったら削除されるか分からない
  20. 20. そこで
  21. 21. 全自動で登録 Mk­II • 「アイテム」:インスタンスIDを取得 • → Zabbixエージェント:system.run[curl http:// 169.254.169.254/latest/meta-data/instance-id ] • 「トリガー」:インスタンスIDがnot nullになったら • →スクリプト実行:マクロのユーザ変数にinstance-id 登録 (Zabbix APIで!) • 各サーバのインスタンスIDがスクリプトで使える!
  22. 22. こんな感じ
  23. 23. そしてこう
  24. 24. さらにこう
  25. 25. そしてこうなる
  26. 26. 全自動で登録 Mk­II • 「アイテム」:インスタンスIDを取得 • → Zabbixエージェント:system.run[curl http:// 169.254.169.254/latest/meta-data/instance-id ] • 「トリガー」:インスタンスIDがnot nullになったら • →カスタムスクリプト:マクロのユーザ変数に instance-id登録 (Zabbix APIで!) • 各サーバのインスタンスIDがスクリプトで使える!
  27. 27. なので
  28. 28. 全自動で削除 改 • 「アイテム」:インスタンスIDを使ってec2のステータ スを取得 • →外部チェック:スクリプト実行(aws command line interfaceで) • 「トリガー」:running -> terminated • →スクリプト実行:ホスト削除(Zabbix APIで!) • Terminateしたらすぐ消えた!
  29. 29. こんな感じ
  30. 30. ちなみに
  31. 31. スクリプトの実行結果を監視 ・ユーザパラメータ  Agent側で実行  zabbix_agentd.conf  →UserParameter=key[*],command ! ・外部チェック  サーバ側で実行  zabbix_server.conf  →ExternalScripts=SCRIPT_PATH  →script[<parameter1>,<parameter2>,...]
  32. 32. スクリプトの中身 RESULT=`aws --output json ec2 describe-instances --instance-id ${INSTANCE_ID} ¦ /usr/lib/zabbix/externalscripts/jq ".Reservations[0].Instances[0].${JSON_PATH}"` AWS commandline interface を叩いて jsonをjqに食わせて、resultを取る
  33. 33. そしてこうなる
  34. 34. まだちょっと問題 • ec2のステータスが「terminated」を返す時間 が短すぎる • トリガーが起動しない場合も
  35. 35. 結局 • 「スクリプト」:ホスト削除スクリプトを登録 • →グローバルスクリプト • →アラート発生時のオペレーションとしても実 行できる • 手動でも簡単に消せる!
  36. 36. こんな感じ
  37. 37. さらにこう
  38. 38. こんな風にも使える
  39. 39. ところで
  40. 40. Zabbixサーバって どんどん増えますよね。
  41. 41. 複数Zabbixサーバ ZABBIX Server ZABBIX Server ZABBIX Server ZABBIX Server
  42. 42. 分散&統合監視 ZABBIX Server ZABBIX Server ZABBIX Server ZABBIX Server Node Node Node Node
  43. 43. 分散監視について • プロキシ • ノード → 2.4で廃止
  44. 44. Zabbixサーバの構成 ZABBIX Server Web DB Server Agent 全部別のサーバでもOK }
  45. 45. プロキシ ZABBIX Server ZABBIX Server ZABBIX Server ZABBIX Server Node Node Node Node Server Server Server Server DB
  46. 46. ノード ZABBIX Server ZABBIX Server ZABBIX Server ZABBIX Server Node Node Node Node Server DB Server DB Server DB Server DB
  47. 47. 設定が面倒くさい 廃止になるくらい
  48. 48. それぞれ独立 ZABBIX Server ZABBIX Server ZABBIX Server ZABBIX Server Node Node Node Node
  49. 49. 変更を全部に反映する のが面倒くさい
  50. 50. ZABBIX API
  51. 51. わりと何でもできる • マクロに登録 • ホストを削除 • テンプレートのexport/import • てゆうか全部できる
  52. 52. Sample (Python) #!/usr/bin/env python ! zbxsv = "http://localhost/zabbix/api_jsonrpc.php" headers = {"Content-Type":"application/json-rpc"} ! argvs = sys.argv zbx_hostname = argvs[1] zbx_auth = argvs[2]
  53. 53. Sample (Python) ### delete host ### json_str = { 'jsonrpc':'2.0', 'method':'host.delete', 'params':[{ 'hostid':zbx_hostid, }], 'auth':zbx_auth, 'id':1} ! API 認証キー 内部管理用ホストID
  54. 54. Sample (Python) ### post request ### auth_post = json.dumps(json_str) request = urllib2.Request(zbxsv, auth_post, headers) contents = urllib2.urlopen(request) contents_str = contents.read() contens_dict = json.loads(contents_str) ! print contens_dict["result"]
  55. 55. Sample json_str = { 'jsonrpc':'2.0', 'method':'script.create', 'params':{ "name":"delete terminated host", "command":"/usr/lib/zabbix/apiscripts/delete_host.py {HOST.NAME} " + zbx_auth , "host_access":"2", "usrgrpid":"0", "groupid":"0", "description":"", "confirmation":"", "type":"0", "execute_on":"1" }, 'auth':zbx_auth, 'id':1}
  56. 56. JenkinsのJOB
  57. 57. 変更をJenkinsから Jenkins ZABBIX Server ZABBIX Server ZABBIX Server
  58. 58. サーバ構築はChefで 自動化済
  59. 59. サーバの構築時 Jenkins ZABBIX Server Jenkins API Zabbix API
  60. 60. サーバ設定も自動化
  61. 61. サーバが増えても安心
  62. 62. スクリプトでの設定変更 Chefのレシピ作成中 (20%くらい)
  63. 63. 全自動ZABBIX 完全版 乞うご期待

×