总zabbix配置-搭建-邮件报警-微信报警-监控mysql

时间:2024-01-05 22:40:32

Centos7安装Zabbix4.0步骤

官方搭建zabbix4.0的环境要求:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1. 环境搭建LAMP

前提Centos系统安装完成:  确认一下:

1
2
cat /etc/redhat-release #  查看CentOS版本 
cat /proc/version         #查看存放与内核相关的文件

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.1 搭建之前的操作

1.1.1 升级系统组件到最新的版本

1
yum -y update

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.1.2 关闭selinux 

1
vi /etc/selinux/config    #将SELINUX=enforcing改为SELINUX=disabled 设置后需要重启才能生效

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
setenforce 0       #临时关闭命令
1
getenforce         #检测selinux是否关闭,Disabled 为关闭

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.1.3 关闭防火墙

1
firewall-cmd --state    #查看默认防火墙状态,关闭后显示not running,开启后显示running

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
2
systemctl stop firewalld.service    #临时关闭firewall
systemctl disable firewalld.service #禁止firewall开机启动

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.2 搭建LAMP环境

 1.2.1 安装所需所有软体仓库

Zabbix是建立在LAMP或者LNMP环境之上,在此为了方便就使用yum安装LAMP环境。

1
yum install -y httpd mariadb-server mariadb php php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mhash
1
rpm -qa httpd php mariadb            #安装完成后检查应用版本

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.2.2 编辑httpd

1
vi /etc/httpd/conf/httpd.conf
1
2
ServerName www.zabbixyk.com      #修改为主机名
DirectoryIndex index.html index.php   # 添加首页支持格式 

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.2.3 编辑配置php,配置中国时区

1
vi /etc/php.ini
1
date.timezone = PRC   # 配置时区  

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.2.4 启动httpd,mysqld

1
2
3
4
systemctl start httpd   #启动并加入开机自启动httpd
systemctl enable httpd
systemctl start mariadb  #启动并加入开机自启动mysqld
systemctl enable mariadb
1
2
ss -anplt | grep httpd   #查看httpd启动情况,80端口监控表示httpd已启动
ss -naplt | grep mysqld  #查看mysqld启动情况,3306端口监控表示mysqld已启动 

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.2.5 创建一个测试页,测试LAMP是否搭建成功

1
vi /var/www/html/index.php #创建一个测试页,并编辑
1
2
3
<?php
phpinfo()
?>

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

本地测试:

1
curl http://127.0.0.1 -I         #本地测试

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1.2.6 初始化mysql数据库,并配置root用户密码

1
mysqladmin -u root password ykadmin123           #设置数据库root密码

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
2
3
4
5
mysql -u root -p        #root用户登陆数据库
CREATE DATABASE zabbix character set utf8 collate utf8_bin;       #创建zabbix数据库(中文编码格式)
GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'ykadmin123';  #授予zabbix用户zabbix数据库的所有权限,密码ykadmin123
flush privileges;    #刷新权限
quit                 #退出数据库   

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
vi /var/www/html/index.php         #修改测试页内容,测试zabbix用户是否能够登陆数据库,这个环节很重要
1
2
3
4
5
6
<?php
$link=mysql_connect('172.18.20.224','zabbix','ykadmin123'); 
if($link) echo "<h1>Success!!</h1>";   #显示Success表示连接数据库成功
 else echo "Fail!!";
mysql_close();
?>

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

出现上图则PHP连通数据库完成。

为保证zabbix用户也可以登录数据库,若出现本地无法登录情况,解决方式如下:

1
2
3
mysql -u root -p  #使用root账户登录数据库;
select user,host from mysql.user;   #有空用户名称占用导致本地无法登录远程可登录
drop user ''@localhost;  #删除空用户  

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

2. 安装zabbix

2.1  安装依赖包 + 组件

1
yum -y install net-snmp net-snmp-devel curl curl-devel libxml2 libxml2-devel libevent-devel.x86_64 javacc.noarch  javacc-javadoc.noarch javacc-maven-plugin.noarch javacc*

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
2
3
4
5
6
7
yum install php-bcmath php-mbstring -#安装php支持zabbix组件
rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm  #会自动生成yum源文件,保证系统可以上网
yum install zabbix-server-mysql zabbix-web-mysql -y    #安装zabbix组件
zcat /usr/share/doc/zabbix-server-mysql-4.0.0/create.sql.gz | mysql -uzabbix --172.18.20.224 zabbix   #导入数据到数据库zabbix中(最后一个zabbix是数据库zabbix),且因为用户zabbix是%(任意主机),所以登录时需要加上当前主机ip(-h 172.18.20.224),密码是用户zabbix登陆密码ykadmin123

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
2
vi  /etc/zabbix/zabbix_server.conf   #配置数据库用户及密码
grep -'^'[a-Z] /etc/zabbix/zabbix_server.conf   #确认数据库用户及密码

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
vi /etc/httpd/conf.d/zabbix.conf     //修改时区
1
# php_value date.timezone Europe/Riga 变更成php_value date.timezone Asia/Shanghai
1
2
systemctl enable zabbix-server # #启动并加入开机自启动zabbix-server
systemctl start zabbix-server

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

