ザビ家の野望 〜 全自動ZABBIX AWS編 〜
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 2,319 views

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

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

Statistics

Views

Total Views
2,319
Views on SlideShare
2,145
Embed Views
174

Actions

Likes
12
Downloads
16
Comments
0

4 Embeds 174

https://twitter.com 160
http://s.deeeki.com 7
https://kcw.kddi.ne.jp 4
https://www.chatwork.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • ザビ家の野望! ∼全自動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 ] • 「トリガー」:インスタンスIDがnot nullになったら • →スクリプト実行:マクロのユーザ変数にinstance-id 登録 (Zabbix APIで!) • 各サーバのインスタンスIDがスクリプトで使える!
  • こんな感じ
  • そしてこう
  • さらにこう
  • そしてこうなる
  • 全自動で登録 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がスクリプトで使える!
  • なので
  • 全自動で削除 改 • 「アイテム」:インスタンスIDを使ってec2のステータ スを取得 • →外部チェック:スクリプト実行(aws command line interfaceで) • 「トリガー」:running -> terminated • →スクリプト実行:ホスト削除(Zabbix APIで!) • Terminateしたらすぐ消えた!
  • こんな感じ
  • ちなみに
  • スクリプトの実行結果を監視 ・ユーザパラメータ  Agent側で実行  zabbix_agentd.conf  →UserParameter=key[*],command ! ・外部チェック  サーバ側で実行  zabbix_server.conf  →ExternalScripts=SCRIPT_PATH  →script[<parameter1>,<parameter2>,...]
  • スクリプトの中身 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を取る
  • そしてこうなる
  • まだちょっと問題 • 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":"application/json-rpc"} ! argvs = sys.argv zbx_hostname = argvs[1] zbx_auth = argvs[2]
  • Sample (Python) ### delete host ### json_str = { 'jsonrpc':'2.0', 'method':'host.delete', 'params':[{ 'hostid':zbx_hostid, }], 'auth':zbx_auth, 'id':1} ! API 認証キー 内部管理用ホストID
  • 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"]
  • 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}
  • JenkinsのJOB
  • 変更をJenkinsから Jenkins ZABBIX Server ZABBIX Server ZABBIX Server
  • サーバ構築はChefで 自動化済
  • サーバの構築時 Jenkins ZABBIX Server Jenkins API Zabbix API
  • サーバ設定も自動化
  • サーバが増えても安心
  • スクリプトでの設定変更 Chefのレシピ作成中 (20%くらい)
  • 全自動ZABBIX 完全版 乞うご期待