zabbixのイベントログのAPIによる取得について
バージョン 2.2.3
監視データ⇒イベントの結果をAPIで取得したいのですが、
どのような記述をすればよいでしょうか。
時間 ホスト 説明 ステータス 深刻度
既存の動くツールに以下があります。(トリガーIDを取得するAPI)
これをどのように修正すればアラート情報を抜けますでしょうか。
----------------------------------------------------------------------------------------------
#!/usr/bin/python
# coding: UTF-8
import json
import urllib2
import sys
import csv
#ZabbixサーバのIPアクセスURL
zabbixsv = "http://X.X.X.X/zabbix/api_jsonrpc.php"
#リクエストヘッダ
headers = {"Content-Type":"application/json-rpc"}
post_data = json.dumps(
{
"jsonrpc": "2.0",
"method": "trigger.get",
"params": {
"selectGroups": "extend",
"selectHosts": "extend",
"selectItems ": "extend",
"output": "extend",
"selectFunctions": "extend",
"expandData": "true",
"expandDescription": "true",
"expandExpression": "true",
},
"auth":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"id": 1
})
#リクエスト生成
request = urllib2.Request(zabbixsv,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["triggerid"],host["expression"]
----------------------------------------------------------------------------------------------
trigger.getをevent.getに変えればいけるのかと
思いましたが、動きませんでした。
Traceback (most recent call last):
File "./event_get.py", line 47, in
contents = urllib2.urlopen(request)
File "/usr/lib64/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib64/python2.7/urllib2.py", line 437, in open
response = meth(req, response)
File "/usr/lib64/python2.7/urllib2.py", line 550, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib64/python2.7/urllib2.py", line 475, in error
return self._call_chain(*args)
File "/usr/lib64/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/usr/lib64/python2.7/urllib2.py", line 558, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 500: Internal Server Error
経緯
過去のアラートを全取得し、分析したいため
(膨大な件数があるため、表示件数を増やしてのGUIからの取得は画面が固まってしまうため不可能)
kz999 - 投稿数: 24
結果が大量すぎて500エラーを返してそうに見えるので、
とりあえずパラメータにlimit入れて出力を10件に絞って、
こんな感じに書けばevent.get取得できるのではないかと。
#!/usr/bin/python
# coding: UTF-8
import json
import urllib2
import sys
import csv
#ZabbixサーバのIPアクセスURL
zabbixsv = "http://X.X.X.X/zabbix/api_jsonrpc.php"
#リクエストヘッダ
headers = {"Content-Type":"application/json-rpc"}
post_data = json.dumps(
{
"jsonrpc": "2.0",
"method": "event.get",
"params": {
"output": "extend",
"limit": 10
},
"auth": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"id": 1
})
#リクエスト生成
request = urllib2.Request(zabbixsv,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
exit()
event.getがどんなパラメータ使えるかはここ参照して、
色々組み合わせてみてください。
https://www.zabbix.com/documentation/2.2/manual/api/reference/event/get
[追記]
ここのフォーラム書式オプションの<code></code>使い方よくわからんです。
インデント崩れご容赦。
mushima6157 - 投稿数: 30
うまくいかなかったです。
いったん諦めます。
ご回答ありがとうございました。