zabbix+grafana模拟案例

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)

配置完成后:

 zabbix+grafana模拟案例_第1张图片

(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+grafana模拟案例_第2张图片

登录后,启用zabbix插件:

zabbix+grafana模拟案例_第3张图片

添加Data Sources,并保存测试连通性:

 zabbix+grafana模拟案例_第4张图片

 zabbix+grafana模拟案例_第5张图片

注意:

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]

 zabbix+grafana模拟案例_第6张图片

 

(3)服务器端配置

首先,创建添加新template,然后在新的template中添加Discovery rule:

 zabbix+grafana模拟案例_第7张图片

创建完后,编辑创建Discovery rule的Item prototypes:

这里以status_disk.iostats.rps为例,注意”#DISKNAME”就是dicover_disk.sh脚本中的参数:

 zabbix+grafana模拟案例_第8张图片

创建完成所有item prototype,如下图所示:

 zabbix+grafana模拟案例_第9张图片

创建完成模板后,添加客户主机,并关联新建的diskcover_disk模板:

 zabbix+grafana模拟案例_第10张图片

保存后,客户主机就会自动加载items:

zabbix+grafana模拟案例_第11张图片

添加trigger,因为使用虚拟机进行模拟,这里设置IO写速度超过100KB/s就触发报警,同时将级别设置到最高级别:

 zabbix+grafana模拟案例_第12张图片

 zabbix+grafana模拟案例_第13张图片

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:

 zabbix+grafana模拟案例_第14张图片

配置用户:

Administration-->Users,配置管理员admin,添加media:

 zabbix+grafana模拟案例_第15张图片

配置动作:

Configuration --> Actions

zabbix+grafana模拟案例_第16张图片

 

添加完成后,保存,并激活这条行动,当触发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

测试成功:

zabbix+grafana模拟案例_第17张图片

6、grafana图形导入:

新建graph,配置Metrics导入数据,图像自动出来:

 zabbix+grafana模拟案例_第18张图片

最终结果展示(前段图像是在status_disk.sh修改前数据,有着很大的延迟性,最后的才是正常的修正后的数据,第一幅图“sda每秒数据读写量的尖峰”的尖峰是修正后进行报警测试产生的):

 zabbix+grafana模拟案例_第19张图片

到此,情景要求全部完成。

 

 

你可能感兴趣的:(linux杂谈)