zabbix+grafana模拟案例
一、案例要求
1、zabbix+grafana环境部署(以centos6为例)
2、监控磁盘的IO(通过zabbix自动发现功能)
3、实现邮件告警
二、具体实施步骤
准备两台机器,服务器IP:192.168.5.103 ,客户端IP:192.168.5.13
1、zabbbix搭建
(1)yum install -y epel-release
安装rpm包的lamp环境
yum install -y httpd mysql mysql-libs php php-mysql mysql-server php-bcmath php-gd php-mbstring
安装zabbix服务端:
yum install -y zabbix22 zabbix22-agent zabbix22-server zabbix22-server-mysql zabbix22-web zabbix22-web-mysql net-snmp-devel
/etc/init.d/zabbix-server start
/etc/init.d/zabbix-agent start
/etc/init.d/httpd start
修改一下mysql配置文件
vim /etc/my.cnf //修改或增加如下内容
[mysql]
default-character-set = utf8
[mysqld]
character_set_server = utf8
启动mysql服务
/etc/init.d/mysqld start
建库,导入数据
mysql -uroot -e "create database zabbix"
mysql -uroot -e "grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'"
mysql -uroot --default-character-set=utf8 zabbix < /usr/share/zabbix-mysql/schema.sql
mysql -uroot --default-character-set=utf8 zabbix < /usr/share/zabbix-mysql/images.sql
mysql -uroot --default-character-set=utf8 zabbix < /usr/share/zabbix-mysql/data.sqls
(2)打开浏览器,输入ip/zabbix进行网页配置(此处略,具体可以参考http://blog.csdn.net/nplbnb12/article/details/79430861)
配置完成后:
(3)服务端安装zabbix-agent
yum install -y zabbix22-agent
vi /etc/zabbix_agentd.conf指定服务器IP
Server=192.168.5.103
/etc/init.d/zabbix-agentd start
2、grafana搭建
(1)
cd /usr/local/src
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.1-1.x86_64.rpm
yum install urw-fonts
rpm grafana-5.0.1-1.x86_64.rpm
chkconfig --add grafana-server
chkconfig grafana-server on
service grafana-server start
(2)配置Grafana的Zabbix插件:
grafana-cli plugins install alexanderzobnin-zabbix-app
安装完成后重启grafana
service grafana-server restart
如果显示服务器失败可以使用git来获取:
yum install -y git
cd /var/lib/grafana/plugins
git clone https://github.com/alexanderzobnin/grafana-zabbix-app
同样需要重启grafana
(3)浏览器访问http://192.168.5.103:3000/进行网页配置,默认账号密码admin admin:
登录后,启用zabbix插件:
添加Data Sources,并保存测试连通性:
注意:
a、Type要选择Zabbix,如果没有这个选项,说明zabbix插件没有正确激活或者安装
b、Zabbix的API地址为:
http://192.168.5.103/zabbix/api_jsonrpc.php
c、Zabbix的API账号密码就是Zabbix的Web端登录账号和密码
3、磁盘IO监控(通过zabbix自动发现功能)实现
(1)在客户端编写磁盘自动发现脚本和磁盘IO状态数据获取脚本,主要利用iostat -dxkt这条命令,其中:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
r_await: 平均每次IO读请求等待时间(包括等待时间和处理时间,毫秒为单位)
w_await: 平均每次IO写请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
vim /etc/zabbix/sh/discover_disk.sh
#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg]\b|\bvd[abcdefg]\b"|grep -i "\b$1\b"|awk '{print $3}'|sort|uniq 2>/dev/null`)
length=${#diskarray[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#DISKNAME}\":\"${diskarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
vim /etc/zabbix/sh/status_disk.sh
#/bin/sh
Device=$1
DISK=$2
case $DISK in
rrqm)
iostat -dxkt |grep "\b$Device\b"|tail -1|awk '{print $2}'
;;
wrqm)
iostat -dxkt |grep "\b$Device\b"|tail -1|awk '{print $3}'
;;
rps)
iostat -dxkt |grep "\b$Device\b"|tail -1|awk '{print $4}'
;;
wps)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $5}'
;;
rKBS)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $6}'
;;
wKBS)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $7}'
;;
avgrq-sz)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $8}'
;;
avgqu-sz)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $9}'
;;
await)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $10}'
;;
r_await)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $11}'
;;
w_await)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $12}'
;;
svctm)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $13}'
;;
util)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $14}'
;;
esac
注意:该脚本有问题,需要将所有的iostat -dxkt替换成isostat -dxkt 1 2,否则统计的数据不是实时数据!
编辑客户端配置文件,添加自定义key:
vim /etc/zabbix_agentd.conf
UserParameter=discover.disk,/etc/zabbix/sh/discover_disk.sh
UserParameter=status_disk.iostats.rrqm[*],/etc/zabbix/sh/status_disk.sh $1 "rrqm"
UserParameter=status_disk.iostats.wrqm[*],/etc/zabbix/sh/status_disk.sh $1 "wrqm"
UserParameter=status_disk.iostats.rps[*],/etc/zabbix/sh/status_disk.sh $1 "rps"
UserParameter=status_disk.iostats.wps[*],/etc/zabbix/sh/status_disk.sh $1 "wps"
UserParameter=status_disk.iostats.rKBS[*],/etc/zabbix/sh/status_disk.sh $1 "rKBS"
UserParameter=status_disk.iostats.wKBS[*],/etc/zabbix/sh/status_disk.sh $1 "wKBS"
UserParameter=status_disk.iostats.avgrq-sz[*],/etc/zabbix/sh/status_disk.sh $1 "avgrq-sz"
UserParameter=status_disk.iostats.avgqu-sz[*],/etc/zabbix/sh/status_disk.sh $1 "avgqu-sz"
UserParameter=status_disk.iostats.await[*],/etc/zabbix/sh/status_disk.sh $1 "await"
UserParameter=status_disk.iostats.r_await[*],/etc/zabbix/sh/status_disk.sh $1 "r_await"
UserParameter=status_disk.iostats.w_await[*],/etc/zabbix/sh/status_disk.sh $1 "w_await"
UserParameter=status_disk.iostats.svctm[*],/etc/zabbix/sh/status_disk.sh $1 "svctm"
UserParameter=status_disk.iostats.util[*],/etc/zabbix/sh/status_disk.sh $1 "util"
重启zabbix-agent服务:
service zabbix-agentd restart
在服务器端,测试客户端新增键是否正常:
zabbix_get -s 192.168.5.13 -k discover.dis
zabbix_get -s 192.168.5.13 -k status_disk.iostats.rrqm[sda]
(3)服务器端配置
首先,创建添加新template,然后在新的template中添加Discovery rule:
创建完后,编辑创建Discovery rule的Item prototypes:
这里以status_disk.iostats.rps为例,注意”#DISKNAME”就是dicover_disk.sh脚本中的参数:
创建完成所有item prototype,如下图所示:
创建完成模板后,添加客户主机,并关联新建的diskcover_disk模板:
保存后,客户主机就会自动加载items:
添加trigger,因为使用虚拟机进行模拟,这里设置IO写速度超过100KB/s就触发报警,同时将级别设置到最高级别:
4、配置邮件报警:
yum install -y sendmail
mkdir -p /home/zabbix/bin
vim /home/zabbix/bin/baojing.sh :
#!/bin/bash
echo "$3"|/bin/mail -s "$2" $1
添加执行权限:
chmod +x /home/zabbix/bin/baojing.sh
在zabbix_server.conf配置文件中,
AlertScriptsPath=/home/zabbix/bin/ //定义告警脚本路径
ExternalScripts=/home/zabbix/bin/ //定义的检查的脚本
重启zabbix-server服务:
service zabbix-server restart
在zabbix的web界面,Administration-->Media types-->create Media type:
配置用户:
Administration-->Users,配置管理员admin,添加media:
配置动作:
Configuration --> Actions
添加完成后,保存,并激活这条行动,当触发triggers时,就会自动发送邮件。
5、测试邮件报警
磁盘测试脚本:
#!/bin/bash
if [ -d /tmp/test ]
then
rm -rf /tmp/test
fi
mkdir /tmp/test
for i in `seq 1 1000`
do
/bin/cp 1.txt /tmp/test/"$i".txt
done
测试成功:
6、grafana图形导入:
新建graph,配置Metrics导入数据,图像自动出来:
最终结果展示(前段图像是在status_disk.sh修改前数据,有着很大的延迟性,最后的才是正常的修正后的数据,第一幅图“sda每秒数据读写量的尖峰”的尖峰是修正后进行报警测试产生的):
到此,情景要求全部完成。