pythonでzabbix apiを使ってみる
TRANSCRIPT
PythonでZabbixAPIを使ってみる
Python東海 第26回勉強会
2015/1/31 @2box2bo
お前だれよ• 名前:坪内 由孝
@2box2bo• ブログ:http://www.zumwalt.info/blog • お仕事:地方えすあいあーのインフラ屋
1級あひる釣り師 • 所属:(☝ ՞ਊ ՞)☝ウィーンなユーザー会
(Ejectコマンドユーザー会) Python東海 Ingress 緑組 L10へたれagent
• 最近のあれ:なんちゃら2003をなんちゃら2012にちぎっては投げちぎっては投げ…
Zabbixってなんぞ?• ラトビアのZABBIX SIA社が作ったOSSな監視ツール
• 最新Verは2.4系。ただしサポート期間が短い
長期間サポートは2.2系。次のVerは3系。
• 商用サポートもあります http://www.zabbix.com/jp/
• 監視エージェントはLinux、WIndows等だいたいのOS用のが提供されている
• 気合があればなんでも監視できる。
ZabbixのAPI• 監視アイテム、ホスト等の登録、参照、削除等Webからできることはだいたいできる
• APIのドキュメントもある
https://www.zabbix.com/documentation/2.2/manual/api
• Python向けライブラリもある
https://github.com/baniuyao/ZabbixPythonApihttps://github.com/gescheit/scripts/tree/master/zabbixhttps://github.com/lukecyca/pyzabbixhttps://github.com/gnetsman/zabbix_api
APIの使い方 基本• jsonをPOSTで投げればOK
• 初回にauth_keyを取得し、以後は取得したキーを使う
• ドキュメントにだいたいの事は書いてある
APIの使い方 ログイン# coding: UTF-8!import jsonimport urllib2# ZABBIXサーバーのAPIアクセスURLzbxsv = “http://127.0.0.1/zabbix/api_jsonrpc.php" # リクエストヘッダheaders = {"Content-Type":"application/json-rpc"}# ZABBIX API アクセスユーザーzbx_usr = "admin"# ZABBIX API アクセスユーザーパスワードzbx_upw = "zabbix"# POSTする認証用json を生成post_data = json.dumps({'jsonrpc':'2.0','method':'user.login','params':{'user':zbx_usr,'password':zbx_upw},'auth':None,'id': 1})# リクエストを生成request = urllib2.Request(zbxsv, post_data, headers)# リクエストを送信して結果受け取りcontents = urllib2.urlopen(request)# 結果の中身を読み取るcontents_str = contents.read()# キー [result] にAPIの戻り値が入ってますprint contents_str
APIの使い方 ホスト一覧の取得# ホスト一覧を取得するjson post_data = json.dumps({'jsonrpc':'2.0', 'method':'host.get', 'params':{ "output":"extend"}, 'auth':zbx_auth, 'id':1}) # リクエストを生成 request = urllib2.Request(zbxsv, post_data, headers) # リクエストを送信して結果受け取り contents = urllib2.urlopen(request) # 結果の中身を読み取る contents_str = contents.read() contents_dict = json.loads(contents_str) for host in contents_dict["result"]: print host[“name”], host[“hostid”]
APIの使い方 監視アイテムの登録item_key = "testkey." + str(time.time()) # ホスト一覧を取得するjson post_data = json.dumps({ "jsonrpc": "2.0", "method": "item.create", "params": { "name": item_key, "key_": item_key, "hostid": "10107", "type": 2, "value_type": 3}, "auth":zbx_auth, "id": 1}) !# リクエストを生成 request = urllib2.Request(zbxsv, post_data, headers) # リクエストを送信して結果受け取り contents = urllib2.urlopen(request) # 結果の中身を読み取る contents_str = contents.read() contents_dict = json.loads(contents_str) print contents_str
まじめな話はここまで これで何がしたかったか
あひる焼きカウンタを作る!
あひる焼きとは?• ツイッターで@ahiru3net を焼くこと。
KernelVM北陸あたりから始まった謎の儀式
• @ahiru3net のフォロワーが「あひる焼き」とつぶやけば謎リプライが返ってくる。
• いつかBOT落としたい
あひる焼きカウンター 構想• ついったの「あひる焼き」を数える
• 毎時、日次のアカウント毎の結果をZabbixに記録
• Zabbixでグラフ化してあひる焼きの見える化
• 適当についったにグラフを流す
が、途中までしかできてない!
けど実演
あひる焼きカウンタ 今後の課題• あひる焼きしてない既存ユーザーに0を入れる
• グラフ付ツイートをする
• 140文字制限対応
• あひる焼きカウンタページの作成
おまけ?
今後のPython東海について• もくもく会と勉強会を3~4ヶ月に1回は開催していきた。
→ 次回開催は…5~6月?
• 開催場所についていい場所あったら教えてください。
• 何かのハンズオンもありか?(RaspberryPiとか)