運転次元pythonは(3)pythonで自分のzabbixの呼び出し方法を書く
zabbixは非常に主流の監視ソフトウェアで、簡単で使いやすいと言われています.zabbixは完全なapiを持っていて、サードパーティを通じて呼び出すのに便利なので、pythonを利用してzabbix apiの呼び出しを完了する方法を紹介します.
zabbix apiは主にhttpプロトコルによって通信され,ここではjson形式のデータを用いてインタラクションを行う.
ここにはまず公式文書の転送ドアを置いて、みんなが閲覧できるようにします.
紹介する
zabbix apiのアドレスは「/api_jsonrpc.php」ここではまずlinuxシステムコマンドで、zabbixのログインtokenを取得する方法を示します.次に戻った結果はjson対応のresultが結果、つまりあなたが得たいtokenです.
postのhttpリクエストのように見えますpythonでやりましょう
まずurllib 2モジュールを選びました.python自体がこのモジュールを持ってシステムの互換性を高めているからです.
zabbixのtokenを手に入れると他のことができます
ここではホスト情報を入手してみてください
例:
これはcurlがホスト情報を完了し、取得する操作です.
zabbix apiリクエストのjson内の主要な3つの部分:zabbixメソッドの操作、params、tokenが変化するため、pythonで上記の操作を完了します.ここでは3つのパラメータを入力するだけで方法を構築しました.
シナリオを書いて実行シナリオを書いてみよう
拡張1
皆さんがここを学んでまだ満足していないことを信じて、怠け者は永遠に果てしないで、私は自分の状況によって引き続き使い方をカプセル化して、自分の需要によって1つのホストを作成する方法をカプセル化します
拡張2
例えば、groupのホストのeth 0ネットワークカードとCPU負荷をscreenを作成する必要があります.pythonで次の操作を完了しなければなりません.
1.ホストグループの指定graph idを取得する方法を作成する
2.screen nameが入力される限りgraph idはscreenを作成する方法を作成する
今日はもう遅いからここまで書いて明日に続きます.
zabbix apiは主にhttpプロトコルによって通信され,ここではjson形式のデータを用いてインタラクションを行う.
ここにはまず公式文書の転送ドアを置いて、みんなが閲覧できるようにします.
紹介する
zabbix apiのアドレスは「/api_jsonrpc.php」ここではまずlinuxシステムコマンドで、zabbixのログインtokenを取得する方法を示します.次に戻った結果はjson対応のresultが結果、つまりあなたが得たいtokenです.
[root@salt-node1 zabbix]# curl -XPOST http://192.168.198.116/api_jsonrpc.php -H 'Content-Type:application/json' -d '{
> "jsonrpc": "2.0",
> "method": "user.login",
> "params": {
> "user": "admin",
> "password": "zabbix"
> },
> "id": 0
> }'
{"jsonrpc":"2.0","result":"f2e8bbaf7e5290d51914a78a0328f19e","id":0}
postのhttpリクエストのように見えますpythonでやりましょう
まずurllib 2モジュールを選びました.python自体がこのモジュールを持ってシステムの互換性を高めているからです.
[root@salt-node1 tmp]# python zabbix.py
f037e64b7018fe987c3b1d3e1d717ecb
[root@salt-node1 tmp]# cat zabbix.py
#coding:utf-8
import json
import urllib2
import logging
logging.basicConfig(filename='./my_log_test.log',format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',level=logging.INFO)
zbx_url = 'http://192.168.199.224:88/api_jsonrpc.php'
zabbix_user = 'admin'
zabbix_pwd = 'dianjoy.com'
def get_token():
url = zbx_url
# header , http
header = {"Content-Type": "application/json"}
# json
data = '''{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "%s",
"password": "%s"
},
"id": 0
}''' % (zabbix_user,zabbix_pwd)
#
request = urllib2.Request(url,data)
# http
for key in header:
request.add_header(key,header[key])
# , token
try:
result = urllib2.urlopen(request)
except urllib2.URLError as e:
print "Auth Failed, Please Check Your Name And Password:",e.code
else:
response = json.loads(result.read())
result.close()
return response['result']
print get_zbx_token()
zabbixのtokenを手に入れると他のことができます
ここではホスト情報を入手してみてください
例:
これはcurlがホスト情報を完了し、取得する操作です.
[root@salt-node1 tmp]# curl -k -H 'Content-Type: application/json' http://192.168.198.116/api_jsonrpc.php -d '{
> "jsonrpc": "2.0",
> "method": "host.get",
> "params": {
> "output": "extend",
> "filter": {
> "name": [
> "Zabbix server"
> ]
> }
> },
> "auth": "d6e4eb7e6bd884fec2ccffe4205d5960",
> "id": 1 }'
{"jsonrpc":"2.0","result":[{"hostid":"10084","proxy_hostid":"0","host":"Zabbix server","status":"0","disable_until":"0","error":"","available":"1","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"Zabbix server","flags":"0","templateid":"0","description":"","tls_connect":"1","tls_accept":"1","tls_issuer":"","tls_subject":"","tls_psk_identity":"","tls_psk":""}],"id":1}
zabbix apiリクエストのjson内の主要な3つの部分:zabbixメソッドの操作、params、tokenが変化するため、pythonで上記の操作を完了します.ここでは3つのパラメータを入力するだけで方法を構築しました.
def zbx_req(zbx_action, zbx_params, zbx_token):
''' get host info '''
header = {"Content-Type": "application/json"}
#zabbix server url
url = zbx_url
# json
data='''{
"jsonrpc": "2.0",
"method": "%s",
"params": %s,
"auth": "%s",
"id": 1 }''' % (zbx_action, zbx_params, zbx_token)
request = urllib2.Request(url, data)
for key in header:
request.add_header(key, header[key])
# zabbix
try:
result = urllib2.urlopen(request)
except urllib2.URLError as e:
print "request Failed:", e.code
else:
#
# json error key , False
# json result key
# json result key
response = json.loads(result.read())
if 'error' in response:
print response['error']
return False
elif not response['result']:
print response
return False
else:
return response['result']
result.close()
# ,
zbx_token = get_zbx_token()
zbx_action = 'host.get'
zbx_params = '''{
"output": "extend",
"filter": {
"name": ["Zabbix server"]
}
}'''
print zbx_req(zbx_action,zbx_params,zbx_token)
シナリオを書いて実行シナリオを書いてみよう
[root@salt-node1 tmp]# python zabbix.py
[{u'available': u'1', u'tls_connect': u'1', u'maintenance_type': u'0', u'ipmi_errors_from': u'0', u'ipmi_username': u'', u'snmp_disable_until': u'0', u'ipmi_authtype': u'-1', u'ipmi_disable_until': u'0', u'lastaccess': u'0', u'snmp_error': u'', u'tls_psk': u'', u'ipmi_privilege': u'2', u'jmx_error': u'', u'jmx_available': u'0', u'maintenanceid': u'0', u'snmp_available': u'0', u'tls_psk_identity': u'', u'status': u'0', u'description': u'', u'tls_accept': u'1', u'host': u'Zabbix server', u'disable_until': u'0', u'ipmi_password': u'', u'templateid': u'0', u'tls_issuer': u'', u'ipmi_available': u'0', u'maintenance_status': u'0', u'snmp_errors_from': u'0', u'ipmi_error': u'', u'proxy_hostid': u'0', u'hostid': u'10084', u'name': u'Zabbix server', u'jmx_errors_from': u'0', u'jmx_disable_until': u'0', u'flags': u'0', u'error': u'', u'maintenance_from': u'0', u'tls_subject': u'', u'errors_from': u'0'}]
拡張1
皆さんがここを学んでまだ満足していないことを信じて、怠け者は永遠に果てしないで、私は自分の状況によって引き続き使い方をカプセル化して、自分の需要によって1つのホストを作成する方法をカプセル化します
class Zbx_api(object):
def zbx_create_host(self,hostname,inter_ip,group_id,temlpate_id):
self.hostname = hostname
self.inter_ip = inter_ip
self.group_id = group_id
self.temlpate_id = temlpate_id
'''
hostname :
inter_ip : IP
gourp_id : id
template_id : id
zbx_create_host('salt-node1','192.168.198.116','4','10001')
'''
zbx_action = 'host.create'
zbx_params = '''{
"host": "%s",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "%s",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "%s"
}
],
"templates": [
{
"templateid": "%s"
}
],
"inventory_mode": 0,
"inventory": {
"macaddress_a": "nginxs.net",
"macaddress_b": "nginxs.net"
}
}''' % (hostname,inter_ip,group_id,temlpate_id)
r=Zbx_base_api(zbx_action,zbx_params)
return r.zbx_req()
拡張2
例えば、groupのホストのeth 0ネットワークカードとCPU負荷をscreenを作成する必要があります.pythonで次の操作を完了しなければなりません.
1.ホストグループの指定graph idを取得する方法を作成する
2.screen nameが入力される限りgraph idはscreenを作成する方法を作成する
def zbx_create_screen(self,screen_name,screen_high,screen_width):
''' screen
name : SCREEN
hsize: screen
vsize: screen
screenitems: screen item
resourcetype : "graph","map","url" https://www.zabbix.com/documentation/2.4/manual/api/reference/screenitem/object#screen_item
resourceid: itemid
rowspan:
colspan:
x: x
y: y
'''
self.screen_name = screen_name
self.screen_high = screen_high
self.screen_width = screen_width
zbx_action = 'screen.create'
zbx_params = '''{
"name": "%s",
"hsize": %s,
"vsize": %s,
"screenitems": [
{
"resourcetype": 0,
"resourceid": "524",
"rowspan": 1,
"colspan": 1,
"x": 0,
"y": 2
}
]
}''' % (self.screen_name,self.screen_high,self.screen_width)
print zbx_params
r=Zbx_base_api(zbx_action,zbx_params)
return zbx_req()
今日はもう遅いからここまで書いて明日に続きます.