Zabbix部署 监控数据库 报警服务(二) 终
接着zabbix(一)接着部署
配置过一段时间后,观察下监控图效果出来了没
zabbix3.0 server已自带mysql的模板了,只需配置好agent客户端,然后在web端给主机增加模板就行了。
Zabbix_agent客户端操作
(1)首先在客户端的mysql里添加权限,即本机使用zabbix账号连接本地的mysql
mysql> grant all on *.* to zabbix@'localhost' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)
(2)在zabbix_agent服务目录下创建.my.cnf 连接文件
zabbix安装目录是/usr/local/zabbix
[root@localhost etc]# pwd
/usr/local/zabbix/etc
[root@localhost etc]# cat .my.cnf
[client]
user=zabbix
password=123456
注意:
如果在数据库grant授权时,针对的是localhost,这个.my.cnf里面就不用加host参数了【如上配置】
但如果grant授权时针对的是本机的ip(如192.168.31.250),那么在.my.cnf文件里就要加上host参数进行指定了
即在.my.cnf文件就要加上:
host=192.168.0.7
socket= /usr/local/mysql/mysql.sock
user=zabbix
password=123456
(3)配置MySQL的key文件
这个可以从zabbix3.2安装时的解压包里拷贝过来
从zabbix_server服务端安装时解压目录
/root/zabbix-3.2.1/conf/zabbix_agentd/userparameter_mysql.conf 拷贝到zabbix_agent客户端上的/usr/local/zabbix/etc/zabbix_agentd.conf.d/ 目录下的
[root@localhost zabbix]# cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/
[root@localhost zabbix_agentd.conf.d]# pwd
/usr/local/zabbix/etc/zabbix_agentd.conf.d
[root@localhostzabbix_agentd.conf.d]#,cp,/usr/src/zabbix-3.2.1/conf/zabbix_agentd/userparameter_mysql.conf ./
[root@localhost zabbix_agentd.conf.d]# ls userparameter_mysql.conf
userparameter_mysql.conf
然后查看 userparameter_mysql.conf 文件,看到类似 HOME=/var/lib/zabbix 的路径设置,把路径全都替换为 /usr/local/zabbix/etc/,也就是上面的.my.cnf文件所在的目录路径。
另外,注意userparameter_mysql.conf 文件里的mysql命令路径(提前做好mysql的系统环境变量,以防mysql命令不被系统识别)
如下:
[root@server1 zabbix_agentd.conf.d]# cat userparameter_mysql.conf
# 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=/usr/local/zabbix/etc/ 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=/usr/local/zabbix/etc/ mysql -N'
UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc/ mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
(4)按照上面修改完之后检查一下,然后重启zabbix_agent
接着在zabbix_server服务端进行命令行测试[下面的192.168.0.7是客户端的ip]
若下面报错
[root@localhost zabbix]# /usr/local/zabbix/bin/zabbix_get -s 192.168.0.7 -p 10050 -k "mysql.status[Uptime]"
sh: mysql: command not found
解决方法:
在userparameter_mysql.conf中关于mysql命令前面添加绝对路径
[root@localhost /]# /usr/local/zabbix/bin/zabbix_get -s 192.168.0.7 -p 10050 -k "mysql.status[Uptime]"
169
如果出现类似这一串key的数字,就说明配置ok,服务端能监控到客户端的mysql数据了!
成功啦,之后在监控界面增加主机对应的MySQL模板就ok了。
注:zabbix_get命令介绍
参数说明:
-s --host:指定客户端主机名或者IP
-p --port:客户端端口,默认10050
-I --source-address:指定源IP,写上zabbix server的ip地址即可,一般留空,服务器如果有多ip的时候,你指定一个。
-k --key:你想获取的key
zabbix_get获取数据
获取负载
# zabbix_get -s 192.168.31.250 -p 10050 -k "system.cpu.load[all,avg15]"
获取主机名
# zabbix_get -s 192.168.31.250 -p 10050 -k "system.hostname"
(5)登录zabbix监控界面,在“配置”-“模板”里可以看到自带的mysql监控模板
在相应主机监控配置里添加mysql的监控模版(zabbix自带的)即可。
下面是mysql监控项的效果图:
【1】监控mysql的带宽:在zabbix前端可以实时查看mysql发送接收的字节数。其中bytes received表示从所有客户端接收到的字节数,bytes sent表示发送给所有客户端的字节数。
mysql数据库已经成功检测上
监控mysql网卡情况
zabbix3.2.1邮件报警设置:
Zabbix监控服务端、客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常。
在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱。
具体操作:
以下操作在Zabbix监控服务端进行
下载sendemail软件
然后安装那两个依赖包,命令是:
[root@localhost ~]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y
解压软件,然后将sendemail复制到/usr/local/bin/目录下,并加上可执行权限,然后修改用户和群组。
[root@localhost src]# tar zxf sendEmail-v1.56.tar.gz
[root@localhost src]# cd sendEmail-v1.56/
[root@localhost sendEmail-v1.56]# cp sendEmail /usr/local/bin/sendEmail
[root@localhost sendEmail-v1.56]# chown zabbix:zabbix /usr/local/bin/sendEmail
[root@localhost sendEmail-v1.56]# ll /usr/local/bin/sendEmail
-rwxr-xr-x. 1 zabbix zabbix 80213 Jan 4 17:52 /usr/local/bin/sendEmail
进入/usr/local/zabbix/share/zabbix/alertscripts/目录执行# /usr/local/bin/sendEmail -h查看sendEmail的帮助
#/usr/local/bin/sendEmail -f xinwang1360@163.com -t xinwang1360@163.com -s smtp.163.com -u "hello" -o message-content-type=html -o message-charset=utf8 -xu xinwang1360@163.com -xp 密码 -m "chai xin wang wei wu "
命令主要选项说明:
/usr/local/bin/sendEmail #命令主程序
-f xinwang1360@163.com #发件人邮箱
-t xinwang1360@163.com #收件人邮箱
-s smtp.163.com #发件人邮箱的smtp服务器
-u "我是邮件主题" #邮件的标题
-o message-content-type=html #邮件内容的格式,html表示它是html格式
-o message-charset=utf8 #邮件内容编码
-xu xinwang1360@163.com #发件人邮箱的用户名
-xp 密码 #发件人邮箱密码
-m "我是邮件内容" #邮件的具体内容
发送成功验证效果 效果完成
然后在这个目录下创建报警脚本sendmail.sh
[root@mysqla alertscripts]# vi mail.sh
下面是脚本内容(涂颜色部分是你的邮箱和密码,-f和-xu参数后面跟邮箱,-xp后面跟授权码)
#!/bin/bash
to=$1
subject=$2
body=$3
/usr/local/bin/sendEmail -f xinwang1360@163.com -t xinwang1360@163.com -s smtp.163.com -u "hello" -o message-content-type=html -o message-charset=utf8 -xu xinwang1360@163.com -xp 密码 -m "chai xin wang wei wu "
如果在配置过程中出现错误可以有效快速解决 如下
at /usr/local/bin/sendEmail line 1906.
invalid SSL_version specified at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 415
注:进行发送邮件测试时,出现了第一个报错
原因是sendemail软件和perl5里面的ssl版本不兼容导致的,通过修改sendemail里面的内容可以解决这个问题。
解决方法:
在sendemail中1906行的内容,从
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
修改为
if (! IO::Socket::SSL->start_SSL($SERVER)) {
即不指定SSL的版本,让程序来自己选择
不管你使用的是163/126邮箱还是qq邮箱,你都必须开通pop3服务,而且126/qq邮箱还要求使用第三方客户端发送邮件是必须使用授权码登录,使用账号密码验证时,会出现下面图片中的错误。
sendEmail[5102]: ERROR => ERROR => SMTP-AUTH: Authentication to smtp.126.com:25 failed.
至于邮箱的授权码,自己登录126邮箱去设置就好。
经过上面两个问题的处理后就可以正常发送邮件如下所示显示成功提示
上面的邮件脚本配置好后,就要在web端添加报警媒介,在web页面的管理,报警媒介类型页面,点击右边的创建媒体类型
进入创建页面,然后输入名称“邮件报警脚本”,类型选择脚本,名称选择mail.sh,点击添加按钮,添加三个脚本参数,分别是{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESAGE},分别对于mail.sh中的to、subject和body。添加完成后点下面的添加按钮,我们的报警媒介就创建完成了
创建好报警媒介后,就需要将报警媒介关联到我们的用户。点击管理,用户,然后选择我们的用户admin也可新建一个用户,点击用户名就进入到用户配置界面。点击报警媒介,然后点添加,选择我们上一步创建的邮件报警脚本,输入收件人,选择报警时间和类型,然后点击添加,就将创建好的报警媒介关联到我们的用户上面了。
现在需要做的是,创建一个触发动作,即系统出现故障时,触发这个动作,然后给我们的邮箱发送报警邮件。点击配置,选择动作,然后点击右边的创建动作。
在动作这一页名称中写入我们定义的动作名以及触发条件
步骤是1-3,也即是从1开始到3结束。一旦故障发生,就是执行Email.sh脚本发生报警邮件给zabbix用户。
假如故障持续了1个小时,它也只发送3次,第1-3次(即前3次)邮箱发送给zabbix用户,时间间隔为0秒。
如果改成1-0,0是表示不限制.无限发送
设置“恢复操作”
添加好以后就可以看到我们添加的动作名,以及该动作已启用的状态。
最后,点击”报表“->”动作日志“,可以看到触发动作的次数