Zabbix的通过API是个好东西,但文档写得像天书。通过我花了三个下午才搞明白怎么用Python调它——不是通过调不通,是通过认证方式绕。你直接拿requests.post去怼`api_jsonrpc.php`,通过不带token,通过它甩你一脸`-32700`。通过得先发一个`user.login`请求,通过拿到那段加密的通过sessionid,再塞进后续请求的通过header里。就这么个流程,通过文档里写得不直白,通过害我白折腾半天。通过
我写了个小脚本,通过监控公司测试服务器的通过CPU和内存。核心就两个函数:一个负责登录,一个负责取数据。登录函数简单,把用户名密码丢进`params`,返回的`result`就是token。取数据得拼`item.get`的请求,filter里写清楚host名和key,比如`system.cpu.util[,idle]`这种。返回的是一堆字典,里面藏着`lastvalue`,直接取出来用就行。
有个坑得提——Zabbix的API版本跟你的服务器版本得对得上。我一开始用的5.0的API去调6.4的服务器,报错`Invalid params`,跟我玩文字游戏。后来查了官方文档,发现6.4的`host.get`里`output`参数写法变了,得用`["hostid", "name"]`这种数组形式,不能直接写`"extend"`。改完立马通了,那感觉就像钥匙终于捅对了锁眼。
实际写代码时,我建议你把请求封装成一个类。别学我一开始写成散装函数,调多了自己都乱。类里放个`_call`方法,统一处理URL、header和超时。每次请求都带`Content-Type: application/json`,超时设10秒,防止服务器卡死拖垮你的脚本。还有,token有效期默认一小时,长任务得记得重新登录,或者干脆用`user.checkAuthentication`验证一下再干活。
说个具体的例子。我要拉最近一小时的CPU使用率,画个折线图。请求得设`history.get`,参数里写`history`为0(代表数值型),`time_from`和`time_till`用时间戳。返回的数据可能上千条,别傻乎乎全打印到终端——存成CSV或者直接扔给matplotlib画图都行。我自己的做法是存进SQLite,方便后续查历史趋势。
折腾完这套,你会发现Zabbix的API其实挺强大。它不只是拿监控数据,还能创建主机、触发报警、管理模板。用Python写个批量添加主机的脚本,能省你半天手工点的功夫。但别指望文档能教你全部——多去社区翻翻帖子,或者干脆抓包看看前端是怎么调API的,那才是最好的学习材料。
最后提醒一句:别把API密码硬编码在脚本里。用环境变量或者配置文件,不然代码传到GitHub上,等于把服务器钥匙挂门口。这我吃过亏,还好及时发现撤回了。