写点什么

Zabbix agent2 自定义 SQL 监控和告警实施指南: 针对 TiDB 数据库

  • 2025-01-17
    北京
  • 本文字数:2249 字

    阅读完需:约 7 分钟

作者: yangzhj 原文来源:https://tidb.net/blog/70f2d854

文章背景

客户有自定义 sql 监控告警的需求,该需求需要在 TiDB 数据库内执行 自定义的 sql , 然后将 sql 执行结果作为告警消息进行推送。因为当前客户采用 Zabbix 6.0.28 做为统一的告警服务平台,因此需要优先考虑 Zabbix 是否有相关的组件或插件满足需求。


经查询官网,Zabbix agent2 插件通过自定义配置 mysql.custom.query 来支持上述需求,该配置要求 Zabbix 最低版本为 6.0.21。


该插件的相关参考链接如下:


https://www.zabbix.com/documentation/6.0/zh/manual/appendix/config/zabbix_agent2


https://www.zabbix.com/documentation/6.0/en/manual/config/items/itemtypes/zabbix_agent/zabbix_agent2#mysql


https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/src/go/plugins/mysql

实施步骤

实施的环境相关信息:Zabbix 6.2 + CentOS Linux release 7.6+TiDB 6.5.7。


以下是整个实施步骤。

Zabbix agent2 端安装配置

下载和安装 Zabbix agent2

使用如下链接下载 Zabbix agent2 及相关软件包:


#查看主机操作系统版本cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) cd /opt#下载依赖包wget https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-plugin-postgresql-6.0.28-release1.el7.x86_64.rpm --no-check-certificatewget https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-plugin-mongodb-6.0.28-release1.el7.x86_64.rpm --no-check-certificate#下载zabbix-agent2软件包wget https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-6.0.28-release1.el7.x86_64.rpm --no-check-certificate#安装依赖包rpm -ivh zabbix-agent2-plugin-mongodb-6.0.28-release1.el7.x86_64.rpmrpm -ivh zabbix-agent2-plugin-postgresql-6.0.28-release1.el7.x86_64.rpm #安装缺失依赖包,不同的操作系统,缺失依赖包可能不同yum install pcre2#安装zabbix-agent2软件包rpm -ivh zabbix-agent2-6.0.28-release1.el7.x86_64.rpm
复制代码

配置 Zabbix agent2

修改配置文件 /etc/zabbix/zabbix_agent2.conf 如下内容, 并保存:


#以下参数的值为zabbix server地址Server=xx.x.xxx.230
复制代码

配置 Zabbix agent2 mysql 插件

修改配置文件 /etc/zabbix/zabbix_agent2.d/plugins.d/mysql.conf 如下内容, 并保存:


Plugins.Mysql.CustomQueriesPath=/etc/zabbix/mysql/sql
复制代码

配置自定义 sql 文件

特殊说明:


因在 zabbix server 端配置了预处理,因此所有的自定义 sql 文件中的 sql 语句要求查询中必须带有


GROUP_CONCAT 函数,且结果列别名必须为 data,具体见示例 sql。


#创建保存自定义sql文件的目录mkdir -p /etc/zabbix/mysql/sqlcd /etc/zabbix/mysql/sql#创建 测试自定义sqlvi long_sql.sql#写入如下内容,并保存SELECT GROUP_CONCAT(CONCAT_WS('_',INSTANCE,ID,USER,DB,COMMAND,DIGEST,TxnStart,TIME) ,'\n')as data FROM information_schema.cluster_processlist where COMMAND <>'Sleep' and TIME > ?
复制代码

启动 Zabbix agent2

#启动Zabbix agent2systemctl start zabbix-agent2#查看服务状态systemctl status zabbix-agent2● zabbix-agent2.service - Zabbix Agent 2   Loaded: loaded (/usr/lib/systemd/system/zabbix-agent2.service; disabled; vendor preset: disabled)   Active: active (running) since Mon 2025-01-13 16:49:50 CST; 7s ago Main PID: 3522619 (zabbix_agent2)    Tasks: 8   Memory: 3.4M   CGroup: /system.slice/zabbix-agent2.service           └─3522619 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf
复制代码

Zabbix 服务端配置

添加主机

主机添加监控项

监控项创建时需要按照一定的格式配置监控项的键值,键值格式和内容如下:


mysql.custom.query[tidb主机:端口,只读账户,账户密码,自定义sql文件名(无文件名后缀),SQL变量值]
复制代码


只读账户需预先创建,并且有自定义 sql 的执行权限,用户创建及授权不再赘述。


图例如下:


监控项添加预处理

图例如下:




函数内容如下:


/** * get_result 函数说明 * 解析输入的 JSON 字符串,并根据解析结果返回特定值。 *  * 如果解析后的数组非空且第一个元素的 data 属性为空字符串,则返回 'ok'。 * 如果解析后的数组非空且第一个元素的 data 属性非空字符串,则返回该 data 属性值。 * 如果解析后的数组为空,则返回 'ok'。 *  * @param {string} input_str - 输入的 JSON 字符串,预期是一个数组的 JSON 表示。 * @returns {string|any} - 根据上述条件返回 'ok' 或数组第一个元素的 data 属性值。 */function get_result(input_str) {    var json_output = JSON.parse(input_str);    var result_str = json_output;    var result_value;
if (result_str.length > 0) { result_value = String(result_str[0].data) === '' ? 'ok' : result_str[0].data; } else { result_value = 'ok'; }
return result_value;}return get_result(value);
复制代码

主机添加触发器

图示如下:



验证告警

验证告警触发

登陆数据库,执行验证 sql:


mysql> select sleep(200);
复制代码


查看监控项最新数据,显示 sql 执行结果, 符合预期


图示如下:



查看触发器状态,已经触发告警。


图示如下:


验证告警恢复

等待 select sleep(200) 执行完成:


查看监控项最新数据,显示 sql 执行结果, 符合预期


图示如下:



查看触发器状态,告警已经恢复。


图示如下:



发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
Zabbix agent2 自定义SQL监控和告警实施指南:针对TiDB数据库_监控_TiDB 社区干货传送门_InfoQ写作社区