zabbix低级自动发现监控mysql多实例
1.低级自动发现概念
低级自动发现本身就是一个key,在这个自动发现规则中包含有很多个监控原型,这些的监控原型都是依靠于自动发现规则根据各种过滤器最后匹配到的结果进行监控
低级自动发现经常适用于在同一台机器上有很多重复的监控项,人工操作非常繁重,这时候就可以配置一个低级自动发现,将自动发现做成模板,让对应的主机进行链接,经过一段时间的扫描后会自动的加入到监控中
低级自动发现的一个重中之重就是以json格式去取值
低级自动发现的原理就是依靠生成的json文件,定义监控原型,再配合其他监控项,自动把监控项加入到zabbix监控中
低级自动发现配置思路:
1.编写一个脚本将结果以json的格式输出
2.添加一个自定义监控项,用于低级自动发现使用
3.创建一个自动发现规则,需要填写我们刚刚创建的自定义监控项,最后在创建监控项原型,监控原型中的变量就是我们取的json格式中的变量值
低级自动发现本身也就是一个监控项key,监控原型就是依靠这个key做得监控低级低级自动发现监控mysql多实例的步骤
1.部署mysql多实例
2.编写取端口并输出成json格式的脚本
3.编写低级自动发现模板,配置自动发现策略
4.由于默认的mysql监控模板已经做出了很多监控项,且都是有用的,因此我们要修改默认的mysql agent配置项,增加端口传 参,这样就可以配合自动发现自动加监控项了
5.在自动发现模板添加监控原型,将获取到的端口传入默认模板,这里写监控原型的时候要写默认模板的key值
6.链接监控模板,查看监控数据
2.部署mysql多实例
2.1.安装单实例
1.安装mysql [root@192_168_81_170 ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/mysql-community-release-el7-5.noarch.rpm [root@192_168_81_170 ~]# yum install mysql-community-server 2.启动mysql [root@192_168_81_170 ~]# systemctl start mysqld [root@192_168_81_170 ~]# systemctl enable mysqld 3.修改root口令 [root@192_168_81_170 ~]# mysqladmin -u root password 123456
2.2.部署多实例
注意:mysql多实例部署好之后,想要登陆mysql,必须加上-h,否则会提示密码不对
多实例改密码:[root@192_168_81_170 scripts]# mysqladmin -u root -P 3307 -h 127.0.0.1 password 123
多实例登陆:[root@192_168_81_170 scripts]# mysql -u root -P 3307 -p123 -h 127.0.0.1
无密码登陆:[root@192_168_81_170 scripts]# mysql -u root -P 3307 -h 127.0.0.1
2.2.1.mysql3307
创建数据存储路径 [root@192_168_81_170 ~]# mkdir /data/mysql{3307,3308} 1.部署mysql3307实例 [root@192_168_81_170 ~]# vim /etc/mysql3307.conf [mysqld] datadir=/data/mysql3307/ socket=/data/mysql3307/mysql.sock port=3307 user=mysql symbolic-links=0 [mysqld_safe] log-error=/data/mysql3307/mysqld.log pid-file=/data/mysql3307/mysqld.pid 2.初始化数据库 [root@192_168_81_170 ~]# mysql_install_db --user=mysql --defaults-file=/etc/mysql3307.conf 3.启动数据库 [root@192_168_81_170 ~]# mysqld_safe --defaults-file=/etc/mysql3307.conf &
2.2.2.mysql3308
1.部署mysql3308实例 [root@192_168_81_170 ~]# vim /etc/mysql3308.conf [mysqld] datadir=/data/mysql3308/ socket=/data/mysql3308/mysql.sock port=3308 user=mysql symbolic-links=0 [mysqld_safe] log-error=/data/mysql3308/mysqld.log pid-file=/data/mysql3308/mysqld.pid 2.初始化数据库 [root@192_168_81_170 ~]# mysql_install_db --user=mysql --defaults-file=/etc/mysql3308.conf 3.启动数据库 [root@192_168_81_170 ~]# mysqld_safe --defaults-file=/etc/mysql3308.conf &
2.2.3.多实例已完成
[root@192_168_81_170 ~]# netstat -lnpt | grep mysql tcp6 0 0 :::3306 :::* LISTEN 82569/mysqld tcp6 0 0 :::3307 :::* LISTEN 88447/mysqld tcp6 0 0 :::3308 :::* LISTEN 88660/mysqld
3.编写自动探测myql实例的脚本
此步骤主要用于自动检测有多少个mysql实例,并将输出制作成json格式
[root@192_168_81_170 scripts]# vim mysql_discovery.sh #!/bin/bash mysql_port=(`netstat -lntp|awk -F "[ :]+" '/mysqld/{print$4}'|sort|uniq`) #定义数组,获取tomcat端口号 mysql_count=`netstat -lntp|awk -F "[ :]+" '/mysqld/{print$4}'|sort|uniq | wc -l` #定义端口数量 printf "{\n" #打印json格式 printf '\t'"\"data\":[" j=0 for i in ${!mysql_port[@]} #遍历数组获取索引值 do let j++ printf '\n\t\t{' printf "\"{#MYSQL_PORT}\":\"${mysql_port[$i]}\"}" #取到tomcat的端口号 if [ $j -lt $mysql_count ];then #本次的i值与tomcat端口数量做比较,如果小则输出,否则不输出 printf ',' fi done printf "\n\t]\n" printf "}\n" [root@192_168_81_170 scripts]# chmod a+x mysql_discovery.sh
4.配置zabbix-agent
我们需要修改三个配置
1.增加自动发现的配置文件
2.修改自带mysql模板的mysql.status监控项key
3.修改自带mysql模板的mysql.ping监控项key
4.1.增加端口自动发现配置文件
1.配置zabbix-agent [root@192_168_81_170 scripts]# vim /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf UserParameter=mysql_discovery[*],/etc/zabbix/scripts/mysql_discovery.sh 2.重启 [root@192_168_81_170 scripts]# systemctl restart zabbix-agent.service 3.测试 [root@zabbix-server ~]# zabbix_get -s 192.168.81.170 -k mysql_discovery { "data":[ {"{#MYSQL_PORT}":"3306"}, {"{#MYSQL_PORT}":"3307"}, {"{#MYSQL_PORT}":"3308"} ] }
4.2.修改自带的mysql status配置
此部操作是为了结合mysql自带模板,根据我们自带发现探测到的端口传入默认模板中
[root@192_168_81_170 scripts]# !vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -uroot -P$2 -h127.0.0.1 -N | awk '{print $$2}' [root@192_168_81_170 scripts]# systemctl restart zabbix-agent
测试取值
[root@zabbix-server ~]# zabbix_get -s 192.168.81.170 -k mysql.status[Uptime,3307] 7026
4.3.修改自带的mysql.ping配置
此操作是为了结合自带模板中的探测mysql是否存活的监控项,根据自动发现的端口进行传参
[root@192_168_81_170 scripts]# !vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf UserParameter=mysql.ping[*],HOME=/var/lib/zabbix mysqladmin -P$1 -h127.0.0.1 ping | grep -c alive [root@192_168_81_170 scripts]# systemctl restart zabbix-agent 测试取值 [root@zabbix-server ~]# zabbix_get -s 192.168.81.170 -k mysql.ping[3307] 1
5.创建自动发现模板
5.1.创建模板
配置—模板—创建模板
名称:Template MySQL Auto Discovery
5.2.创建应用集
配置—模板—刚刚建好的模板—应用集—创建应用集
名称:MySQL Discovery
5.3.创建自动发现规则
配置—模板—刚刚建好的模板—自动发现规则—创建自动发现规则
名称:mysql.discovery
键值:mysql_discovery
5.4.修改自带的mysql agent配置文件
此部操作是为了结合mysql自带模板,根据我们自带发现探测到的端口传入默认模板中
[root@192_168_81_170 scripts]# !vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -uroot -P$2 -h127.0.0.1 -N | awk '{print $$2}'
测试取值
[root@zabbix-server ~]# zabbix_get -s 192.168.81.170 -k mysql.status[Uptime,3307] 7026
5.5.添加监控原型
配置—模板—找到刚刚建好的模板—自动发现规则—低级自动发现
5.5.1.增加mysql存活监控原型
名称:mysql当前状态 on {#MYSQL_PORT}
键值:mysql.ping[#MYSQL_PORT]
更新间隔:1m
应用集:MySQL Discovery
5.5.2.增加mysql当前存活时长监控原型
名称:mysql当前存活时长 on {#MYSQL_PORT}
键值:mysql.status[Uptime,{#MYSQL_PORT}]
信息类型:数字
单位:uptime
更新间隔:1m
应用集:MySQL Discovery
5.5.3.增加mysql每秒数据更新条数监控原型
名称:mysql每秒数据更新条数 on {#MYSQL_PORT}
键值:mysql.status[Com_update,{#MYSQL_PORT}]信息类型:浮点数
单位:qps
更新间隔:1m
应用集:MySQL Discovery
5.5.4.增加mysql慢日志条数监控原型名称:mysql慢日志条数 on {#MYSQL_PORT}
键值:mysql.status[Slow_queries,{#MYSQL_PORT}]
信息类型:数字
更新间隔:1m
应用集:MySQL Discovery
5.5.5.增加mysql每秒数据查询条数监控原型
名称:mysql每秒数据查询条数 on {#MYSQL_PORT}
键值:mysql.status[Com_select,{#MYSQL_PORT}]信息类型:浮点数
单位:qps
更新间隔:1m
应用集:MySQL Discovery
5.5.6.增加mysql每秒数据回滚条数监控原型
名称:mysql每秒数据回滚条数 on {#MYSQL_PORT}
键值:mysql.status[Com_rollback,{#MYSQL_PORT}]
信息类型:浮点数
单位:qps
更新间隔:1m
应用集:MySQL Discovery
5.5.7.增加mysql每秒查询监控原型
名称:mysql每秒查询 on {#MYSQL_PORT}
键值:mysql.status[Questions,{#MYSQL_PORT}]
信息类型:浮点数
单位:qps
更新间隔:1m
应用集:MySQL Discovery
5.5.8.增加mysql每秒数据插入条数监控原型
名称:mysql每秒数据插入条数 on {#MYSQL_PORT}
键值:mysql.status[Com_insert,{#MYSQL_PORT}]
信息类型:浮点数
单位:qps
更新间隔:1m
应用集:MySQL Discovery
5.5.9.增加mysql每秒数据删除条数监控原型
名称:mysql每秒数据删除条数 on {#MYSQL_PORT}
键值:mysql.status[Com_delete,{#MYSQL_PORT}]信息类型:浮点数
单位:qps
更新间隔:1m
应用集:MySQL Discovery
5.5.10.增加mysql每秒数据提交条数监控原型
名称:mysql每秒数据提交条数 on {#MYSQL_PORT}
键值:mysql.status[Com_commit,{#MYSQL_PORT}]
信息类型:浮点数
单位:qps
更新间隔:1m
应用集:MySQL Discovery
5.5.11.增加mysql每秒发送的字节数监控原型
名称:mysql每秒接收的字节数 on {#MYSQL_PORT}
键值:mysql.status[Bytes_sent,{#MYSQL_PORT}]
信息类型:浮点数
单位:Bps
更新间隔:1m
应用集:MySQL Discovery
5.5.12.增加mysql每秒接收的字节数监控原型
名称:mysql每秒接收的字节数 on {#MYSQL_PORT}
键值:mysql.status[Bytes_received,{#MYSQL_PORT}]
信息类型:浮点数
单位:Bps
更新间隔:1m
应用集:MySQL Discovery
5.5.13.增加mysql运算数监控原型
名称:mysql每秒运算数 on {#MYSQL_PORT}
键值:mysql.status[Com_begin,{#MYSQL_PORT}]
信息类型:浮点数
单位:Bps
更新间隔:1m
应用集:MySQL Discovery
5.6.增加mysql状态触发器
名称:mysql is down on {#MYSQL_PORT}表达式:{Template MySQL Auto Discovery:mysql.ping[{#MYSQL_PORT}].last()}=0
生成表达式的时候可以选择监控原型找到原型后在设置表达式
5.7.增加图形
5.7.1.增加mysql bandwidth图形
名称:MySQL bandwidth on {#MYSQL_PORT}
监控项:点添加原型,找到接收、和发送的监控项
5.7.2.增加mysql operations图形
名称:MySQL operations on {#MYSQL_PORT}
监控项:增删改查、提交、回滚、运算的监控项
5.8.模板制作完成
6.主机链接模板
6.1.链接模板
主机—模板—添加模板—选择mysql自动发现模板
6.2.成功自动添加监控
监控项全部启用
6.3.查看最新数据
数据已更新
6.4.查看图形
全部生效
7.扩展自动发现过滤器
7.1.增加表达式
管理—一般—右上角下拉选择正则表达式—新的表达式
名称:mysql筛掉3306端口
字符串包含:^3306$
7.2.应用表达式
找到自动发现规则—过滤器
{#MYSQL_PORT} 匹配 @mysql筛掉3306端口