如何使用Zabbix无需在数据库主机安装代理即可监控Microsoft SQL Server
无Agent实现Zabbix监控SQL Server指定字段异常告警方案
实现原理
直接用Zabbix原生的ODBC监控能力,从Zabbix Server或Proxy节点远程连接MSSQL数据库采集数据,不需要在数据库服务器上安装任何Agent程序,完全满足安全要求。
前置准备
- 在Zabbix Server(如果用Proxy监控就对应Proxy节点)上安装unixODBC工具和SQL Server官方ODBC驱动
- RHEL/CentOS 系列执行:
yum install unixODBC msodbcsql18 - Debian/Ubuntu 系列执行:
apt install unixodbc msodbcsql18
如果msodbcsql18安装失败,也可以替换为17版本,后续配置对应修改驱动名称即可
- RHEL/CentOS 系列执行:
- 在待监控的MSSQL实例上创建最小权限的专用监控账号,只给T1表的查询权限,避免安全风险:
-- 创建登录账号 CREATE LOGIN zabbix_monitor WITH PASSWORD = '替换为你自己的强密码'; -- 切换到业务数据库 USE 你的业务数据库名称; CREATE USER zabbix_monitor FOR LOGIN zabbix_monitor; -- 仅授予T1表的查询权限 GRANT SELECT ON T1 TO zabbix_monitor;
- 确保Zabbix Server/Proxy到MSSQL服务器的数据库端口(默认1433,自定义端口改对应值)网络互通,没有防火墙拦截。
具体配置步骤
1. 配置ODBC数据源
编辑Zabbix Server/Proxy节点的/etc/odbc.ini文件,添加对应数据源配置:
[MSSQL_T1_Monitor] Driver = ODBC Driver 18 for SQL Server Server = tcp:MSSQL服务器IP,端口号 Database = 你的业务数据库名称 UID = zabbix_monitor PWD = 你设置的监控账号密码 TrustServerCertificate = yes
配置完成后执行isql -v MSSQL_T1_Monitor测试连通性,返回Connected就说明配置正常,连不上优先检查网络、驱动版本、账号密码配置。
2. Zabbix前端创建监控项
登录Zabbix前端,你可以专门新建一个虚拟主机用来管理MSSQL监控,在该主机下新建监控项:
- 名称:T1表col1最小值监控
- 类型:选择「数据库监控 → ODBC」
- 键值:
odbc.get[MSSQL_T1_Monitor,select min(col1) from T1] - 数据类型:数字(浮点型)
- 更新间隔:按你的监控频率要求设置,比如300秒即5分钟
- 用户名/密码可以留空(已经配置在odbc.ini里),也可以在这里单独填写更安全。
3. 配置告警触发器
在该监控项下新建触发器,触发器表达式设置为:last(/你建的虚拟主机名称/odbc.get[MSSQL_T1_Monitor,select min(col1) from T1])<0
告警级别按你的需求设置即可,比如警告级。
4. 配置通知规则
把你的账号添加到该触发器对应的告警接收用户组,配置好你需要的通知介质(邮件、企业微信、短信等),当T1表col1出现小于0的值时,就会自动给你发告警通知。
可选优化
如果担心频繁查询业务表对数据库造成压力,可以在MSSQL里提前写一个存储过程封装T1表的查询逻辑,Zabbix直接调用存储过程取返回值即可,进一步降低对业务库的影响。
内容的提问来源于stack exchange,提问作者malih
相关产品推荐
相关产品推荐