1
netstat -anpt | grep zabbix          //监听在10051端口上,如果没监听成功,可重启zabbix-server服务试试

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

建议重启服务器,再继续。

2.2 web界面安装zabbix

如果以上步骤无误,现在可以使用web打开

1
http://172.18.20.224/zabbix  //注意这里IE浏览器打不开,本次测试使用chrome浏览器

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

....

邮件报警

centos7下zabbix4.0配置邮件报警及web应用优化详解

2018年04月07日 19:47:49 linecookie 阅读数:5447

此篇接上篇分布式监控zabbix,详解如何运用zabbix-web端和配置邮件报警。

--------配置邮件报警功能---服务器上配置---------

[www.aa.com@ ~]# yum install mailx -y

[www.aa.com@ ~]# vi /etc/mail.rc         //注意网易邮箱需要开启客户端授权码进行第三方登录

----文件末尾新增---

set bsdcompat

set from=18752735985@163.com

set smtp=smtp.163.com

set smtp-auth-user=18752735985@163.com

set smtp-auth-password=abc123

set smtp-auth=login

:wq

[www.aa.com@ ~]# echo "ttttttttttt" | mail -s "testmail" 18752735985@163.com   //测试发信正常

----在浏览器上登陆邮箱,查看是否收到测试邮件------

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

[www.aa.com@ ~]# cd /usr/lib/zabbix/alertscripts

[www.aa.com@ alertscripts]# vi mailx.sh          //编写发邮件脚本

#!/bin/bash

#send mail

messages=`echo $3 | tr '\r\n' '\n'`

subject=`echo $2 | tr '\r\n' '\n'`

echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

:wq

[www.aa.com@ alertscripts]# touch /tmp/mailx.log

[www.aa.com@ alertscripts]]# chown -R zabbix.zabbix  /tmp/mailx.log

[www.aa.com@ alertscripts]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh

[www.aa.com@ alertscripts]# chown -R zabbix.zabbix /usr/lib/zabbix/

[www.aa.com@ alertscripts]# ./mailx.sh 18752735985@163.com "主题" "内容"     //测试发邮件脚本是否可以正常工作

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

-----在服务器WEB上配置----

管理-》报警媒体类型-》创建媒体类型-》

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

名称:Mail-Test

类型:脚本

脚本名称:mailx.sh

脚本参数:       //新增以下三个参数

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

管理-用户-点击Admin-报警媒介:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

类型:Mail-Test //调用上面的脚本

收件人:weisheng213@126.com

其它默认-保存

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

配置-》动作-》创建动作-》删除默认标签,修改触发条件

名称:Mailx

条件 A 主机群组=Linux servers

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

操作-》如下配置

默认操作步骤持续时间 60

默认接收人 : {TRIGGER.STATUS}:{TRIGGER.NAME}

默认信息:

告警主机:{HOST.NAME}

告警  IP:{HOST.IP}

告警时间:{EVENT.DATE}-{EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}:{ITEM.VALUE}

事件  ID:{EVENT.ID}

操作细节:-》

操作类型:发送消息

发送到用户:Admin (Zabbix Administrator)

仅送到:Mail-Test  //一定要配置否则邮件发送不成功

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

恢复操作:{TRIGGER.STATUS}:{TRIGGER.NAME}

恢复信息:

恢复主机:{HOST.NAME}

恢复  IP:{HOST.IP}

恢复时间:{EVENT.DATE}-{EVENT.TIME}

恢复等级:{TRIGGER.SEVERITY}

恢复信息:{TRIGGER.NAME}:{ITEM.VALUE}

恢复  ID:{EVENT.ID}

操作细节:-》

操作类型:发送消息

发送到用户:Admin (Zabbix Administrator)

仅送到:Mail-Test  //一定要配置否则邮件发送不成功

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

