《云计算全栈》-python篇:获取zabbix版本信息、获取令牌、创建主机

案例5:获取zabbix版本信息
案例6:获取令牌
案例7:创建主机
5 案例5:获取zabbix版本信息
5.1 问题

编写一个zabbix_apiversion.py脚本,实现以下功能:

安装zabbix服务器
获取zabbix api的url
编写python程序,访问zabbix api,取得zabbix版本号

5.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装zabbix服务器

安装zabbix服务器具体步骤请参照NSD SECURITY DAY06 cookbook中案例2操作

步骤二:获取zabbix api的url

1)设置前端后,你就可以使用远程HTTP请求来调用API。为此,需要向api_jsonrpc.php位于前端目录中的文件发送HTTP POST请求。如果你的Zabbix前端安装在http://192.168.4.2/zabbix,那么用HTTP请求来调用apiinfo.version方法就如下面这样:

POST 192.168.4.2/zabbix/api_jsonrpc.php HTTP/1.1

2)从zabbix官方文档中获取 Zabbix API 版本,如图-7所示:

官方文档地址如下:

https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/apiinfo/version
在这里插入图片描述
图-7

步骤三:编写脚本

在HTTP协议中,post提交的数据必须放在消息主体中,但是协议中并没有规定必须使用什么编码方式,从而导致了提交方式的不同。服务端根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。

请求的 Content-Type 头部必须设置为以下值之一:

application/json-rpc

application/json

application/jsonrequest

[root@localhost day12]# vim zabbix_apiversion.py
#!/usr/bin/env python3
import requests
import json    # python中的dict类型要转换为json格式的数据需要用到json库
#要访问的网址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是从官方文档处获得的
data = {
    "jsonrpc": "2.0",    #jsonrpc协议的版本号,固定的
    "method": "apiinfo.version",        #在zabbix手册上查到的,查询zabbix版本
    "params": [],        #没有额外参数
    "id": 1    #随便写个数字
}
#使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
#将data转成json格式,zabbix要求提交的数据是json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
#将json格式解码,zabbix返回的数据都是json格式
print(r.json()))

需要注意的是python中并没有json类型这一说法,通过json.dumps(data)转换的字典对象,最后得到的是一个字符串对象,也就是说,在python中json格式的数据实际上就是一个字符串

步骤四:测试脚本执行

[root@localhost day12]# python3 zabbix_apiversion.py
{"jsonrpc": "2.0", "result": "2.4.0", "id": 1}

6 案例6:获取令牌
6.1 问题

编写一个get_token.py脚本,实现以下功能:

编写get_token函数
该函数接受zabbix服务器url、用户名和密码作为参数
函数返回值为用户令牌token

6.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:编写脚本get_token.py,获取身份令牌

1)从zabbix官方文档中使用 user.login 方法登录并获取身份验证令牌请求,如图-8所示:

官方文档地址如下:

https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/user/login
在这里插入图片描述
图-8

2)编写get_token.py文件

[root@localhost day12]# vim get_token.py
#!/usr/bin/env python3
import requests
import json    # python中的dict类型要转换为json格式的数据需要用到json库
#要访问的网址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是从官方文档处获得的
data = {
# API使用的JSON-RPC协议的版本; Zabbix API实现JSON-RPC版本2.0
    "jsonrpc": "2.0",
    "method": "user.login",    #调用的API方法
# params将被传递给API方法的参数
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1    #请求的任意标识符
}
#使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
#将data转成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
#将json格式解码
print(r.json()))

步骤四:测试脚本执行,获取用户令牌token

[root@localhost day12]# python3 get_token.py 
{"jsonrpc": "2.0", "result": "0424bd59b807674191e7d77572075f33", "id": 1}

7 案例7:创建主机
7.1 问题

编写一个remote_comm.py脚本,实现以下功能:

主机192.168.4.10已安装zabbix_agent
将该主机填加到zabbix监控的主机中
主机属于Linux Servers组

7.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:编写脚本,检索组

1)从zabbix官方文档中使用hostgroup.get 方法获取主机组请求,如图-9所示:

