码迷,mamicode.com
首页 > 其他好文 > 详细

深入理解zabbix(二)

时间:2019-07-20 23:04:04      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:print   差值   为我   精确   qq邮箱   打开   版本号   res   amp   

深入理解zabbix(二)

1.Zabbix Web操作深入

1.1 Zabbix Web下的主机和模版以及监控项的添加方式

(1)创建一个模版
我们所有的功能几乎都是在模版中定义的

技术图片

我们再点进新创建的模版查看,模版里几乎可以设定我们需要的所有功能

技术图片

技术图片
(2)在模版里创建应用集
应用集的作用就是将众多的监控项进行一个分类,方便我们的管理

技术图片

技术图片

技术图片
(3)在模版里创建一个zabbix自带的监控项
技术图片

技术图片
(4)监控项里的键值我们到底要如何写?我们需要学会照葫芦画瓢
我们选择一个系统模版Template OS Linux查看

技术图片

技术图片

技术图片

技术图片
当然我们也可以自定义监控项的键值,但是并不推荐这样。因为,都是自己写太慢了。系统自带了很多键值我们要学会利用

1.2 Zabbix Web下触发器与表达式的编写方法

1.2.1 avg

  • 参数:秒或#num
  • 支持类型:float,int
  • 作用:返回一段时间的平均值