[www.aa.com@ alertscripts]# systemctl restart zabbix-server

[www.aa.com@ alertscripts]# systemctl restart zabbix-agent.service

------以下是测试报警-----

可以在被控主机上模拟相关参数超过阈值,如关闭ssh服务。然后验证邮件收发。

[www.ab.com@ ~]# systemctl stop sshd

等待是否收到邮件:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

在控制台重新启动sshd服务,查看是否收到恢复邮件:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

在被监控主机上关闭 测试报警邮件接收:

[www.ab.com@ ~]# systemctl stop zabbix-agent.service

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

[www.ab.com@ ~]# systemctl start zabbix-agent.service

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

---------------以下针对zabbix的web端优化与应用---------------------

优化图表中文乱码:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

[www.aa.com@ ~]# vi /usr/share/zabbix/include/defines.inc.php             //修正图表中文乱码

:%s /graphfont/kaiti/g                                                                              //从微软系统下复制相应的字体文件到 /usr/share/zabbix/fonts 目录中注意字体名称要对应配置文件,且注意大小写

:wq

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

查看优化结果:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

##############################################################微信报警

系统环境:Centos7.4 Zabbix4.0

安装zabbix_server在之前的博文有写道,由于是内网环境,对外通讯仅通过一台代理服务器,并且邮件等端口也被封禁了,所以才考虑用微信报警的方式.

一.注册企业微信号

首先申请微信企业号: https://qy.weixin.qq.com/

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

注册后 添加一个子部门,此时默认部门ID为2

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

然后自建一个应用程序

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

可见范围添加上运维

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

然后点击应用与小程序查看AgentID和SecretID,并记录下来

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

点击我的企业,企业信息可以查看企业ID即CropID.

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

企业ID就是cropid xxxxxxxxxxxxxxxxxxx

AgentId 1000002

Secret 8ubvbvaUvq5W68qcEIFWcwVRI7ErfTl-68jV4Hs9noE

然后打开 https://work.weixin.qq.com/api/devtools/devtool.php测试是否ok

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

二.Shell脚本设置

[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix alertscripts]# vim weixin.sh #!/bin/bash
###SCRIPT_NAME:wechat.sh###
###send message from weixin for zabbix monitor### CropID='此处填写上面获取到的CorpID'
Secret='此处填写应用的Secret'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}') PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" function body() {
#企业号中的应用id
local int AppID=这里填写AgentID
#部门成员id,zabbix中定义的微信接收者
local UserID=$1
#部门id,定义了范围,组内成员都可接收到消息
local PartyID=2
#过滤出zabbix传递的第三个参数
local Msg=$(echo "$@" | cut -d" " -f3-)
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'" $AppID "\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL## [root@zabbix alertscripts]# chown zabbix.zabbix weixin.sh
[root@zabbix alertscripts]# chmod 744 weixin.sh

测试

[root@zabbix alertscripts]# ./weixin.sh limingfan test test 
{"errcode":0,"errmsg":"ok","invaliduser":""}

注:limingfan为运维部门成员的账号

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

手机上也收到

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

若是通过代理上网的服务器,发现测试代码可以发送到手机上,但是实际发生故障会出现发送失败

那么需要在weixin.sh加上/etc/profile中的代理设置的内容

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

三.zabbix网页端设置

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

脚本参数为

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

然后添加一个用于报警的用户

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

创建触发器动作

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

操作,恢复操作,Update operation都需设置发送消息到用户weixin

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

服务器发生故障!
\n
\n告警服务器:{HOSTNAME1}
\n告警服务器IP地址:{HOST.CONN}
\n告警时间:{EVENT.DATE} {EVENT.TIME}
\n告警等级:{TRIGGER.SEVERITY}
\n告警信息: {TRIGGER.NAME}
\n告警项目:{TRIGGER.KEY1}
\n问题详情:{ITEM.NAME}:{ITEM.VALUE}
\n发生: {TRIGGER.NAME}故障!
\n当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
\n事件 ID:{EVENT.ID} 服务器故障已恢复!
\n
\n告警服务器:{HOSTNAME1}
\n告警服务器IP地址:{HOST.CONN}
\n告警时间:{EVENT.DATE} {EVENT.TIME}
\n告警等级:{TRIGGER.SEVERITY}
\n告警信息: {TRIGGER.NAME}
\n告警项目:{TRIGGER.KEY1}
\n问题详情:{ITEM.NAME}:{ITEM.VALUE} {TRIGGER.NAME}已恢复!
\n当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
\n事件 ID:{EVENT.ID} 服务器:报警确认!
\n
\n确认人:{USER.FULLNAME}
\n时间:{ACK.DATE} {ACK.TIME}
\n确认信息如下:{ACK.MESSAGE}
\n问题服务器:{HOSTNAME1}
\n问题服务器IP:{HOST.CONN}
\n问题详情: {TRIGGER.NAME}
\n问题ID:{EVENT.ID}