官方文档地址如下:

https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/hostgroup/get
在这里插入图片描述
图-9

2)编写get_hostgroup.py文件,检索组

[root@localhost day12]# vim get_hostgroup.py
#!/usr/bin/env python3
import requests
import json    # python中的dict类型要转换为json格式的数据需要用到json库
#要访问的网址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是从官方文档处获得的
data = {
# API使用的JSON-RPC协议的版本; Zabbix API实现JSON-RPC版本2.0
    "jsonrpc": "2.0",
    "method": " hostgroup.get ",    #调用的API方法
# params将被传递给API方法的参数
     "params": {
         "output": "extend",
     },
     "auth": "0424bd59b807674191e7d77572075f33",    #之前获取到的令牌
    "id": 1    #请求的任意标识符
}
#使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
#将data转成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
ginfo = r.json()
print(ginfo['result'])    #打印主机组信息
for item in ginfo['result']:
    print(item['groupid'], item['name'])    #打印主机组id和名称

3)测试脚本执行,获取了主机名称及id,如图-10所示:
在这里插入图片描述
图-10

步骤二:编写脚本,检索模板

1)从zabbix官方文档中使用template.get 方法获取模板请求,如图-11所示:

官方文档地址如下:

https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/template/get
在这里插入图片描述
图-11

2)编写get_template.py文件

[root@localhost day12]# vim get_template.py
#!/usr/bin/env python3
import requests
import json    # python中的dict类型要转换为json格式的数据需要用到json库
#要访问的网址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是从官方文档处获得的
data = {
# API使用的JSON-RPC协议的版本; Zabbix API实现JSON-RPC版本2.0
    "jsonrpc": "2.0",
    "method": "template.get",    #调用的API方法
# params将被传递给API方法的参数
      "params": {
         "output": "extend",
     },
     "auth": "0424bd59b807674191e7d77572075f33",    #之前获取到的令牌
    "id": 1    #请求的任意标识符
}
#使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
#将data转成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
#将json格式解码
tinfo = r.json()
#print(tinfo)        #打印模板信息
for item in tinfo['result']:
    print(item['templateid'], item['host'])        #打印模板名及id

3)测试脚本执行,获取了模板名称及id,如图-12所示:
在这里插入图片描述
图-12

步骤三:编写脚本,创建主机

1)从zabbix官方文档中使用host.create方法获取创建主机请求,如图-13所示:

官方文档地址如下:

https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/host/create
在这里插入图片描述
图-13

2)编写get_host.py文件

[root@localhost day12]# vim get_host.py
#!/usr/bin/env python3
import requests
import json    # python中的dict类型要转换为json格式的数据需要用到json库
#要访问的网址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是从官方文档处获得的
data = {
# API使用的JSON-RPC协议的版本; Zabbix API实现JSON-RPC版本2.0
    "jsonrpc": "2.0",
    "method": "user.login",    #调用的API方法
# params将被传递给API方法的参数
    "params": {
        "host": "mylinux",        #要创建的主机的名称
        "interfaces": [
            {
                "type": 1,  # 1 agent; 2 SNMP; 3 IPMI; 4 JMX
                "main": 1,  # 该接口是否在主机上用作默认接口。1 默认
                "useip": 1,  # 是否应通过IP进行连接
                "ip": "192.168.4.3",        
                "dns": "",
                "port": "10050"        #ip已装zabbix_agent,端口号为10050
            }
        ],
        "groups": [
            {
                "groupid": "2"        #之前检索到的主机组id
            }
        ],
        "templates": [
            {
                "templateid": "10001"        #之前检索到的模板id
            }
        ],
        "inventory_mode": 0,        #资产信息,0为停用
    },
    "auth": "0424bd59b807674191e7d77572075f33",        #之前获取到的令牌
    "id": 1    #请求的任意标识符
}
#使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
#将data转成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))

3)测试脚本执行,运行脚本成功后,主机创建成功,如图-14所示:
在这里插入图片描述
图-14

发布了275 篇原创文章 · 获赞 46 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xie_qi_chao/article/details/104726395