快速入门指南
在您安装 zabbix_utils 后,您可以在脚本中使用它。
本快速入门指南将向您展示如何:
- 从 Zabbix agent 获取主机名。
- 使用 Zabbix API 创建主机和 trapper 监控项。
- 向该监控项发送一个值。
本指南将逐步介绍脚本,并在引入各个部分时进行说明。 完整脚本 位于页面末尾。
本指南还假设您的 Zabbix 服务器、agent 和 API 都在本地运行。
从 Zabbix agent 获取主机名
首先,获取运行 Zabbix agent 的系统的主机名。 创建主机时,你将需要使用这个主机名通过 Zabbix API 进行创建。
1. 从 zabbix_utils 导入 Getter 类。
该类的工作方式类似于 Zabbix get,可让你向 Zabbix agent 请求数据。
2. 创建一个 Getter 实例,连接到位于 127.0.0.1、端口为 10050 的本地 Zabbix agent。
3. 对 Getter 实例调用 get() 方法,从 Zabbix agent 请求主机名。
get()方法将监控项键值作为参数,并向 Zabbix agent 发送该监控项的请求。get()方法返回一个对象,主机名存储在该对象的value属性中。system.hostname是 Zabbix agent 的内置键值,用于返回主机名称。
from zabbix_utils import Getter
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
连接并登录到 Zabbix API
接下来,连接到 Zabbix API。
这样,您的脚本就可以管理 Zabbix 对象,例如主机和监控项。
1. 从 zabbix_utils 导入 ZabbixAPI 类。
2. 创建一个 ZabbixAPI 实例,并提供您的 Zabbix Web 界面的 URL。
3. 在 ZabbixAPI 实例上调用 login() 方法,并提供您的用户名和密码。
该账户必须具有访问 Zabbix API 的权限。
4. 在 API 操作完成后,调用 logout() 方法以关闭会话。
from zabbix_utils import ZabbixAPI
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# API operations go here
api.logout()
在 Zabbix 中创建主机
现在,您已经从 Zabbix agent 获取了主机名,并且已连接到 Zabbix API,接下来可以在 Zabbix 中创建一个新的主机。
1. 在 ZabbixAPI 实例上调用 host.create() API 方法,并提供主机详细信息:
host- 设置为hostname变量,其中包含您从 Zabbix agent 获取的主机名。interfaces- 包含运行在该主机上的 Zabbix agent 的连接详细信息。groups- 至少包含一个该主机应所属的主机组。
2. 由于 Zabbix API 会返回新创建主机的 ID,请将此 ID 保存到 host_id 变量中,以便后续使用。
3. 打印一条消息以确认主机已创建。
api.host.create(
host=hostname,
interfaces=[{
'type': 1,
'main': 1,
'useip': 1,
'ip': '127.0.0.1',
'dns': '',
'port': '10050',
}],
groups=[{'groupid': '2'}]
)
host_id = host['hostids'][0]
print(f"Host '{hostname}' created with ID {host_id}")
在 Zabbix 中创建新的监控项
创建主机后,您可以向其中添加一个监控项。
1. 为要创建的监控项定义一个唯一的键。
2. 在 ZabbixAPI 实例上调用 item.create() 方法,并提供监控项详细信息:
hostid- 设置为host_id变量,其中包含您刚刚创建的主机 ID。name- 监控项名称。key_- 设置为您刚刚定义的item_key变量。type- 设置为2(trapper 监控项),这是接收后续步骤中由脚本发送的值所必需的。value_type- 设置为3(无符号数值),即此监控项存储的数据类型。
3. 由于 Zabbix API 会返回新创建监控项的 ID,请将此 ID 保存到 item_id 变量中,以便后续使用。
4. 打印一条消息以确认监控项已创建。
item_key = 'app.myservice.heartbeat'
item = api.item.create(
hostid=host_id,
name='App heartbeat',
key_=item_key,
type=2,
value_type=3,
)
item_id = item['itemids'][0]
print(f"Item '{item_key}' created with ID {item_id}")
向主机发送值
现在您已经创建了主机和监控项,可以向其发送数据了。
1. 导入 time 类,并在发送数据前等待几秒钟。
这样可以确保 Zabbix 已完全处理您新建的主机和监控项。
2. 从 zabbix_utils 导入 Sender 类。
该类的工作方式类似于 Zabbix sender,可让您的脚本向 Zabbix 发送数据。
3. 创建一个 Sender 实例,连接到本地 Zabbix 服务器 127.0.0.1 的 10051 端口。
4. 在 Sender 实例上调用 send_value() 方法,向主机的监控项发送一个值,并提供以下详细信息:
hostname- 设置为hostname变量,其中包含您从 Zabbix agent 获取的主机名。item_key- 设置为您之前在脚本中刚定义的item_key变量。1- 要发送的值。
4. 打印一条消息以确认该值已发送。
import time
time.sleep(10)
from zabbix_utils import Sender
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Sender response: {response}")
此代码成功运行后,您应会看到一条成功消息,表明 Zabbix 已接收到您发送的值:
Sender response: {"processed": 1, "failed": 0, "total": 1, "time": "0.000151", "chunk": 1}
现在,您还可以查看 Zabbix Web 界面(监测 > 最新数据)以查看该值。
完整脚本
下面是整合了所有步骤的完整脚本:获取主机名、使用 Zabbix API 创建主机和监控项,以及向 Zabbix 发送数据。
import time
from zabbix_utils import Getter, ZabbixAPI, Sender
# 从 Zabbix agent 获取主机名
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
# 连接并登录到 Zabbix API
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# 在 Zabbix 中创建主机
host = api.host.create(
host=hostname,
interfaces=[{
'type': 1,
'main': 1,
'useip': 1,
'ip': '127.0.0.1',
'dns': '',
'port': '10050',
}],
groups=[{'groupid': '2'}]
)
host_id = host['hostids'][0]
print(f"主机 '{hostname}' 已创建,ID 为 {host_id}")
# 在 Zabbix 中创建监控项
item_key = 'app.myservice.heartbeat'
item = api.item.create(
hostid=host_id,
name='App heartbeat',
key_=item_key,
type=2,
value_type=3
)
item_id = item['itemids'][0]
print(f"监控项 '{item_key}' 已创建,ID 为 {item_id}")
# 从 API 登出
api.logout()
# 等待 Zabbix 处理新主机
time.sleep(10)
# 向主机发送值
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Sender 响应:{response}")