一,Zabbix Web操作深入

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

(1)创建一个模版

我们所有的功能几乎都是在模版中定义的

我们再点进新创建的模版查看

模版里几乎可以设定我们需要的所有功能

(2)在模版里创建应用集

应用集的作用就是将众多的监控项进行一个分类,方便我们的管理

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

(4)监控项里的键值我们到底要如何写?我们需要学会照葫芦画瓢

我们选择一个系统模版Template OS Linux查看

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

自定义系统监控项的键值创建,请参考前一节的知识

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

(1)avg

参数:秒或#num
支持类型:float,int
作用:返回一段时间的平均值

举例:
avg(5):最后5秒的平均值
avg(#5):表示最近5次得到值的平均值
avg(3600,86400):表示一天前的一个小时的平均值
如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,#n表示最近n次的值

(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()函数获取它的使用方法

(3)max

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

(4)min

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

(5)nodata

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

(6)prev

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

(7)sum

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

(8)change

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

(9)diff

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

例如:

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

(1)创建一个触发器

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

(2)进行表达器测试

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

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

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

[root@localhost ~]# zabbix_get -s 192.168.0.220 -k "vm.memory.size"
1028517888 #获取对应IP的全部内存总量
[root@localhost ~]# zabbix_get -s 192.168.0.220 -k "vm.memory.size[available]"
794337280 #获取对应IP的剩余内存总量

1.4 为了让同学们体会深刻,我们再创建一个监控项同时创建它的触发器

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

(2)在监控端测试监控项的键值

[root@localhost ~]# zabbix_get -s 192.168.0.220 -k "agent.ping"
1
[root@localhost ~]# zabbix_get -s 192.168.0.221 -k "agent.ping"
1
[root@localhost ~]# zabbix_get -s 192.168.0.222 -k "agent.ping"
zabbix_get [11715]: Get value error: cannot connect to [[192.168.0.222]:10050]: [113] No route to host

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

(3)创建监控项的告警触发器

到这里就创建完毕了,请同学们仔细体会这个过程。

二,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,那么触发告警

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

3.1 QQ邮件告警平台

3.1.1 安装sendmail

[root@localhost ~]# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@localhost ~]# yum -y install perl-Net-SSLeay perl-IO-Socket-SSL
[root@localhost ~]# tar xf sendEmail-v1.56.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/sendEmail-v1.56/
[root@localhost sendEmail-v1.56]# /bin/cp -ra sendEmail /usr/local/bin/
[root@localhost sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
[root@localhost 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邮箱设置

测试邮件发送

[root@localhost sendEmail-v1.56]# sendEmail -f 215379068@qq.com -t 215379068@qq.com -u "zabbix_server" -s smtp.qq.com -o message-content-type=html -o message-charset=utf8 -xu 215379068@qq.com -xp rtqnwthiqajdbihd -m "邮件发送成功"
Jan 19 18:09:10 localhost sendEmail[2403]: Email was sent successfully!

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

[root@localhost alertscripts]# pwd
/usr/local/zabbix/share/zabbix/alertscripts
[root@localhost alertscripts]# cat sendmail.sh
#!/bin/bash
# author:Mr.chen to=$1 subject=$2 body=$3 from=215379068@qq.com smtp=smtp.qq.com passwd=rtqnwthiqajdbihd /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@localhost alertscripts]# chmod +x sendmail.sh
[root@localhost alertscripts]# chown zabbix.zabbix sendmail.sh

3.1.5 脚本测试

[root@localhost alertscripts]# sh sendmail.sh 215379068@qq.com "hello world" "新的一天"
Jan 19 18:20:32 localhost sendEmail[2478]: Email was sent successfully!

3.1.6 修改zabbix_server.conf配置文件

[root@localhost alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
447 # AlertScriptsPath=${datadir}/zabbix/alertscripts #将上述内容修改成如下所示
[root@localhost alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts #重启zabbix_server服务
[root@localhost zabbix]# /etc/init.d/zabbix_server restart
Shutting down zabbix_server: [ OK ]
Starting zabbix_server: [ OK ]

3.1.7 创建报警媒介

3.1.8 创建报警动作

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

3.1.9 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号

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

[root@Zabbix_Server alertscripts]# cat weixin.sh
#!/bin/bash
# author:Mr.chen CropID="########" #这里填写我们的应用的CropID Secret="#######" #这里是应用的Secret #下面的GURL和PURL地址无需改变,不用做任何变动
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 yinsendemogui "题目" "报警内容"
{"errcode":0,"errmsg":"ok","invaliduser":"#######"}

3.2.4 创建微信报警媒介类型

3.2.5 设定报警动作

3.2.6 微信平台报警测试

3.3 自定义自动报警的内容

(1)自定义内容样例

如果不修改报警的内容格式,看起来太乱了。我们可以按照如下方式修改

#告警通知格式样例
#题目
A故障:{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
#内容
告警主机:&nbsp;{HOSTNAME1}<br/>
告警时间:&nbsp;{EVENT.DATE} {EVENT.TIME}<br/>
告警等级:&nbsp;{TRIGGER.SEVERITY}<br/>
告警信息:&nbsp;{TRIGGER.NAME}<br/>
告警项目:&nbsp;{TRIGGER.KEY1}<br/>
问题详情:&nbsp;{ITEM.NAME}&nbsp{ITEM.VALUE}<br/>
当前状态:&nbsp;{TRIGGER.STATUS}&nbsp{ITEM.VALUE1}<br/>
事件ID:&nbsp;{EVENT.ID}

(2)样例测试

四,用户参数User parameters

4.1 概述

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

用户参数的语法

UserParameter=<key>,<command>

其中,Userparameter为关键字,key为用户自定义key名字可以随便起,

一个简单的例子:

UserParameter=ping,echo 1

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

稍微复杂的例子:

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[

相关语法:

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.chen 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
782492
[root@Zabbix_Server scripts]# sh mem_check used
221912

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.0.220 -p 10050 -k "mem.check"
1004412
[root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check[free]"
782676
[root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check[used]"
221744

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

过程略,此时我相信同学们已经会了。请同学们自己尝试创建完整。

五,Agentd主动模式与被动模式

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

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

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

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

5.1 Agentd的配置调整

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

ServerActive=192.168.0.220
Hostname=192.168.0.220
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客户端(主动式)”。
  • 这样,只需要简单的几步,就完成了主动模式的切换,调整之后服务器不卡了,图层不裂了,进程也少了。

zabbix3.4.7实操总结二的更多相关文章

  1. zabbix3.4.7实操总结一

    一.zabbix_server的配置说明 #需要修改的内容为如下:[root@localhost ~]# cd /usr/local/zabbix/etc/[root@localhost etc]# ...

  2. 基于IPv6的RIPng路由协议测试——信而泰网络测试仪实操

    关键词 IPv6; RIPng; 协议测试; 内部网关协议; 外部网关协议 前言:在国际性网络中,如因特网,拥有很多应用于整个网络的路由选择协议.形成网络的每一个自治系统(AS),都有属于自己的路由选 ...

  3. IPv6 OSPFv3路由协议测试——信而泰网络测试仪实操

    关键词 IPv6; OSPFv3; OSPFv2. 前言:在网络部署中,动态路由协议是重要的组成部分.良好的路由协议,是保证网络可靠.稳定运行的基础.为了适应IPv6协议栈的变化,OSPFv3协议在保 ...

  4. BGP协议测试—信而泰网络测试仪实操

    关键词  BGP; 协议仿真; 测试原理. 前言:当前信息化时代之下,数据传输已经成为了日常工作和生活必不可少的重要组成部分,网络服务的易得性和可靠性也因此得到广泛关注.这其中负责网络正常工作的诸多协 ...

  5. Python实操二

    实操一: 1.用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb name=['alex','wupeiqi','yuanhao'] name=['alex','wupeiqi' ...

  6. Linux基础实操二

    实操一: 1) 新建用户natasha uid为1000,gid为555,备注信息为“master” 2) 修改natasha用户的家目录为/Natasha 3) 查看用户信息配置文件的最后一行 ca ...

  7. (二)Linux实操之——网络配置、进程管理、服务管理、组管理、YUM

    接上段   (一)Linux实操之——权限.任务调度.磁盘分区 4.网络配置 4.1 NAT模式的网络配置 目前我们采用的网络配置是NAT模式. windows下cmd通过 ipconfig 命令可以 ...

  8. Istio的流量管理(实操二)(istio 系列四)

    Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...

  9. unittest测试框架详谈及实操(二)

    类级别的setUp()方法与tearDown()方法 在实操(一)的例子中,通过setUp()方法为每个测试方法都创建了一个Chrome实例,并且在每个测试方法执行结束后要关闭实例.是不是觉得有个多余 ...

随机推荐

  1. cocos creator 动态创建精灵

    var node = new cc.Node();var sprite = node.addComponent(cc.Sprite);sprite.spriteFrame = new cc.Sprit ...

  2. Go 初体验 - 死锁的几种情况

    go 语言里,channel 是一个重要的对象和概念,它是通信的基础实现 如何实例化: ch := make(chan int) 由 channel 通信引起的死锁共有3种: 第一种是因为给 ch 推 ...

  3. phpcms首页替换

    大图轮播替换 {pc:content action="lists" catid="13" order="id DESC" num=" ...

  4. MongoDB集群单mongos的问题总结

    问题发现 在使用过程中,通过spark访问集群的效率不是很令人满意,80核心同时运行的速度比单核心也就快了20倍左右,预测瓶颈在mongodb读写上.当然,此时没遇到其他问题暂时没进行问题梳理. 在数 ...

  5. linux中make的有关规则的特性

    我过去认为 makefile 只是一种将一组组的 shell 命令列出来的简便方法:过了一段时间我了解到它们是有多么的强大.灵活以及功能齐全.这篇文章带你领略其中一些有关规则的特性. 规则 规则是指示 ...

  6. linux 安装nginx+php+mysql

    http://www.cnblogs.com/kyuang/p/6801942.htmlnginx安装 本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库 ...

  7. nginx 中 ulimit 使用修改文件句柄数

    使用ulimit -a 可以查看当前系统的所有限制值, 使用ulimit -n<可以同时打开的文件数>设置用户可以同时打开的 最大文件数 linux系统默认的只要1024 当做负载较大的服 ...

  8. 使用pm2-zabbix监控node工程

    环境 centos 7 zabbix 3.2.6 node 4.4.3 安装 # wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix ...

  9. mybatis 查询优化主子表查询之association和collection

    很多开发人员之所以编写出低效的应用,有一大原因是并不理解怎样编写高效的SQL.以订单查询为例,我们经常需要查询某个用户的订单以及订单明细,并且以树形方式展现如下: 对于这种性质的功能,很多开发人员的做 ...

  10. opencv学习之路(27)、轮廓查找与绘制(六)——外接圆、椭圆拟合、逼近多边形曲线、计算轮廓面积及长度、提取不规则轮廓

    一.最小外接圆 #include "opencv2/opencv.hpp" #include<iostream> using namespace std; using ...