作者:张思德,Zabbix社区签约专家,2017-2022Zabbix中国峰会讲师
前言
Zabbix版本迭代很快,而且每个版本都会有很多新特性,有时有一个不起眼的小的更新却造成很多老司机翻车,以下主要介绍Zabbix几个常见的知识点。
密码重置
在使用Zabbix 的过程中由于默认密码过于简单,往往会修改密码并配置为自动登录,时间一长往往忘记密码,造成无法登录的情况,这种情况就需要重置密码。Zabbix 的密码存储在数据库中,可通过数据库重置。在Zabbix5.0版本之前,Zabbix 用户密码使用 MD5 加密方式存储,从 5.0 版本开始使用 Bcrypt 加密方式。
BCrypt 是一种跨平台的文件加密工具,使用的是布鲁斯·施内尔在 1993 年发布的 Blowfish 加密算法。它是一种可生成随机盐值的单向 Hash 加密算法,Hash 值中包含了上一步生成的盐值(22 个字符)的不可逆加密算法。同一种明文,每次被加密后的密文都不一样,并且不可反向破解生成明文,破解难度非常大。大大提升了系统的安全性,因此要重置 5.0 以后版本的用户密码就需要注意,不能再使用 MD5 加密方式生成的密码。 可按照以下方法对Zabbix 的 Admin 用户密码进行重置. MySQL 数据库
代码语言:javascript复制mysql -uzabbix -p
use zabbix;
update users SET passwd='$2y$10$92nDno4n0Zm7Ej7Jfsz8WukBfgSS/U0QkIuu8WkJPihXBb2A1UrEK' where userid=1;
quit;
PostgreSQL
代码语言:javascript复制su - postgres
psql
c zabbix;
update users SET passwd='$2y$10$92nDno4n0Zm7Ej7Jfsz8WukBfgSS/U0QkIuu8WkJPihXBb2A1UrEK' where userid=1;
、q
重置后即可使用账号:Admin 密码:Zabbix 登录系统,注意账号 Admin 的 A 为大写,区分大小写。
API 调用
Zabbix提供丰富且完备的API,使用Grafana对接Zabbix API 实现炫酷的大屏及图表是个很流行的操作。在使用Grafana对接Zabbix 数据时需要填写 zabbix 的 API 地址,这一步很多人找不到和无法验证的问题。zabbix的API地址为Zabbix的访问地址 api_jsonrpc.php,如果不确定可以使用curl命令判断.
代码语言:javascript复制curl -v http://172.16.66.70:8080/api_jsonrpc.php
使用一个能打开Zabbix 页面的地址,后面加 api_jsonrpc.php,
代码语言:javascript复制* About to connect() to 172.16.66.70 port 8080 (#0)
* Trying 172.16.66.70...
* Connected to 172.16.66.70 (172.16.66.70) port 8080 (#0)
> GET /api_jsonrpc.php HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 172.16.66.70:8080
> Accept: */*
>
< HTTP/1.1 412 Precondition Failed
< Server: nginx/1.18.0
< Date: Mon, 07 Nov 2022 15:43:59 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: Content-Type
< Access-Control-Allow-Methods: POST
< Access-Control-Max-Age: 1000
<
* Connection #0 to host 172.16.66.70 left intact
如果看到 HTTP/1.1 412 Precondition Failed 则表示此地址正确,可填入 granfa 插件里的 api 地址。返回其他错误,表示 api 地址填写错误,可尝试添加/zabbix/的后缀比如http://172.16.66.70:8080/zabbix/api_jsonrpc.php 从Zabbix 5.4 开始可在页面上新建 API Token
同时支持配置过期时间、启用、禁用等操作,添加后 Token 只显示一次,建议复制并保存到本地。
调用 API 时在 Auth 字段直接带入 Token 即可,
代码语言:javascript复制{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"countOutput":"1",
"filter": {
"state": "1"
}
},
"id": 2,
"auth": "4fa51a0c8033b452857bf06c35e41295dcb0ee22506b768edb0720d0093e71f2"
}
无需使用账号和密码进行登录后再获取 Token,规范和简化了 Token 管理。
远程命令
Zabbix支持通过ZabbixServer、Zabbix Proxy、Zabbix Agent 在主机上执行自定义命令,利用此特性配合 Trigger Action 可实现简单的故障自愈功能。在Zabbix6.0 之前版本,直接在 Action 的 Operations 选项卡里填入对应的远程命令即可,从 6.0 版本开始,需要先在 Administrators—Scripts 里添加脚本,才能在 Operations 选项卡里选中。
此功能加强了对脚本的统一管理,增加了脚本的复用性。可以把常用的一些脚本添加进来,
使用时选择即可,无需再次添加。
默认情况下,远程命令都以系统Zabbix用户来执行,如部分命令需使用root权限,需要使用visudo命令为Zabbix 用户配置对应命令的 sudo 执行权限。例如:为 zabbix 用户配置重启 apache 服务的权限:
代码语言:javascript复制# allows 'zabbix' user to restart apache without password.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
为安全考虑,建议配置指定命令即可,不配置为 ALL。 如命令在界面上显示已执行,实际却未执行,建议配置LogRemoteCommands参数或调整日志级别为Debug模式,查看具体日志进行分析解决。