zabbix监控mysql性能

时间:2021-01-16 14:28:57
使用zabbix监控mysql的三种方式
1.只是安装agent
2.启用模板监控
3.启用自定义脚本的模板监控
zabbix中默认有mysql的监控模板。默认已经在zabbix2.2及以上的版本中。模板名称:Template App MySQL。
如果没有则要去zabbix官方下载 url:https://zabbix.org/mw/images/d/d4/Template_App_MySQL-2.2.0.xml,然后在Zabbix服务器的前端Web界面的组态->模板页面中选择汇入,在新的页面中导入下载的模板文件。
#模拟环境
mysql1 172.16.160.161 #zabbix server
mysql2 172.16.160.162 #zabbix agent
#mysql配置-在zabbix agent上操作
##添加帐户登录信息等,
执行mysql mysqladmin脚本命令时不需要帐户密码,也不再提示警告
$ cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
validate_password = off
innodb_file_per_table = 1
character_set_server=utf8
init_connect='SET NAMES utf8'
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql] #添加以下内容
user = mysqlcheck
password = mysqlchechk
[client]
user = mysqlcheck
password = mysqlchechk
[mysqladmin]
user = mysqlcheck
password = mysqlchechk
##添加帐户密码
mysql> GRANT USAGE ON *.* TO 'mysqlcheck'@'localhost' IDENTIFIED BY 'mysqlcheck';
mysql> FLUSH PRIVILEGES;
#zabbix配置-在zabbix agent上操作
##安装zabbix_agent并修改配置文件
$ rpm -Uv http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-agent-3.2.6-1.el7.x86_64.rpm
$ yum install -y zabbix-agent
$ cat /etc/zabbix/zabbix_agentd.conf |grep -v ^# |grep -v ^$
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.160.161 #指向zabbix服务器
ListenPort=10050
ListenIP=0.0.0.0
ServerActive=172.16.160.161 #指向zabbix服务器
Hostname=mysql2 #zabbix服务器上配置主机的时候要用的名称
Include=/etc/zabbix/zabbix_agentd.d/*.conf #这一行是指向模板文件的
$
##添加用来关联mysql的配置文件.my.cnf,
执行mysql mysqladmin脚本命令时不需要帐户密码,也不再提示警告
mysql.sock文件通过find / -name mysql.sock找出路径
$ cat /etc/zabbix/.my.cnf
[mysql]
host = localhost
user = mysqlcheck
password = mysqlcheck
socket = /var/lib/mysql/mysql.sock
[mysqladmin]
host = localhost
user = mysqlcheck
password = mysqlchechk
socket = /var/lib/mysql/mysql.sock
##修改zabbix模板配置文件中的mysql路径
这个文件用于制定Zabbix Agent如何获取MySQL数据
我们需要将所有的/var/lib/zabbix修改为当前.my.cnf文件的路径/etc/zabbix。
$ sed -i 's@/var/lib/zabbix@/etc/zabbix@g' /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
$ cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf |grep -v ^#|grep -v ^$
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/etc/zabbix 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=/etc/zabbix mysql -N'
UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
##设置完 成之后保存并重启Zabbix Agent
$ systemctl restart zabbix-agent.service
##测试不用帐户密码就可以执行mysqladmin命令
$ mysqladmin ping | grep -c alive
1
#zabbix页面配置-在zabbix server上操作
##创建主机
Configuration—Hosts—创建主机
主机名称,群组选择,agent的IP地址和端口,然后点更新
##使用模板
Configuration—Hosts—主机名称—Tempaltes,搜索MySQL,添加弹出的模板Template App MySQL,然后点更新
注意:选完模板后,要点下添加按钮才行。
##查看监控效果
Monitoring—Graphs,选择组,然后选择host及展示的图形
这时候图形里会多出mysql bandwidth和mysql operations,而且有输出信息
#总结说明
说明一下,安装zabbix_agent后,已经可以监控mysql服务器的性能参数,
不过如果还需要进一步监控做些简单的监控,这时候就要用zabbix自带的模板;
然而如果只需要对mysql数据库做简单的监控,zabbix自带的模板完全能够满足要求;如果有更高的需求那需要自己写脚本,或者使用fromdual插件等。
参考:http://www.fromdual.com/mpm-installation-guide
zabbix在模板中预定义了一些key,但通常情况,并不能满足我们的需求。
幸运的是zabbix提供了自定义key的方法,因此我们可以灵活的监控各种我们想要监控的数据。
##启用
$ vi /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
$ cat /etc/zabbix/zabbix_agentd.conf |grep -v ^# |grep -v ^$
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.160.161 #指向zabbix服务器
ListenPort=10050
ListenIP=0.0.0.0
ServerActive=172.16.160.161 #指向zabbix服务器
Hostname=mysql2 #zabbix服务器上配置主机的时候要用的名称
Include=/etc/zabbix/zabbix_agentd.d/*.conf #这一行是指向模板文件的
UnsafeUserParameters=1
 
 

在Zabbix的监控系统中通常是由Zabbix Server与Zabbix Agent一起配合实现监控,在Zabbix Agent内置了很多监控基础的监控项。

这些监控项都是CPU, 文件系统, 网络,磁盘等基础的监控项,对于自己开发服务的监控,Zabbix提供了良好框架为用户实现监控和报警,下面将以为MySQL添加监控为例,介绍如何添加自定义监控。

实验环境

1.NySQL 192.168.2.6 (agent)

2.Zabbix Server 172.30.1.208

角色:Zabbix Agent, Zabbix Server, MySQL, 模板

第一步,监控规划

在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是提出监控的需求。

需求一:监控MySQL的状态,当状态发生异常,发出报警;
需求二:监控MySQL的操作,并用图表展现;
第二步,使用自定义脚本监控扩展Agent。

Zabbix Server与Agent之间监控数据的采集主要是通过Zabbix Server主动向Agent询问某个Key的值,Agent会根据Key去调用相应的函数去获取这个值并返回给Server端。Zabbix 2.4.7的Agent本并没有内置MySQL的监控功能(但是Server端提供了相应的Template配置),所以我们需要使用Zabbix的User Parameters功能,为MySQL添加监控脚本。

Trapper工作原理:

被监控主机根据用户设定的时间间隔定期将数据push到Zabbix Server.这里主要介绍Agent.

Agent工作原理:

  • Agent 安装在被监控主机上,定期主动的监控本机的资源和应用,然后将数据进行处理发送给ZabbixServer. Agent工作方式又分为Passive Check 和 Active Check。
  • Passive Check: Zabbix Server 发起数据索取请求,Agent响应对应的数据.
  • Active Check: Agent首先从Zabbix Server 检索监控项列表,然后定期将对应的数据主动的发送到.Zabbix ServerZabbix Agent 本身预定义了一些监控类型,而对于没有预定义的需要管理员自行定义.因此,Zabbix提供了”UserParameter”参数,以方便用户根据自己的需求自定义想要获取的数据.

“UserParameter” 语法:

UserParameter=<key>,<command>

用户自定义一个key; 为命令,该命令用来获取用户想要监控的数据,也就是key的值;
定好UserParameter参数后,在为主机或者模板配置监控项的时候,在”key”中输入上面自定义的key的
名字就可以了.

假如我要获取Mysql Server的版本,我可以这样定义”UserParameter”:
打开 Zabbix Agent安装路径下的 ../etc/zabbix_agentd.conf 配置文件,翻页到最后页面,键入如下
行:

UserParameter=mysql.version,mysql -V

这里我们自定义的key名就是"mysql.version",命令"mysql -V"用来获取Mysql 版本号,其实就是key对
应的值.

UserParameter参数实现的原理通俗来讲,就是我们先要熟悉Mysql命令,通过Mysql的命令获取想要的
数据,然后赋值给自定义的key,最后通过Zabbix Server获取这个值通过图像等方式展示出来.

下面利用Agent来实现对mysql性能的监控。

授权mysql登录用户(agent端):

mysql> grant usage on *.* to zabbix@127.0.0.1 identified by '123456';

mysql> flush privileges;

agent端:

1.利用UserParameter参数自定义Agent Key。
对于需求一 ,我们采用mysqladmin这个工具来实现,命令如下:

linux:/etc/zabbix/zabbix-agentd.conf.d # mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping
mysqld is alive

如果MySQL状态正常,会显示mysqld is alive,否则会提示连接不上。对于服务器端,mysqld is alive这样的句子不好理解,服务器端最好只接收1和0,1表示服务可用,0表示服务不可用。那么再改进一下这个命令,如下:

linux:/etc/zabbix/zabbix-agentd.conf.d # mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping | grep -c alive

用户名和密码放在命令中对于以后的维护不好,所以我们在/etc/zabbix/下创建一个包含MySQL用户名和密码的配置文件“.my.cnf”,如下:(我这里没有这么做)

[client]
user=zabbix
host=192.168.2.6
password=123456
有了这个文件后的命令变更为
linux:/etc/zabbix/zabbix-agentd.conf.d #  HOME=/etc/zabbix/ mysqladmin ping | grep -c alive

做完这一步后需要做的就是,将这个监控命令添加到Zabbix Agent中,并与一个Key对应,这样Zabbox Server就能通过这个Key获取MySQL的状态了。我们使用mysql.ping作为MySQL状态的Key。

首先在去除/etc/zabbix/zabbix-agentd.conf中 包含子配置文件路径的注释,并修改

Include=/etc/zabbix/zabbix-agentd.conf.d/ (这里根据自己情况取名就行,别忘了创建这个目录)

其次,在etc/zabbix/zabbix_agentd.conf.d/目录下创建userparameter_mysql.conf文件。在文件中添加如下命令:

linux:/etc/zabbix/zabbix-agentd.conf.d # cat userparameter_mysql.conf
UserParameter=mysql.ping,mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping | grep -c alive

这个命令中”UserParameter”表示这是一个用户自定义的脚本;“=”号后是脚本的内容;“mysql.ping”是Key,“,”号后的命令会在Zabbix Server向Agent发起获取“mysql.ping”这个key的请求时被调用,并将返回值返回给Server。
保存并退出后可以使用下面的命令测试是否正常工作。

linux:/etc/zabbix # /usr/sbin/zabbix-agentd -t mysql.ping -c /etc/zabbix/zabbix-agentd.conf.d/userparameter_mysql.conf   (正常工作)
mysql.ping [t|1]

这里zabbix_agentd使用方法可参考:

http://www.ttlsa.com/zabbix/zabbix-command-zabbix_agentd/

同时,在Server端也可以使用使用zabbix_get命令来测试从Server端获取指定的Client端的数据,如下:

[root@Zabbixserver alertscripts]# zabbix_get -s192.168.2.6 -p 10050 -k mysql.ping
1

这里如果操作是跟我一样,但你是有错误的

可能跟你安装版本不统一有问题。

这里zabbix_get使用方法可参考:http://www.ttlsa.com/zabbix/zabbix-zabbix_get-get-items/

也可以参考官网方法:

https://www.zabbix.com/documentation/3.0/manual/config/items/userparameters/extending_agent

然后下载安装MySQL监控的模板  (我这里使用脚本监控+zabbix自带MySQL模板)

https://github.com/yangcvo/zabbix.2.4/ 

我这里使用的是zabbix 自带模板 Template App MySQL

创建主机 192.168.2.6

zabbix监控mysql性能

zabbix监控mysql性能

关联模板

zabbix监控mysql性能

创建监控项

zabbix监控mysql性能

创建图形

zabbix监控mysql性能

查看监控图像

zabbix监控mysql性能

设置报警,创建触发器,动作(当STATUS=0时,报警)

zabbix监控mysql性能

进行测试

停掉数据库(测试环境)

linux:~ # /etc/init.d/mysql stop

zabbix监控mysql性能

查看邮件 

邮件提示我数据库STATUS=0 也就是down了

zabbix监控mysql性能

恢复数据库

 linux:~ # /etc/init.d/mysql start

zabbix监控mysql性能

邮件提示我数据库STATUS=1也就是UP了

zabbix监控mysql性能

zabbix监控mysql性能
通过获取mysql状态值将这些状态值传递给服务器并绘制成图片,这样可以观察mysql的工作情况,通常需要获得状态变量有以下

Com_update:mysql执行的更新个数

Com_select:mysql执行的查询个数

Com_insert:mysql执行插入的个数

Com_delete:执行删除的个数

Com_rollback:执行回滚的操作个数

Bytes_received:接受的字节数

Bytes_sent:发送的字节数

Slow_queries:慢查询语句的个数

监控mysql脚本(chk_mysql.sh 在客户端编写)

linux:/etc/zabbix # cat chk_mysql.sh

zabbix监控mysql性能
#!/bin/bash
# -------------------------------------------------------------------------------
# FileName: check_mysql.sh
# Revision: 1.0
# -------------------------------------------------------------------------------
# Copyright:
# License: GPL # 用户名
MYSQL_USER='zabbix' # 密码
MYSQL_PWD='123456' # 主机地址/IP
MYSQL_HOST='127.0.0.1' # 端口
MYSQL_PORT='3306' # 数据连接
MYSQL_CONN="/usr/bin/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
zabbix监控mysql性能

重启zabbix客户端

linux:/etc/zabbix # /etc/init.d/zabbix-agentd restart

在userparameter_mysql.conf 增加自定义key

linux:/etc/zabbix # cat zabbix-agentd.conf.d/userparameter_mysql.conf

UserParameter=mysql.ping,mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping | grep -c alive
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/etc/zabbix/chk_mysql.sh $1

在zabbix服务器端测试

[root@Zabbixserver alertscripts]# zabbix_get -s 192.168.2.6 -p10050 -k mysql.status[Com_insert]
121354
[root@Zabbixserver alertscripts]# zabbix_get -s 192.168.2.6 -p10050 -k mysql.status[Uptime]
62602

在zabbix客户端测试是否能获取到信息

linux:/etc/zabbix/zabbix-agentd.conf.d # zabbix-agentd -tmysql.status[Uptime] -c /etc/zabbix/zabbix-agentd.conf.d/userparameter_mysql.conf 

mysql.status[Uptime] [t|62325]

创建图形(步骤就不演示了)

查看图形

zabbix监控mysql性能

zabbix监控mysql性能

zabbix配置文件详解 

zabbix的配置文件一般有三种:
zabbixserver的配置文件zabbix_server.conf
zabbixproxy的配置文件zabbix_proxy.conf
zabbix_agentd的配置文件zabbix_agentd.conf

1.zabbixserver的配置文件:

NodeID=0 #分布式节点id号,0代表是独立服务器,默认是被注释掉的,不强制配置 
ListenPort=10051 #zabbix server的端口,默认是10051,可以自行修改, 
范围是1024-32767 ,一般默认即可 
SourceIP=  #连接的源ip地址,默认为空,默认即可 
LogFile=/tmp/zabbix_server.log #日志文件的存放位置 
LogFileSize=1 #日志文件的大小,单位为MB,当设置为0时,表示不仅行日志轮询, 
默认设置为1,默认即可 
DebugLevel=3 #指定调试级别,默认即可 
PidFile=/tmp/zabbix_server.pid #pid文件的存放位置 
DBHost=localhost #数据库主机名,当设置为localhost时,连接mysql通过sock 
DBName=zabbix #指定存放zabbix数据数据库的名字 
DBUser=zabbix #指定连接数据库的用户名 
DBPassword=123456 #用户连接数据库需要的密码 
DBSocket=/var/lib/mysql/mysql.sock #前文主机设置为localhost,用户 
连接数据库所用的sock位置, 
DBPort=3306 #数据库的端口号,当用sock连接时,无关紧要,当通过网络连接时需设置 
StartPollers=5 #默认即可 
StartIPMIPollers=0 #使用IPMI协议时,用到的参数 
StartTrappers=5 #打开的进程数, 
StartPingers=1 同上 
StartDiscoverers=1 
StartHTTPPollers=1 
JavaGateway=127.0.0.1 #JavaGateway的ip地址或主机名 
JavaGatewayPort=10052 #JavaGateway的端口号 
StartJavaPollers=5 #开启连接javagatey的进程数 
SNMPTrapperFile=/tmp/zabbix_traps.tmp 
StartSNMPTrapper=0 #如果设置为1,snmp trapper进程就会开启 
ListenIP=0.0.0.0 #监听来自trapper的ip地址 
ListenIP=127.0.0.1 
HousekeepingFrequency=1 #zabbix执行Housekeeping的频率,单位为hours 
MaxHousekeeperDelete=500 #每次最多删除历史数据的行 
SenderFrequency=30 #zabbix试图发送未发送的警报的时间,单位为秒 
CacheSize=8M #缓存的大小 
CacheUpdateFrequency=60#执行更新缓存配置的时间,单位为秒数 
StartDBSyncers=4 
HistoryCacheSize=8M 
TrendCacheSize=4M 
HistoryTextCacheSize=16M 
NodeNoEvents=0 
NodeNoHistory=0 
Timeout=3 
TrapperTimeout=300 
UnreachablePeriod=45 
UnavailableDelay=60 
UnreachableDelay=15 
AlertScriptsPath=/usr/local/zabbix/shell #脚本的存放路径 
FpingLocation=/usr/local/sbin/fping #fping指令的绝对路径 
SSHKeyLocation= 
LogSlowQueries=0 
TmpDir=/tmp
Include=/usr/local/etc/zabbix_server.general.conf 
Include=/usr/local/etc/zabbix_server.conf.d/ #子配置文件路径 
StartProxyPollers=1 #在zabbix proxy被动模式下用此参数 
ProxyConfigFrequency=3600#同上 
ProxyDataFrequency=1

zabbixagentd的配置文件
啊别必须
PidFile=/tmp/zabbix_agentd.pid #pid文件的存放位置 
LogFile=/tmp/zabbix_agentd.log #日志文件的位置 
LogFileSize=1 #当日志文件达到多大时进行轮询操作 
DebugLevel=3 #日志信息级别 
SourceIP= #连接的源ip地址,默认为空,即可 
EnableRemoteCommands=0 #是否允许zabbix server端的远程指令, 
0表示不允许, 
1表示允许 
LogRemoteCommands=0 #是否开启日志记录shell命令作为警告 0表示不允许,1表示允许 
Server=127.0.0.1 #zabbix server的ip地址或主机名,可同时列出多个,需要用逗号隔开 
ListenPort=10050 #zabbix agent监听的端口 
ListenIP=0.0.0.0 #zabbix agent监听的ip地址 
StartAgents=3 #zabbix agent开启进程数 
ServerActive=127.0.0.1 #开启主动检查 
Hostname=Zabbix server#在zabbix server前端配置时指定的主机名要相同,最重要的配置 
RefreshActiveChecks=120 #主动检查刷新的时间,单位为秒数 
BufferSend=5 #数据缓冲的时间 
BufferSize=100 #zabbix agent数据缓冲区的大小,当达到该值便会发送所有的数据到zabbix server 
MaxLinesPerSecond=100 #zabbix agent发送给zabbix server最大的数据行 
AllowRoot=0 #是否允许zabbix agent 以root用户运行 
Timeout=3 #设定处理超时的时间 
Include=/usr/local/etc/zabbix_agentd.userparams.conf 
Include=/usr/local/etc/zabbix_agentd.conf.d/ #包含子配置文件的路径 
UnsafeUserParameters=0 #是否允许所有字符参数的传递 
UserParameter= #指定用户自定义参数

zabbixproxy的配置文件

Server=192.168.70.133 #指定zabbix server的ip地址或主机名 
Hostname=zabbix-proxy-1.35 #定义监控代理的主机名,需和zabbix server前端配置时指定的节点名相同 
LogFile=/tmp/zabbix_proxy.log #指定日志文件的位置 
PidFile=/tmp/zabbix_proxy.pid #pid文件的位置 
DBName=zabbix_proxy #数据库名 
DBUser=zabbix #连接数据库的用户 
DBPassword=123456#连接数据库用户的密码 
ConfigFrequency=60 #zabbix proxy从zabbix server取得配置数据的频率 
DataSenderFrequency=60 #zabbix proxy发送监控到的数据给zabbix server的频率

可以参考http://blog.yangcvo.me/2014/09/29/%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7/Zabbix/zabbix%E7%9B%91%E6%8E%A7MySQL-%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9B%91%E6%8E%A7%E9%A1%B9/