举例:
avg(5):最后5秒的平均值
avg(#5):表示最近5次得到值的平均值
avg(3600,86400):表示一天前的一个小时的平均值
如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,#n表示最近n次的值

1.2.2 last

  • 参数:秒或#num
  • 支持值类型:float,int,str,text,log
  • 作用:最近的值,如果为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的。
last(0)等价于last(#1)
last(#3)表示最近第3个值(并不是最近的三个值)
本函数也支持第二个参数time_shift,例如last(0,86400)返回一天前的最近的值。
如果在history中同一秒中有多个值存在看,Zabbix不保证值的精确顺序#num从Zabbix1.6.2起开始支持,timeshift从1.8.2起开始支持,可以查询avg()函数获取它的使用方法

1.2.3 max

  • 参数:秒或#num
  • 支持值类型:float,int
  • 描述:返回指定时间间隔的最大值。时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#)。从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法。
  • 例如:max(#3)=0 返回3次值如果都是0则触发告警

1.2.4 min

  • 参数:秒或#num
  • 支持值类型:float,int
  • 描述:返回指定时间间隔的最小值。时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#)。从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法。

1.2.5 nodata

  • 参数:秒
  • 支持值类型:any
  • 描述:当返回值为1表示指定的间隔(间隔不应小于30秒)没有接收到数据,0表示获取到了。
  • 例:nodata(5m)=1 ===>5分钟之内获取不到数据就告警

1.2.6 prev

  • 参数:忽略
  • 支持值类型:float,int,str,text,log
  • 描述:返回之前的值,类似于last(#2)

1.2.7 sum

  • 参数:秒或#num
  • 支持值类型:float,int
  • 描述:返回指定时间间隔中收集到的值的总和,时间间隔作为第一个参数支持秒或收集值的数目(以#开始).从Zabbix1.8.2开始,本函数支持time_shift作为第二个参数。可以查看avg函数获取它的用法。

1.2.8 change

  • 参数:忽略
  • 支持类型:float,int,str,text,log
  • 作用:返回最近获得值与之前获得值的差值,对于字符串0表示相等,1表示不同
  • change(0)>n:忽略参数一般输入0,表示最近得到的值与上一个值的差值大于n

1.2.9 diff

  • 参数:忽略
  • 支持值类型:float,init,str,text,log
  • 作用:返回值为1,表示最近的值与之前的值不同,0为相同。
  • 例如:diff(0)>0 ===>表示现在获取的值如果和之前的不同就告警

例如:
技术图片

技术图片

1.3 Zabbix Web创建触发器过程以及触发器与监控项对应关系

创建一个触发器,我们之前已经创建了一个检测内存剩余大小的监控项,现在我们给这个监控项加一个触发器。当内存小于20M时,触发报警

技术图片

技术图片

技术图片
(2)进行表达器测试
技术图片

技术图片

技术图片

技术图片

技术图片

表达式测试成功后,我们创建完毕即可

(3)在服务端进行监控项数据获取测试

技术图片

监控项表达式说明
{aaaa:vm.memory.size[available].last()}<20M
aaaa:模版名
vm.memory.size:zabbix监控端向被监控端发送的代号
.last()<20 :last()<===>last(0)<===>last(#1)

[root@Zabbix-Server /]# zabbix_get -s 192.168.200.84 -k "vm.memory.size"
1021906944       #获取对应IP的全部内存总量
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.84 -k "vm.memory.size[available]"
517849088        #获取对应IP的剩余内存总量

1.4 再创建一个监控项同时创建它的触发器

(1)快速创建一个Agent_ping监控项

技术图片

技术图片
(2)在监控端测试监控项的键值

[root@Zabbix-Server /]# zabbix_get -s 192.168.200.84 -k "agent.ping"
1
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.85 -k "agent.ping"
1
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.86 -k "agent.ping"
zabbix_get [52229]: Get value error: cannot connect to [[192.168.200.86]:10050]: [113] No route to host

我们发现如果对方服务器IP能ping通,则返回值是1。反之不是1就有问题

(3)创建监控项的告警触发器
技术图片

技术图片

技术图片

2. Zabbix常用模版与触发器功能详解

(1){Template App Zabbix Agent:agent.version.diff(0)}>0

解释:如果当前获取的agent客户端的版本号大于前一次的不同,那么触发告警

(2){Template App Zabbix Agent:agent.ping.nodata(5m)}=1

解释:如果ping客户端在5分钟内都没有数据,那么触发告警

(3){Template OS AIX:vm.memory.size[available].last(0)}<20M

解释:如果最后一次获取的空闲内存大小得值小于20M,那么触发告警

(4){Template App SSH Service:net.tcp.service[ssh].max(#3)}=0

解释:如果ssh远程连接连续获取的3次值的最大值都是0,那么触发告警

(5){Template ICMP Ping:icmppingloss.min(5m)}>20

解释:如果连续5分钟里获取的最小值都大于20,那么触发告警

(6){Template ICMP Ping:icmppingsec.avg(5m)}>0.15

解释:如果连续5分钟内的平均值大于0.15,那么触发告警

3. Zabbix报警媒介类型设置和告警动作、频率设置

3.1 QQ邮件告警平台

3.1.1 安装sendmail

[root@Zabbix-Server yuanmabao]# yum -y install perl-Net-SSLeay perl-IO-Socket-SSL
[root@Zabbix-Server yuanmabao]# rpm -qa perl-Net-SSLeay perl-IO-Socket-SSL
perl-IO-Socket-SSL-1.94-7.el7.noarch
perl-Net-SSLeay-1.55-6.el7.x86_64
[root@Zabbix-Server yuanmabao]# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@Zabbix-Server yuanmabao]# tar xf sendEmail-v1.56.tar.gz -C /usr/local/
[root@Zabbix-Server yuanmabao]# cd /usr/local/sendEmail-v1.56/
[root@Zabbix-Server sendEmail-v1.56]# /bin/cp -ra sendEmail /usr/local/bin/
[root@Zabbix-Server sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail 
[root@Zabbix-Server sendEmail-v1.56]# which sendmail
/usr/sbin/sendmail

3.1.2 sendmail命令使用说明

命令/参数 内容 解释说明
/usr/local/bin/sendEmail 命令主程序
-f from@163.com 发件人邮箱
-t to@163.com 收件人邮箱
-s smtp.163.com 发件人邮箱的smtp服务器
-u "我是邮件主题" 邮件的标题
-o message-content-type=html 邮件内容的格式,html表示它是html格式
-o message-charset=utf8 邮件内容编码
-xu from@163.com 发件人邮箱的用户名
-xp 123456 发件人邮箱密码(授权码)
-m "我是邮件内容" 邮件的具体内容

3.1.3 调整QQ邮箱设置

技术图片

技术图片

3.1.4 测试邮件发送

[root@Zabbix-Server sendEmail-v1.56]# sendEmail -f 1773464408@qq.com -t 1773464408@qq.com -u "zabbix_server" -s smtp.qq.com -o message-content-type=html -o message-charset=utf8 -xu 1773464408@qq.com -xp qmbblgrfwjsngeef -m "邮件发送成功"
Sep 20 23:29:09 zabbix-server sendEmail[24645]: Email was sent successfully!

技术图片

3.1.5 编写QQ邮件平台报警脚本

[root@Zabbix-Server alertscripts]# pwd
/usr/local/zabbix/share/zabbix/alertscripts
[root@Zabbix-Server alertscripts]# cat sendmail.sh 
#!/bin/bash
# author:Mr.yang

to=$1

subject=$2

body=$3

from=1773464408@qq.com
smtp=smtp.qq.com

passwd=qmbblgrfwjsngeef

/usr/local/bin/sendEmail -f "$from" -t "$to" -s "$smtp" -u "$subject" -o message-content-type=html -o message-charset=utf8 -xu "$from" -xp "$passwd" -m "$body"
[root@Zabbix-Server alertscripts]# chmod +x sendmail.sh
[root@Zabbix-Server alertscripts]# chown zabbix.zabbix sendmail.sh

3.1.6 脚本测试

[root@Zabbix-Server alertscripts]# sh sendmail.sh 1773464408@qq.com "hello world" "加油"
Sep 20 23:36:21 zabbix-server sendEmail[24784]: Email was sent successfully!

技术图片

3.1.7 修改zabbix_server.conf配置文件

[root@Zabbix-Server /]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
   447  AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
[root@Zabbix-Server /]# /etc/init.d/zabbix_server restart
Shutting down zabbix_server:                               [  OK  ]
Starting zabbix_server:                                    [  OK  ]

3.1.8 创建报警媒介

技术图片

技术图片

技术图片

技术图片

技术图片

3.1.9 创建报警动作

技术图片

技术图片

技术图片

技术图片

  • 步骤1-3也就是从1开始到3结束。一旦发生故障,就是执行sendmail.sh脚本发生报警邮件给zabbix用户。
  • 假如故障持续了1个小时,它也只发送3次,第1-3次(即前3次)邮箱发送给zabbix用户,时间间隔为0秒。
  • 如果改成1-0,0是表示不限制,无限发送。

技术图片

技术图片

3.1.10 QQ邮件报警测试

给自定义监控项nginx.avtive创建一个触发器,如下

技术图片

利用Web进行访问,增加活动连接数,触发报警

3.2 微信报警平台

3.2.1 注册微信报警平台并绑定微信号

企业号注册连接:https://qy.weixin.qq.com/cgi-bin/loginpage

技术图片

技术图片

技术图片

技术图片

技术图片

3.2.2 编写微信平台报警脚本

编写脚本前,我们需要先记住3个关键的参数

(1)企业的CorpID

技术图片

(2)企业的Secret

技术图片

技术图片

(3)部门ID号

技术图片

(4) 然后我们就可以编写微信告警脚本了,如下:

[root@Zabbix-Server alertscripts]# pwd
/usr/local/zabbix/share/zabbix/alertscripts
[root@Zabbix-Server alertscripts]# cat weixin.sh 
#!/bin/bash
# author:Mr.yang

CropID="ww45df4e64ff22e4ac"     #这里填写我们的应用的CropID      
  
Secret="oLTRwXIQ4Ej5KpAntL5dmonfq59wsUY-EuN3jdUM-Vs"
#这里是应用的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() {
        local int AppID=1000002      #这里是创建的应用ID
        local UserID=$1                   #接收消息用户,系统传参
        local PartyID=1                    #接收消息的部门ID
        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

3.2.3 脚本测试

[root@Zabbix-Server alertscripts]# chmod +x weixin.sh
[root@Zabbix-Server alertscripts]# chown zabbix.zabbix weixin.sh
[root@Zabbix-Server alertscripts]# sh weixin.sh yangwenbo19971108 "题目" "报警内容"

#yangwenbo19971108是手机微信号,必须下载手机版的企业微信

技术图片

3.2.4 创建微信报警媒介类型

技术图片

技术图片

技术图片

技术图片

4. 用户参数User parameters

4.1 概述

有时候当我们监控的项目在Zabbix预定义的key中没有定义时,这时候我们可以通过编写Zabbix的用户参数的方法来监控我们要求的项目item。形象一点说Zabbix代理端配置文件中的User parameters就相当于通过脚本获取要监控的值,然后把相关的脚本或者命令写入到配置文件中的User parameter中,然后Zabbix server读取配置文件中的返回值通过处理前端的方式返回给用户。

(1)用户参数的语法
UserParameter=<key>,<command>

其中,Userparameter为关键字,key为用户自定义key名字可以随便起,为我们要运行的命令或者脚本。

(2)一个简单的例子:
UserParameter=ping,echo 1

代理程序将会永远的返回1,当我们在服务器端添加item的key为ping的时候

(3)稍微复杂的例子:
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin ping | grep -c alive

  • 当我们执行mysqladmin -uroot ping命令的时候如果mysql存活要返回mysqld is alive,我们通过grep -c来计算mysqld is alive的个数,如果mysql存活着,则个数为1,如果不存活很明显mysqld is alive的个数为0,通过这种方法我们可以来判断mysql的存活状态。
  • 当我们在服务器端添加item的key为mysql.ping时候,对于Zabbix代理程序,如果mysql存活,则状态将返回1,否则,状态将返回0。

4.2 让key接受参数

让key也接受参数的方法使item添加时更具备了灵活性,例如系统预定义key:vm.memory.size[],其中的mode模式就是用户要接受的参数,当我们填写为free时则返回的为内存的剩余大小,如果我们填入的为userd时这返回的是内存已经使用的大小。

相关语法
UserParameter=key[*],command

#描述:
key:key的值在主机系统中必须是唯一的,其中*代表命令中接受的参数
command:客户端系统中可执行的命令
#举例:
UserParameter=ping[*],echo $1
ping[0]:此时0就是*,也就是传入参数是0,$1也就是0,因此表达式将一直返回‘0’
ping[aaa]:此时aaa就是*,也就是传入参数是aaa,$1也就是aaa,因此表达式将一直返回‘aaa’

4.3 让我们自定义一个可以传递参数的监控项

我们做一个可以根据条件获取内存数值大小的监控项mem_check

  • 当我们键值为mem_check[free]时,获取剩余可用内存大小
  • 当我们键值为mem_check[used]时,获取实际占用内存大小
  • 当我们键值为mem_check时,获取总内存大小

4.3.1 我们先制作一个获取数据的脚本

[root@Zabbix-Server /]# mkdir -p /server/scripts
[root@Zabbix-Server /]# cd /server/scripts/
[root@Zabbix-Server scripts]# cat mem_check 
#!/bin/bash
# author:Mr.yang

case $1 in
    free)
        echo "`free | awk 'NR==3{print $4}'`"
        ;;
    used)
        echo "`free | awk 'NR==3{print $3}'`"
        ;;
    *)
        echo "`free | awk 'NR==2{print $2}'`"
        ;;
esac

4.3.2 测试脚本

[root@Zabbix-Server scripts]# chmod +x mem_check
[root@Zabbix-Server scripts]# chown zabbix.zabbix mem_check
[root@Zabbix-Server scripts]# sh mem_check
1004412
[root@Zabbix-Server scripts]# sh mem_check free
720928
[root@Zabbix-Server scripts]# sh mem_check used
283596

4.3.3 后台自定义一个监控项的键值

[root@Zabbix-Server /]# cd /etc/zabbix/zabbix_agentd.d/
[root@Zabbix-Server zabbix_agentd.d]# cat mem_check.conf 
UserParameter=mem.check[*],/server/scripts/mem_check $1

4.3.4 测试自定义的键值

#重启zabbix-agent客户端
[root@Zabbix-Server zabbix_agentd.d]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                          [  OK  ]
[root@Zabbix-Server zabbix_agentd.d]# zabbix_get -s 192.168.200.89 -p 10050 -k "mem.check"
1004412
[root@Zabbix-Server zabbix_agentd.d]# zabbix_get -s 192.168.200.89 -p 10050 -k "mem.check[free]"
720564
[root@Zabbix-Server zabbix_agentd.d]# zabbix_get -s 192.168.200.89 -p 10050 -k "mem.check[used]"
283916

4.3.5 前台自定义一个监控项及触发器

5. Agentd主动模式与被动模式

(1)默认情况下,zabbix server会直接去每个agent上抓取数据,这对于agent来说,是被动模式,也是默认的一种获取数据的方式,但是,当zabbix server监控主机数量过多的时候,由server端去抓取agent上的数据,zabbix server会出现严重的性能问题,主要表现如下:

  • Web操作很卡,容易出现502
  • 图层断裂
  • 开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题

(2)所以,下面主要往两个优化方向考虑:

  • 用Proxy或者Node模式做分布式监控
  • 调整Agentd为主动模式

5.1 Agentd的配置调整

修改zabbix_agentd.conf配置文件,注意是打开如下参数:

ServerActive=192.168.200.89
Hostname=192.168.200.89
StartAgents=1

ServerActive是指定Agentd收集的数据往哪里发送,Hostname是必须要和zabbix web端添加主机时的主机名对应起来,这样zabbix server端接收到数据才能找到对应关系,这里为了兼容被动模式,没有把StartAgents设为0,如果一开始就是使用主动模式的话建议把StartAgents设为0,关闭被动模式。

5.2 zabbix Server端配置调整

如果开启了agent端的主动发送数据模式,需要在zabbix Server端修改如下两个参数,保证性能。

StartPollers=10     #把这个zabbix Server主动收集数据进程减少一些。
StartTrappers=200   #把这个负责处理Agentd推送过来的数据的进程开大一些。

5.3 调整模版

  • 因此收集数据的模式发生了变化,因此需要把所有的监控项的类型由原来的“zabbix客户端”改成“zabbix客户端(主动式)”。
  • 这样,只需要简单的几步,就完成了主动模式的切换,调整之后服务器不卡了,图层不裂了,进程也少了。

深入理解zabbix(二)

标签:print   差值   为我   精确   qq邮箱   打开   版本号   res   amp   

原文地址:https://www.cnblogs.com/ywb123/p/11219500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!