然后手动触发一次报警

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

若要其他人也能收到报警信息,则用微信扫描 我的企业,微工作台.

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

还有就是通讯录一定要添加该成员

#####################################################################################

zabbix3.0 监控mysql服务器性能实现过程

-->监控思路

先在zabbix主机上面配置好mysql服务器的信息,添加好zabbix自带的Template App MySQL模版,然后去mysql服务器上安装agent,再添加mysql监控脚本。

1,建立mysql host groups组

模板是 zabbix系统提供的,进入 zabbix web 后台,Configuration-->Hosts groups-->点击“Create host group”-->选择template选项卡,选择模板“TemplateApp MySQL,Templdate OS Linux”,最后点击update 即可(032.png)

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

2,建立hosts

模板是 zabbix系统提供的,进入zabbix web 后台,configuration-->hosts-->点击你的主机 name-->选择template选

项卡,选择模板“Template App MySQL”,最后点击左边的“Add”按钮,最后点击“update”按钮即可(033.png)

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

3,rpm部署agent客户端

rpm方式安装:

# 添加zabbix帐号

groupadd zabbix

useradd zabbix -g zabbix -s /sbin/nologin

# 下载安装包

wget http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-agent-3.0.0-2.el6.x86_64.rpm

rpm -ivh zabbix-agent-3.0.0-2.el6.x86_64.rpm

# 报错信息如下:

[root@db_m1_slave_1 zabbix]# rpm -ivh zabbix-agent-3.0.0-2.el6.x86_64.rpm

warning: zabbix-agent-3.0.0-2.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 79ea5ed4: NOKEY

error: Failed dependencies:

libodbc.so.2()(64bit) is needed by zabbix-agent-3.0.0-2.el6.x86_64

[root@db_m1_slave_1 zabbix]#

# 解决方法:

yum -y install unixODBC

启动agent:

# 启动:

/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

# 添加开机自启动:

chkconfig  --add zabbix_agentd

4,源码方式agent客户端

tar zxvf zabbix-3.0.2.tar.gz

cd zabbix-3.0.2

./configure --enable-agent --with-mysql

make

make install

# 其它zabbix_agentd.conf配置信息和rpm方式一样

5,开始mysql性能监控

这里可以采用zabbix自带的mysql模版,但是也需要在mysql服务器上准备获取mysql status的脚本chk_mysql.sh,zabbix通过调用这个脚本来获取mysql的运行信息。

在配置文件zabbix_agentd.conf里面添加mysql监控信息:

# vim /etc/zabbix/zabbix_agentd.conf

UserParameter=mysql.version,mysql -V

UserParameter=mysql.status[*],/usr/local/zabbix/scripts/chk_mysql.sh $1

UserParameter=mysql.ping,mysqladmin -uzabbix -pys_ipowerlong0418 -P3306 -h127.0.0.1  ping | grep -c alive

添加mysql帐号:

GRANT PROCESS,SUPER,REPLICATION CLIENT ON *.* TO zabbix@'127.0.0.1' IDENTIFIED BY 'ys_ipowerlong0418';

添加check脚本权限:

chmod u+x /usr/local/zabbix/chk_mysql.sh

chown -R zabbix.zabbix /usr/local/zabbix/chk_mysql.sh

去zabbix服务器上面检查基本mysql服务器信息是否能正常获取到,zabbix_get -s 192.168.1..62 -p10050 -k"system.cpu.load[all,avg15]";:

[root@hch_test_121_12 html]# zabbix_get -s 192.168.1..62 -p10050 -k "system.cpu.load[all,avg15]";

0.050000

[root@hch_test_121_12 html]#

接下来准备mysql的运行信息监控,需要准备新的mysql监控脚本chk_mysql.sh,/usr/local/zabbix/chk_mysql.sh:

#!/bin/sh

# -------------------------------------------------------------------------------

# FileName:    check_mysql.sh

# Revision:    1.0

# Date:        2016/04/22

# Author:      tim

# Email:       mchdba@sohu.com

MYSQL_SOCK="/usr/local/mysql/mysql.sock"

MYSQL_USER='zabbix'

