Zabbix-gnomes 是一组 Zabbix 的开源脚本工具集合,它使用 Python 对 Zabbix API 的进行了分装,使得日常的大部分操作可以通过命令行完成,非常方便。最新的 Zabbix-gnomes 代码可以在 Github 上获取到。
所有 zabbix-gnomes 相关的工具,都可以用 -h/–help 调用获得帮助。
API工具:
zapi.py
– 交互式 Zabbix API客户端。
相关历史:
zgethistory.py
– 从历史记录获取一个itemid的值。zhinvswitcher.py
– 在主机( 群组组) 上切换 inv。zgetinventory.py
– 以CSV格式打印主机清单。zhostupdater.py
– 更新主机属性。zhitemfinder.py
– 查找主机上的项目。zgethistory.py
– 从历史记录( 不支持趋势) 获取项值。zhgraphfinder.py
– 查找在Zabbix主机上配置的图形。zgetgraph.py
– 从Zabbix前端( 需要用户前端访问) 下载一个图形. PNG 并保存它。zghostfinder.py
– 查找hostgroup中的成员主机。zhostfinder.py
– 根据搜索字符串在Zabbix中查找主机。zhostupdater.py
– 更新主机属性。zhproxyfinder.py
– 为Zabbix主机查找配置的代理。ztmplimport.py
– 将 xml 模板导入 Zabbix。zhtmplfinder.py
– 查找Zabbix主机的链接模板。zthostfinder.py
– 查找链接到模板的主机。zthtmllinker.py
– 将主机( 群组组)的链接链接到模板列表。zthtmlunlink.py
– 将主机( 群组组) 与模板列表断开。zhtrigfinder.py
– 在主机上查找触发器。ztrigswitcher.py
– 将触发器切换为已经启用或者discabled状态。zhostupdater.py
– 更新主机属性。zeventfinder.py
– 基于过滤器(。包含tail -f
模式) 查找事件。zgetevent.py
– 获取eventIds的详细信息,包括和ack警报操作。zeventacker.py
– 基于eventIds确认事件。
配置 Zabbix-gnomes
这些程序可以使用 .ini 风格的配置文件,来获取所需的API连接信息。它的配置文件默认为 $HOME/.zbx.conf,样例如下:
代码语言:javascript复制[Zabbix API]
username=debian
password=Debian-CN-Debian.cn
api=http://aws-zabbix-1/zabbix/
no_verify=true
将 no_verify
设置为 true
将在使用 https 时禁用 tls/ssl 证书验证。
脚本依赖 pyzabbix、pillow 模块:
代码语言:javascript复制pip install pyzabbix pillow
用法样例
将主机 www.debian.cn 的一个月的CPU负载数据保存为 ~/jan.png,具体时间跨度是 2019年01月至1月31日:
代码语言:javascript复制graphid=$(./zhgraphfinder.py -e p-hsg-mysql-2 | grep 'CPU load' | cut -d ':' -f 1)
./zgetgraph.py -s $(date --date 'jan 1 2019' %s) -t 2678400 -f ~/jan.png $graphid
输出的图形如下:
使用 zproxyfinder.py 在 zabbix_sender 脚本中使用恰当的 Zabbix 代理,
代码语言:javascript复制zabbix_sender -k $ITEMKEY -o $ITEMVALUE -s $HOSTNAME -z $(zhproxyfinder.py $HOSTNAME)
使用 zhtmpllinker.py 将三个模板链接到指定的 hostgroup 中所有主机:
代码语言:javascript复制./zhtmpllinker.py -t "Template App Apache" "Template App MySQL" "Template OS Linux" -G "LAMP Servers"
使用 zhtmplunlink.py 将模板与 hostgroup 中的所有主机关联:
代码语言:javascript复制./zhtmplunlink.py -G "Webservers" -t "Template App MySQL"
从模板目录中,导入所有的 xml 模板,并详细显示导入过程:
代码语言:javascript复制./ztmplimport.py -v -C./templates/*.xml
从 itemid 为 12345 的监控项的最新项目值:
代码语言:javascript复制./zgethistory.py 12345 -C 1
从历史记录中查询一个监控项的值,并指定气质时间段:
代码语言:javascript复制./zgethistory.py -s $(date --date 'jan 1 2014' %s) -t 7200 -e 1030
禁用主机名为 Google DNS 的主机上的,”Unavailable by ICMP”触发器:
代码语言:javascript复制./ztrigswitcher.py -D $(./zhtrigfinder.py -s "Unavailable by ICMP" -n "Google DNS")
在主机 webserver 上计算活动触发器的数目:
代码语言:javascript复制./zhtrigfinder.py -A "Webserver" | wc -l
switch 对 hostgroup 中所有主机的库存模式:
代码语言:javascript复制./zhinvswitcher.py -G"Linux Servers" -m manual
从 Zabbix 的资产清单中,列出所有的主机:
代码语言:javascript复制./zhinvswitcher.py --all-hosts
在指定的 hostgroup 中查找与以 mongo 开头的,名称匹配的主机列表:
代码语言:javascript复制./zghostfinder.py "mongodb of aws-sg1" | grep -i ^mongo
将指定主机的,可用内存的最后一个监控值打印出来:
代码语言:javascript复制./zgethistory.py -C 1 $(./zhitemfinder.py -k 'vm.memory.size[available]' -n Webserver)
对主机名中匹配字符串 zabbix 的所有受监控主机执行搜索,列出主机名:
代码语言:javascript复制./zhostfinder.py -m -S zabbix
从主机资产组中,以主机组为维度,按照指定关键字查询,生产一个 csv 文件:
代码语言:javascript复制./zgetinventory.py -G "Zabbix Servers" -F "os" "vendor" "contact" > report.csv
将主机名为 web001 的主机,名称更新为 webserver:
代码语言:javascript复制./zhostupdater.py web001 -V webserver
启用主机 web001,应用宏 {$APACHEPROC} 并更新资产表中的指定字段:
代码语言:javascript复制./zhostupdater.py web001 -E -M apacheproc=15 -I software_app_a="Apache"
查询最近一个小时内的,某主机组中的所有问题事件(限于 100个事件):
代码语言:javascript复制./zeventfinder.py -P -t 3600 -G 'Linux Servers'
使用指定的确认消息,来确认 三个事件:
代码语言:javascript复制./zeventacker.py -m"Power outage" 6578 6689 6590
在三个事件上打印详细信息,包括触发注释,操作和确认:
代码语言:javascript复制./zgetevent.py -ACL 6578 6689 6590
确认指定主机组中的主机上的所有的问题事件:
代码语言:javascript复制./zeventacker.py -m 'Foobar with Fabric :-(' $(./zeventfinder.py -i -P -t 900 -G 'Linux servers')
所有主机的Zabbix触发器事件:
代码语言:javascript复制./zeventfinder.py -L 10 --all-hosts -f
组合命令样例,查询受监控主机中,某一类主机的指定key值的最新状态:
代码语言:javascript复制for i in $(./zhostfinder.py -m -S mysql); do echo -n $i ; ./zgethistory.py -C 1 $(./zhitemfinder.py -k 'net.if.in[eth0]' -n $i) ; done
使用 zapi.py API客户机测试Zabbix调用:
代码语言:javascript复制Logging in on 'https://zabbix.debian.cn/' with user 'Admin'.
Welcome to the interactive Zabbix API client.
zapi: z host.get(filter={"host":"Zabbix Server"})
[{u'hostid': u'1001'}]
zapi: