63
ザビ家の野望! ~全自動ZABBIX AWS編~ や ぼ う 2014.05.15 株式会社 サイバード 三浦 克浩

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

け や ぼ う

2014.05.15 株式会社 サイバード

三浦 克浩

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

自己紹介•名前:三浦 克浩

• Twitter ID:@MiuraKatsu

•仕事:ソーシャゲ開発

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

•浦和レッズ:

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

全自動ZABBIX AWS編

• 全自動で登録

• 全自動で削除

• 全自動で登録 Mk-II

• 全自動で削除 改

• 分散監視について

• Zabbix API

• サーバ設定の自動化

• 全自動Zabbix 完全版

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

ZABBIXで自動登録

・ネットワークディスカバリ ポーリング型 !

・Zabbix Agent アクティブチェック  PUSH型  

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

ネットワークディスカバリ• ポーリング型

• 定期ポーリング

• 登録も削除も

• IPアドレスの範囲指定

• SNMPとかでも

• 時間がかかる

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

ネットワークディスカバリZABBIX Server

Node

Node Node Node

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

Agent アクティブチェック• PUSH型

• 起動時にサーバから監視項目のリスト取得

• 登録されてなかったら登録

• 削除はできない

• Zabbix Agentのみ

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

Agent アクティブチェック

ZABBIX Server

Node

Node Node Node

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

全自動で登録 AWS編

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

AWSだと増えたり減ったり

ZABBIX Server

Node

Node Node Node

Node

Node Node

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

全自動で登録 AWS編• アクティブチェックを使う

• zabbix_agentd.conf 

→ ServerActive に 設定 (Server は パッシブ)

• amiでもchefでも

• 「アクション」-「自動登録」で「ホストの追加」

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

こんな感じ

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

ここまでは 全自動ZABBIXでも

やってる

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

全自動で削除 AWS編

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

AWSだと増えたり減ったり

ZABBIX Server

Node

Node Node Node

Node

Node Node

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

全自動で削除 AWS編• ディスカバリを使う

• 「ディスカバリ」-「ルールの作成」で アベイラビリティゾーン毎にIPアドレスの範囲を指定

• 「アクション」-「ディスカバリ」で「ディスカバリのステータス」が「Down」のとき「ホストの削除」

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

こんな感じ

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

そしてこんな感じ

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

問題が

• 登録しているIPアドレスの範囲を全部チェック

• Terminateしてから削除まで時間がかかる

• いつになったら削除されるか分からない

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

そこで

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

全自動で登録 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がスクリプトで使える!

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

こんな感じ

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

そしてこう

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

さらにこう

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

そしてこうなる

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

全自動で登録 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がスクリプトで使える!

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

なので

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

全自動で削除 改• 「アイテム」:インスタンスIDを使ってec2のステータスを取得

• →外部チェック:スクリプト実行(aws command line interfaceで)

• 「トリガー」:running -> terminated

• →スクリプト実行:ホスト削除(Zabbix APIで!)

• Terminateしたらすぐ消えた!

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

こんな感じ

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

ちなみに

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

スクリプトの実行結果を監視・ユーザパラメータ  Agent側で実行  zabbix_agentd.conf  →UserParameter=key[*],command !

・外部チェック  サーバ側で実行  zabbix_server.conf  →ExternalScripts=SCRIPT_PATH  →script[<parameter1>,<parameter2>,...]

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

スクリプトの中身

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を取る

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

そしてこうなる

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

まだちょっと問題

• ec2のステータスが「terminated」を返す時間が短すぎる

• トリガーが起動しない場合も

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

結局• 「スクリプト」:ホスト削除スクリプトを登録

• →グローバルスクリプト

• →アラート発生時のオペレーションとしても実行できる

• 手動でも簡単に消せる!

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

こんな感じ

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

さらにこう

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

こんな風にも使える

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

ところで

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

Zabbixサーバって どんどん増えますよね。

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

複数ZabbixサーバZABBIX Server

ZABBIX Server ZABBIX Server

ZABBIX Server

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

分散&統合監視ZABBIX Server

ZABBIX Server ZABBIX Server

ZABBIX Server

Node Node Node Node

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

分散監視について

• プロキシ

• ノード → 2.4で廃止

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

Zabbixサーバの構成

ZABBIX Server

Web

DB

Server

Agent

全部別のサーバでもOK}

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

プロキシZABBIX Server

ZABBIX Server ZABBIX Server

ZABBIX Server

Node Node Node Node

Server Server

Server

Server DB

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

ノードZABBIX Server

ZABBIX Server ZABBIX Server

ZABBIX Server

Node Node Node Node

Server DB

Server

DB

Server

DB

Server

DB

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

設定が面倒くさい

廃止になるくらい

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

それぞれ独立ZABBIX Server

ZABBIX Server ZABBIX Server

ZABBIX Server

Node Node Node Node

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

変更を全部に反映するのが面倒くさい

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

ZABBIX API

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

わりと何でもできる

• マクロに登録

• ホストを削除

• テンプレートのexport/import

• てゆうか全部できる

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

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]

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

Sample (Python)### delete host ### json_str = { 'jsonrpc':'2.0', 'method':'host.delete', 'params':[{ 'hostid':zbx_hostid, }], 'auth':zbx_auth, 'id':1} ! API 認証キー

内部管理用ホストID

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

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"]

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

Samplejson_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}

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

JenkinsのJOB

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

変更をJenkinsからJenkins

ZABBIX Server ZABBIX Server

ZABBIX Server

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

サーバ構築はChefで自動化済

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

サーバの構築時Jenkins

ZABBIX Server

Jenkins APIZabbix API

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

サーバ設定も自動化

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

サーバが増えても安心

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

スクリプトでの設定変更 Chefのレシピ作成中 (20%くらい)

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

全自動ZABBIX 完全版 乞うご期待