MYSQL_PWD='ys_ipowerlong0418'

MYSQL_HOST='127.0.0.1'

MYSQL_PORT='3306'

ARGS=1

if [ $# -ne "$ARGS" ];then

echo "Please input one arguement:"

fi

case $1 in

Uptime)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f2 -d":"|cut -f1 -d"T"`

echo $result

;;

Com_update)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_update"|cut -d"|" -f3`

echo $result

;;

Slow_queries)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK status |cut -f5 -d":"|cut -f1 -d"O"`

echo $result

;;

Com_select)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_select"|cut -d"|" -f3`

echo $result

;;

Com_rollback)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_rollback"|cut -d"|" -f3`

echo $result

;;

Questions)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f4 -d":"|cut -f1 -d"S"`

echo $result

;;

Com_insert)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_insert"|cut -d"|" -f3`

echo $result

;;

Com_delete)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_delete"|cut -d"|" -f3`

echo $result

;;

Com_commit)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_commit"|cut -d"|" -f3`

echo $result

;;

Bytes_sent)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`

echo $result

;;

Bytes_received)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_received" |cut -d"|" -f3`

echo $result

;;

Com_begin)

result=`/usr/local/mysql/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_begin"|cut -d"|" -f3`

echo $result

;;

*)

echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions)"

;;

esac

脚本准备完后,重启agent,然后在zabbix-server服务器上测试是否可以获取到mysql的status信息:

[root@hch_test_121_12 html]# zabbix_get -s 192.168.1..71 -p10050 -k mysql.status[Com_update]

Warning: Using a password on the command line interface can be insecure.

78055

[root@hch_test_121_12 html]#

[root@hch_test_121_12 html]#

[root@hch_test_121_12 html]# zabbix_get -s 192.168.1..71 -p10050 -k mysql.status[Com_insert]

Warning: Using a password on the command line interface can be insecure.

51332

[root@hch_test_121_12 html]#

6,监控性能视图

监控脚本运行正常后,就会在zabbix-server的host下面的graph里面看到mysql的监控性能视图,monitoringààGraphsààHost(选择mysql服务器)ààGraph(选择mysql选项),可以看到性能监控视图,zabbix自带模版默认有2个性能图,这些图要等运行一段时间后才能画出来:

041.png,MySQL operations:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

042.png,MySQL bandwidth:

总zabbix配置-搭建-邮件报警-微信报警-监控mysql

7,mysqladmin的缺陷

当mysql down了的时候,zabbix监控不到。因为默认的MySQL is down 的触发器的触发条件是mysql.ping.last(0),mysql.ping的实现方式是UserParameter=mysql.ping,mysqladmin -uzabbix -pys_ipowerlong0418-P3306 -h127.0.0.1  ping | grep -c alive,当mysql服务停止了后,mysqladmin执行报错是一推错误信息返回不了数字0,所以zabbix触发不了,所以zabbix界面会看到problems但是不会触发报警动作的,也就意味着你不会第一时间接到email、短信、电话报警了。

所以必须改正不能用mysqladmin这种方式,想到了用telnet mysql端口的方式来判断,如下所示:UserParameter=mysql.ping,netstat -ntpl |grep 3317 |grep mysql |wc|awk '{print $1}'

3317就是mysql运行的端口号,这样当mysqlis alive那么返回为1,当mysql is down返回为0,就满足了zabbix的mysql.ping.last(0)=0的触发条件了。

修改zabbix_agentd.conf配置信息:

# 先移除默认的配置

mv /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf /usr/local/zabbix/

# 添加新的配置

vim /etc/zabbix/zabbix_agentd.conf

UserParameter=mysql.version,mysql -V

UserParameter=mysql.status[*],/usr/local/zabbix/chk_mysql.sh $1

UserParameter=mysql.ping,netstat -ntpl |grep 3317 |grep mysql |wc |awk '{print $1}'

8,报错汇总记录

8.1报错信息

[root@db_m1_slave_1 zabbix-3.0.2]# tail -f/var/log/zabbix/zabbix_agentd.log

……

17336:20160422:163813.319 no active checkson server [192.168.121.12:10051]: host [hch_test_121_12] not found

17336:20160422:164013.503 no active checks onserver [192.168.121.12:10051]: host [hch_test_121_12] not found

解决办法:

出现该错误的原因是一般是zabbix_agentd.conf里面的Hostname和前端zabbix web里面的配置不一样所造成的,即在zabbix web页面Monitoring->Configuration->Hosts 页面的Host Name和zabbix_agentd.conf里面的Hostname要一样。

