Zabbix低级主动发现之MySQL多实例
接上篇:Zabbix自动发现与主动注册
在一个agent安装一个maraidb
拷贝一个原始配置文档并且修改配置用于开启多实例
按照配置文件初始化数据库
1 2 | mysql_install_db - - user = mysql - - defaults - file = / etc / my3307.cnf mysql_install_db - - user = mysql - - defaults - file = / etc / my3308.cnf |
启动
1 2 | mysqld_safe - - defaults - file = / etc / my3307.cnf & mysqld_safe - - defaults - file = / etc / my3308.cnf & |
定义一个脚本/etc/zabbix/zabbix_agentd.d/discover_mysql.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/bin/bash #mysql low-lever discovery res = `netstat - lntp|grep mysql |awk - F "[ :]+" '{print $5}' ` port = ($res) printf '{' printf '"data":[' for key in ${!port[@]} do if [[ "${#port[@]}" - gt 1 && "${key}" - ne "$((${#port[@]}-1))" ]];then printf '{' printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}," else [[ "${key}" - eq "((${#port[@]}-1))" ]] printf '{' printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}" fi done printf ']' printf '}' |
手动执行脚本
1 2 3 | sh discover_mysql.sh 输出为 { "data" :[{ "{#MYSQLPORT}" : "3306" },{ "{#MYSQLPORT}" : "3307" },{ "{#MYSQLPORT}" : "3308" }]} |
判断是不是json格式使用python里面的一个工具(能排版出来就是json)
1 | sh discover_mysql.sh |python - m json.tool |
自定义key去调用脚本/etc/zabbix/zabbix_agentd.d/discover_mysql.conf
1 | UserParameter = discover_mysql, sh / etc / zabbix / zabbix_agentd.d / discover_mysql.sh |
重启zabbix agent
在server上面查看
1 | zabbix_get - s 192.168 . 80.160 - k discover_mysql |
报错
因为netstat -anlp加了参数p需要root权限,而在server上面获取使用zabbix用户执行
在agent加修改
1 | chmod u + s `which netstat` |
取值正确了
在web创建模板 本次直接在主机上面创建discover规则
创建items的原型
修改配置文件/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
1 | UserParameter = mysql.status[ * ],echo "show global status where Variable_name='$2';" | HOME = / var / lib / zabbix mysql - uroot - p123456 - h127. 0.0 . 1 - P $ 1 - N | awk '{print $$2}' |
这里把密码固定了
设置多实例的密码
1 2 3 | mysqladmin - h 127.0 . 0.1 - uroot password '123456' - P3306 mysqladmin - h 127.0 . 0.1 - uroot password '123456' - P3307 mysqladmin - h 127.0 . 0.1 - uroot password '123456' - P3308 |
修改完可以登录验证一下
重启zabbix agent
在zabbix server验证
1 | zabbix_get - s 192.168 . 80.160 - k mysql.status[ 3306 ,Bytes_sent] |
创建items原型(可以参考系统自定义的mysql模板)这里传递的两个参数第一个是端口号使用定义的变量代替
添加完克隆多个,为了区分不同端口名称可以加端口变量
创建完毕就自动发现了
下一篇:Zabbix分布式监控
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!