zabbix是什么东西这个大家知道是什么吧?不知道?好吧以后我再写写关于zabbix的文章。zabbix是一个监控系统,并且还附带报警、报警推送功能。官网在:zabbix.com中,不过这一期不了zabbix的基本理论以及如何安装,这一期我先讲讲如何使用zabbix的自带监控模板搞定mysql的监控!
用过zabbix的人肯定会说,非常简单直接在zabbix的web管理页面上面点击配置->主机->在需要的主机上添加一个mysql模板即可,那么我肯定说:大错特错!其实添加完这个template之后,虽然模板会生效你也会看到图标。但是你看到的图标永远是这样的:
这不是出现图标了吗?请仔细看看是否有数据?其实关于mysql的监控全部要靠agent端的那个专门的脚本,将server执行后的数据传送到server中进行图标展示。
对于zabbix3.0之前那么你还得自己写一个专门的脚本,在互联网上很多我这边也会提供一个互联网上的脚本。不过对于3.0以后比如大家喜欢的3.0.3版本下载源码包即可拥有专门的脚本可以使用。这个脚本名字叫做userparameter_mysql.conf
配置userparameter_mysql.conf:
首先会到源码包将这个脚本找到后拷贝至zabbix的配置文件目录中,随后我们来配置这个配置文件:
[localadmin@ ~]$ cp zabbix-3.0.3/conf/zabbix_agentd/userparameter_mysql.conf /opt/zabbix/etc/zabbix_agentd.conf.d/ #拷贝完之后由于这个配置文件只是举例我们得稍稍进行修改,不过首先看看原文: # For all the following commands HOME should be set to the directory that has .my.cnf file with password information. # Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert]. # Key syntax is mysql.status[variable]. UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}' # Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data]. # Key syntax is mysql.size[<database>,<table>,<type>]. # Database may be a database name or "all". Default is "all". # Table may be a table name or "all". Default is "all". # Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both". # Database is mandatory if a table is specified. Type may be specified always. # Returns value in bytes. # 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N' UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive UserParameter=mysql.version,mysql -V
上面一共含有4个命令的脚本,不过将的家目录都放在/var/lib目录中。而且配置文件的第一句话说过要创建.my.cnf文件并且里面要填写账户、密码、socket文件以及登陆的主机名 | IP地址。不过得首先修改这个脚本文件随后我们在zabbix的配置文件目录中创建一个.my.cnf作为脚本执行使用的账号密码等相关信息文件(该文件比较重要权限什么的请自行设置!)
[localadmin@ ~]$ sed -i 's@/var/lib/zabbix@/opt/zabbix/etc@g' /opt/zabbix/etc/zabbix_agentd.d/userparameter_mysql.conf #使用sed命令进行对/var/lib/zabbix替换为/opt/zabbix/etc 不过如果你是rpm包安装其实这些都无所谓了! [localadmin@ ~]$ cat /opt/zabbix/etc/.my.cnf [mysql] host=localhost user=root password=your password socket=use:find / -name mysql.sock -print 进行查找 [mysqladmin] #监控脚本一共使用到两个命令所以需要再次填写你刚刚的信息。 host=localhost user=root password= socket=
关于userparameter_mysql.conf脚本已经配置完毕,接下来我们设置一下zabbix_agent的配置文件。
修改zabbix_agent配置文件:
配置文件只需添加Include=/opt/zabbix/etc/zabbix_agentd.conf.d/*.conf 将脚本包括进去就行,但是关于主机名等相关信息也得填写,下面给你举例的配置文件:
[localadmin@ ~]$ vim /opt/zabbix/etc/zabbix_agentd.conf LogFile= #日志文件放置位置 EnableRemoteCommands=1 #是否允许zabbix server主机远程执行命令 Server= #server端地址 | 域名 ServerActive= #主动向server报告内容,写明server端地址 | 域名 Hostname=Zabbix server #与zabbix server主机名一样 Include=/opt/zabbix/etc/zabbix_agentd.conf.d/*.conf #将脚本包括进去 UnsafeUserParameters=1 #启用自定义key,zabbix监控mysql、tomcat等数据时需要自定义key
好了大功告成,接下来重启 | 启动zabbix_agent即可。启动成功以后,回到zabbix server执行下面的命令测试agent是否返回数据:
[localadmin@ ~]$ zabbix_get -s 127.0.0.1 -p 10050 -k mysql.ping #出现命令找不到等情况请使用绝对路径或者增加环境变量。 #执行命令后如果mysql在线则会出现字符1 失败则为0 #如果出现sh: mysql: command not found等命令找不到的情况,请在Mysql中添加环境变量。 #或者将userparameter_mysql.conf里面的mysql mysqladmin写明绝对路径比如: UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/opt/zabbix/etc /opt/mysql/bin/mysql -N | awk '{print $$2}' UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/opt/zabbix/etc /opt/mysql/bin/mysql -N' UserParameter=mysql.ping,HOME=/opt/zabbix/etc /opt/mysql/bin/mysqladmin ping | grep -c alive UserParameter=mysql.version,/opt/mysql/bin/mysql -V #看到了不?写明命令的绝对路径即可!直到出现字符1为止方可OK
zabbix通过command执行通过后现在在WEB端进行设置。
zabbix server WEB端设置:
首先找到配置->主机找到需要设置的主机点击:
找到主机后点进去找到模板选项->添加一个模板->点击更新即可:
这个图是我增加好模板的图片,只要出现Template APP MySQL就说明增加完毕。进入主机之后选择模板(划横线的)->随后我们在画圈的地方输入模板名字,其实只要输入mysql就能找到->再点击画圈地方下面的添加->最后点击更新即可搞定!
搞定好以后我们在监测->图形中选择主机群组,然后选择监控mysql的主机,最后选择监控项就能看到监控指示图片。看多么方便!
结语:
上图只是mysql的流量图片还有插入、查询语句执行的频繁程度的图片我就不贴了。zabbix自带的Mysql模板监控能够覆盖大部分需要查找的监控项,但是需要执行专门的脚本文件所以不要以为将模板添加到主机上就能大功告成,否则不会收集任何数据。所以按照我上面的方法做还是非常容易的。如果你是zabbix3.0以下的版本需要自己写脚本了,不过不写也没问题只要将3.0.3版本的编译文件拷贝过去即可!下面贴出网络上自定义脚本:
####sql user### MYSQL_USER='' ###sql password### MYSQL_PWD='' ###sql address### MYSQL_HOST='' ###sql port### MYSQL_PORT='' ###sql command### MYSQL_CONN="mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}" # 参数是否正确 if [ $# -ne "1" ];then echo "arg error!" fi # 获取数据 case $1 in Uptime) result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"` echo $result ;; Com_update) result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3` echo $result ;; Slow_queries) result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"` echo $result ;; Com_select) result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3` echo $result ;; Com_rollback) result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3` echo $result ;; Questions) result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"` echo $result ;; Com_insert) result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3` echo $result ;; Com_delete) result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3` echo $result ;; Com_commit) result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3` echo $result ;; Bytes_sent) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3` echo $result ;; Bytes_received) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3` echo $result ;; Com_begin) result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3` echo $result ;; *) echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)" ;; esac
如果是这样的话配置文件需要有所更改,必须将userparameter_mysql.conf进行修改!改成这样:
UserParameter=mysql.version,mysql -V UserParameter=mysql.ping,HOME=/opt/zabbix/etc mysql ping | grep -c alive UserParameter=mysql.status[*],/脚本位置 $1
最主要更改最后一个,前面两个只是看看Mysql版本和是否在线。最后一个内容包括(流量、插入、删除、查询、更改等操作的频率和流量)最后进行统计。其他比如.my.cnf zabbix_agentd.conf等文件保持不变即可!
Comments