在Zabbix的监控系统中一般是由Zabbix Server与Zabbix Agent一块儿配合实现监控,在Zabbix Agent内置了不少监控基础的监控项。
php
这些监控项都是CPU, 文件系统, 网络,磁盘等基础的监控项,对于本身开发服务的监控,Zabbix提供了良好框架为用户实现监控和报警,下面将觉得MySQL添加监控为例,介绍如何添加自定义监控。前端
1.NySQL 192.168.2.6 (agent)java
2.Zabbix Server 172.30.1.208mysql
在建立监控项以前要尽可能考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展示,如何处理报警等。要进行监控的系统规划须要对Zabbix很了解,这里只是提出监控的需求。linux
Zabbix Server与Agent之间监控数据的采集主要是经过Zabbix Server主动向Agent询问某个Key的值,Agent会根据Key去调用相应的函数去获取这个值并返回给Server端。Zabbix 2.4.7的Agent本并无内置MySQL的监控功能(可是Server端提供了相应的Template配置),因此咱们须要使用Zabbix的User Parameters功能,为MySQL添加监控脚本。git
被监控主机根据用户设定的时间间隔按期将数据push到Zabbix Server.这里主要介绍Agent.github
用户自定义一个key; 为命令,该命令用来获取用户想要监控的数据,也就是key的值;
定好UserParameter参数后,在为主机或者模板配置监控项的时候,在”key”中输入上面自定义的key的
名字就能够了.sql
假如我要获取Mysql Server的版本,我能够这样定义”UserParameter”:
打开 Zabbix Agent安装路径下的 ../etc/zabbix_agentd.conf 配置文件,翻页到最后页面,键入以下
行:shell
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;
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 1
用户名和密码放在命令中对于之后的维护很差,因此咱们在/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
关联模板
建立监控项
建立图形
查看监控图像
设置报警,建立触发器,动做(当STATUS=0时,报警)
进行测试
停掉数据库(测试环境)
linux:~ # /etc/init.d/mysql stop
查看邮件
邮件提示我数据库STATUS=0 也就是down了
恢复数据库
linux:~ # /etc/init.d/mysql start
邮件提示我数据库STATUS=1也就是UP了
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
#!/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客户端
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配置文件详解
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的频率