再看后台日志信息,正常如下:

[root@db_m1_slave_1 zabbix-3.0.2]# tail -f/var/log/zabbix/zabbix_agentd.log

17468:20160422:164350.284 IPv6 support:          YES

17468:20160422:164350.284 TLS support:           YES

17468:20160422:164350.284**************************

17468:20160422:164350.284 using configurationfile: /etc/zabbix/zabbix_agentd.conf

17468:20160422:164350.293 agent #0 started[main process]

17469:20160422:164350.294 agent #1 started[collector]

17470:20160422:164350.294 agent #2 started[listener #1]

17471:20160422:164350.294 agent #3 started[listener #2]

17472:20160422:164350.295 agent #4 started[listener #3]

17473:20160422:164350.295 agent #5 started[active checks #1]

8.2问题is not suitable for value type [Numeric (unsigned)] and datatype [Decimal]

12394:20160422:200640.676 error reason for "db_master_1:mysql.status[Questions]" changed: Received value [Warning: Using a password on the command line interface can be insecure.18463244] is not suitable for value type [Numeric (float)]

12393:20160422:200642.678 error reason for "db_master_1:mysql.status[Uptime]" changed: Received value [Warning: Using a password on the command line interface can be insecure.580661] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]

后台zabbix服务器日志:

[root@hch_test_121_12 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.1..71 -p10050 -k mysql.status[Com_update]

Warning: Using a password on the command line interface can be insecure.

92315

[root@hch_test_121_12 ~]#

解决办法是,在zabbix客户端,添加用户名密码配置,这样避免shell密码外泄也不会报错,(这里报这种错误是因为返回的结果集中有字符串提醒信息,而后台zabbix的item的是decimal所以存储不进去报错):

vim /usr/local/mysql/my.cnf

[mysqladmin]

user=zabbix

password=ys_ipowerlong0418

然后重启zabbix_agent

然后在后台zabbix测试,没有报多余的信息:

[root@hch_test_121_12 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.1..71 -p10050 -k mysql.status[Com_insert]

58272

[root@hch_test_121_12 ~]#

之后再看zabbix_server后台日志,正常了不会报错了,如下所示:

12855:20160422:233520.636 item "db_master_2:mysql.status[Bytes_received]" became supported

12857:20160422:233521.636 item "db_master_2:mysql.status[Bytes_sent]" became supported

12854:20160422:233522.637 item "db_master_2:mysql.status[Com_begin]" became supported

12856:20160422:233523.638 item "db_master_2:mysql.status[Com_commit]" became supported

12857:20160422:233524.641 item "db_master_2:mysql.status[Com_delete]" became supported

12855:20160422:233525.642 item "db_master_2:mysql.status[Com_insert]" became supported

12856:20160422:233526.642 item "db_master_2:mysql.status[Com_rollback]" became supported

12854:20160422:233527.643 item "db_master_2:mysql.status[Com_select]" became supported

12855:20160422:233528.645 item "db_master_2:mysql.status[Com_update]" became supported

12857:20160422:233529.646 item "db_master_2:mysql.status[Questions]" became supported

12856:20160422:233530.646 item "db_master_2:mysql.status[Slow_queries]" became supported

8.3报错Check access restrictions in Zabbix agent configuration:

[root@hch_test_121_12 alertscripts]#zabbix_get -s 192.168.1..72 -p10050 -k "system.hostname";

zabbix_get [17730]: Check accessrestrictions in Zabbix agent configuration

[root@hch_test_121_12 alertscripts]#

解决:

配置文件坏了,copy一个备份的过来,改下,重启agent。

在zabbix服务器上测试:

[root@hch_test_121_12 alertscripts]#/usr/local/zabbix/bin/zabbix_get -s 192.168.1.63 -p10050 -k mysql.ping

(Not all processes could be identified,non-owned process info

willnot be shown, you would have to be root to see it all.)

0

[root@hch_test_121_12 alertscripts]#

去mysql服务器上赋予s权限

[root@db_m1_slave2 soft]# chmod +s /bin/netstat

You have new mail in /var/spool/mail/root

[root@db_m1_slave2 soft]#

8.4 zabbix_get [1291]: Get value error

[root@hch_test_121_12 ~]#/usr/local/zabbix/bin/zabbix_get -s 192.168.1.21 -p10050 -k system.info

zabbix_get [1291]: Get value error: cannotconnect to [[10.254.1.21]:10050]: [111] Connection refused

[root@hch_test_121_12 ~]#