告别重复造轮子: 抄官方的作业完成工作任务
前言
笔者在工作中维护着一个内部系统, 业务量不大, 但存放的都是内部的敏感数据, 也就一直没有部署到云平台. 同时因为是对内的数据库, 对高可用性没有严苛的要求, 只是考虑到数据的完整性, 便顺带做了一个主从同步. 从节点不参与业务, 纯粹是作为主节点的数据备份, 防止丢失.
前阵子看了一眼这个无人问津的从节点, 才发现主从同步已经停止了小半年, 所幸主节点一直都正常运行, 不然笔者的年终奖都要打个折了(笑).
笑完之后, 便想着还是得把主从同步的状态监控一下.
制定方案
系统以及程序版本
项目 | 版本 |
---|---|
Zabbix Server | 5.0.6 |
Zabbix Agent | 5.0.6 |
MySQL Server | 5.7.29-log MySQL Community Server (GPL) |
CentOS | 7.6.1810 |
需求分析
如果只是为了监控从节点的同步状态, 那只需要监控show slave status
中的两个字段就可以了:
1 | mysql> show slave status \G |
草案
表面上看, 要想以最省事的方式完成这个需求, 比把大象塞进冰箱稍微复杂一点, 大致的步骤如下:
- 写一个shell脚本, 通过mysql cli获得字符串返回
- 修改zabbix agent的配置文件, 通过UserParameter创建新的zabbix key, 再关联上这个shell
- 在zabbix web中创建相应的监控item, 定期执行这个key
- 根据item的返回, 设置一个触发器, 当目标字段的返回值不是Yes, 即告警.
扩展
显然, 上面是一个可行的方案, 对笔者来说, 甚至是驾轻就熟. 但如果我们要加入更多的考虑:
- 后面可能还要再监控其他的性能指标
- 这个方案能不能方便地复用在其他服务器上
- 移植的时候, 必然会陷入调参的烦恼中, 最起码IP地址, 端口, 用户名都会不一样.
- 所以我要制定一个变量字典, 把常用参数作为变量去引用
- 我还要梳理出需要关注的监控项
- 那监控可视化也得做一个吧
- bla bla bla
再引出灵魂拷问:
当我增加需求的时候, 必须要不断地循环上面的步骤吗?
到底要迭代多少次才能打磨出一个让自己满意的方案?
想想都觉得累, 我要找一个大而全的方案.
模板(Template)
大而全, 那自然就是监控模板了, 说到监控模板, 我为什么不看看有没有现成的方案:
Template DB MySQL by Zabbix agent
我就知道, 一定有.
实施步骤
基础前提
当要完成这个需求的时候, 笔者自然默认Zabbix Agent, 以及MySQL环境和相应的mysql
, 和mysqladmin
都已经完成调试了, 就不赘述了.
MySQL创建用户
为了安全, 我们需要创建一个权限刚好够用的账号:
1 | CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '<password>'; |
为Zabbix Agent创建MySQL客户端配置文件
默认情况下, Zabbix的HOME是/var/lib/zabbix
, 也可以通过通过查看进程状态确认:
1 | [root@rbtnode1 ~]# ps -ef | grep -i zabbix |
创建/var/lib/zabbix/.my.cnf
, 当zabbix调用mysql客户端的时候, 默认使用这个文件获取连接参数. 文件内容:
1 | [client] |
在Zabbix Web导入MySQL监控模板
首先确认是否存在旧版本的MySQL监控模板, 如果有, 则删除.
如果你的旧版本监控模板已经在使用中, 那你就不用看我的文章了.
在Zabbix的官方git中下载正确版本的MySQL监控模板, 并通过ZabbixWeb导入, 下载链接: template_db_mysql_agent.xml
为Zabbix Agent添加UserParameter
下载template_db_mysql.conf, 并在Zabbix Agent的配置文件中完成include即可. 在笔者的环境中, 操作结果如下:
1 | [root@rbtnode1 zabbix_agentd.d]# pwd |
添加监控模板所需要的宏变量
按照README.md的要求, 设置如下:
为Host绑定这个新创建的Template
如题
测试验收
完成上面的设置后, 重启zabbix agent, 在zabbix server中可以向agent发起测试:
1 | [root@zabbix-server ~]# zabbix_get -s 192.168.255.104 -p 10050 -k mysql.ping[192.168.255.104,3306] |
业务逻辑
如果仔细观察这个官方提供的Template, 不难看出当中大量使用了自动发现以及MasterItem的功能, 再通过Macros完成个性化设置, 整个方案为用户提供了极大的移植便利.
而且, 整个监控过程只依赖了mysql客户端, 并没有额外的第三方工具或者是脚本操作, 所有数据的获取都是通过mysql
或者是mysqladmin
完成.
大部分的监控数据都通过自动发现以及MasterItem依赖完成, 在自动发现的同时, 也会把需要关注的指标设置上触发器, 而触发器的告警阈值则是通过Macros完成设置.
连一些必要的监控图都会自动创建好.
具体关于Template, Discovery, ItemPrototype, MasterItem, DependentItem这些功能, 在官方文档都有详细解释:
反过来说, 如果想深入理解Zabbix这些复杂功能, 按照本文的思路配置一个MySQL的监控模板, 把Zabbix Web中各项设置和实际作用联系起来, 自然就能透彻理解了.
后记
本来写了一些关于为什么我这么喜欢参考官方文档的话, 但写完之后发现, 抄官方的作业其实本来就是正常操作, 似乎也没什么好说的. (笑)
也知道随着云原生概念的流行, 生产环境都会倾向部署到云平台上, 也不需要自己另外搭建监控了. 但对于一些特殊的场景, 自建监控应该还是有一点点价值.
最近荣升奶爸, 生活和工作也越来越忙, 只好匆匆水一篇.
2023年第一次更新.