Zabbix监控平台3.2.4(二)深刻理解zabbix

一,Zabbix Web操做深刻

 

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

(1)建立一个模版html

咱们全部的功能几乎都是在模版中定义的前端

1.png-27.4kB

2.png-31kB

咱们再点进新建立的模版查看mysql

模版里几乎能够设定咱们须要的全部功能nginx

1.png-31.8kB

2.png-32.9kB

(2)在模版里建立应用集web

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

1.png-26.2kB

2.png-17.3kB

3.png-19.3kB

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

1.png-26.4kB

2.png-158.7kB

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

咱们选择一个系统模版Template OS Linux查看服务器

1.png-6kB

2.png-23.7kB

3.png-44.9kB

4.png-80.5kB

(5)固然咱们也能够自定义监控项的键值,可是并不推荐这样。由于,都是本身写太慢了。系统自带了不少键值咱们要学会利用微信

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

 

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

(1)avg

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

 
  1. 举例:
  2. avg(5):最后5秒的平均值
  3. avg(#5):表示最近5次获得值的平均值
  4. avg3600,86400):表示一天前的一个小时的平均值
  5. 若是仅有一个参数,表示指定时间的平均值,从如今开始算起,若是有第二个参数,表示漂移,从第二个参数前开始算时间,#n表示最近n次的值

(2)last

参数:秒或#num
支持值类型:float,int,str,text,log
做用:最近的值,若是为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其余一些函数的#num的意思是不一样的。

 
  1. last(0)等价于last(#1
  2. last(#3)表示最近第3个值(并非最近的三个值)
  3. 本函数也支持第二个参数time_shift,例如last0,86400)返回一天前的最近的值。
  4. 若是在history中同一秒中有多个值存在看,Zabbix不保证值的精确顺序#numZabbix1.6.2起开始支持,timeshift1.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 ===>表示如今获取的值若是和以前的不一样就告警

例如:

QQ截图20180118093853.png-90.8kB

QQ截图20180118094336.png-32kB

 

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

(1)建立一个触发器

咱们以前已经建立了一个检测内存剩余大小的监控项,如今咱们给这个监控项加一个触发器。当内存小于20M时,触发报警

QQ截图20180118100424.png-34.2kB

QQ截图20180118105951.png-38.2kB

QQ截图20180118110016.png-27.7kB

QQ截图20180118110105.png-12.6kB

(2)进行表达器测试

QQ截图20180118110530.png-30.1kB

QQ截图20180118111111.png-27.1kB

QQ截图20180118111332.png-29kB

QQ截图20180118111424.png-20.5kB

QQ截图20180118111443.png-14.1kB

表达式测试成功后,咱们建立完毕便可

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

QQ截图20180118112715.png-33.2kB

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

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

1.4 为了让同窗们体会深入,咱们再建立一个监控项同时建立它的触发器

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

QQ截图20180118114234.png-41.6kB

QQ截图20180118114253.png-12.9kB

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

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

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

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

QQ截图20180118114723.png-9.9kB

QQ截图20180118114745.png-20.7kB

QQ截图20180118114910.png-13.4kB

QQ截图20180118114916.png-13.1kB

QQ截图20180118114935.png-9.5kB

QQ截图20180118114943.png-9.9kB

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

 

二,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

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

QQ截图20180119225714.png-57kB

QQ截图20180119230151.png-29.7kB

QQ截图20180119225952.png-26.7kB

测试邮件发送

 
  1. [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 "邮件发送成功"
  2. Jan 19 18:09:10 localhost sendEmail[2403]: Email was sent successfully!

QQ截图20180119231007.png-53.4kB

 

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

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

3.1.5 脚本测试

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

QQ截图20180119232055.png-56.9kB

 

3.1.6 修改zabbix_server.conf配置文件

 
  1. [root@localhost alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
  2. 447 # AlertScriptsPath=${datadir}/zabbix/alertscripts
  3. #将上述内容修改为以下所示
  4. [root@localhost alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
  5. 447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
  6. #重启zabbix_server服务
  7. [root@localhost zabbix]# /etc/init.d/zabbix_server restart
  8. Shutting down zabbix_server: [ OK ]
  9. Starting zabbix_server: [ OK ]
 

3.1.7 建立报警媒介

QQ截图20180119234327.png-34.9kB

QQ截图20180119234558.png-24.5kB

QQ截图20180119234640.png-32.4kB

QQ截图20180119234839.png-25.3kB

QQ截图20180120223425.png-31.3kB

 

3.1.8 建立报警动做

QQ截图20180119235155.png-26.2kB

QQ截图20180120110138.png-26.4kB

QQ截图20180120110308.png-31kB

QQ截图20180120110353.png-50.6kB

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

QQ截图20180120110812.png-34.9kB

QQ截图20180120110850.png-14.6kB

 

3.1.9 QQ邮件报警测试

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

QQ截图20180120230607.png-15.5kB

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

QQ截图20180120224433.png-77.9kB

 

3.2 微信报警平台

 

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

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

QQ截图20180121001001.png-45.7kB

QQ截图20180121001247.png-36kB

QQ截图20180121001751.png-19.2kB

 

3.2.2 编写微信平台报警脚本

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

(1)企业的CorpID

QQ截图20180121005237.png-58.6kB

(2)企业的Secret

QQ截图20180121005310.png-38kB

QQ截图20180121005334.png-9kB

(3)部门ID号

QQ截图20180121005557.png-47.2kB

而后咱们就能够编写微信告警脚本了,以下:

 
    1. [root@Zabbix_Server alertscripts]# cat weixin.sh
    2. #!/bin/bash
    3. # author:Mr.chen
    4. CropID="########" #这里填写咱们的应用的CropID
    5. Secret="#######" #这里是应用的Secret
    6. #下面的GURL和PURL地址无需改变,不用作任何变更
    7. GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
    8. Gtoken=`/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}'`
    9. PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
    10. function body() {
    11. local int AppID=1000002 #这里是建立的应用ID
    12. local UserID=$1 #接收消息用户,系统传参
    13. local PartyID=1 #接收消息的部门ID
    14. local Msg=`echo "$@" | cut -d" " -f3-`
    15. printf '{\n'
    16. printf '\t"touser": "'"$UserID"\"",\n"
    17. printf '\t"toparty": "'"$PartyID"\"",\n"
    18. printf '\t"msgtype": "text",\n'
    19. printf '\t"agentid": "'" $AppID "\"",\n"
    20. printf '\t"text": {\n'
    21. printf '\t\t"content": "'"$Msg"\""\n"
    22. printf '\t},\n'
    23. printf '\t"safe":"0"\n'
    24. printf '}\n'
    25. }
    26. /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL

 

3.2.3 脚本测试

 

 

 

  1. [root@Zabbix_Server alertscripts]# chmod +x weixin.sh
  2. [root@Zabbix_Server alertscripts]# chown zabbix.zabbix weixin.sh
  3. [root@Zabbix_Server alertscripts]# sh weixin.sh yinsendemogui "题目" "报警内容"
  4. {"errcode":0,"errmsg":"ok","invaliduser":"#######"}

 

IMG_3575.PNG-62.5kB

 

IMG_3576.PNG-53.3kB

 

 

 

3.2.4 建立微信报警媒介类型

 

QQ截图20180121011219.png-25.6kB

 

QQ截图20180121011244.png-35.4kB

 

QQ截图20180121011307.png-21.8kB

 

QQ截图20180121011355.png-14.1kB

 

QQ截图20180121011413.png-25.1kB

 

 

 

3.2.5 设定报警动做

 

QQ截图20180121011641.png-17.9kB

 

QQ截图20180121011900.png-25kB

 

 

 

3.2.6 微信平台报警测试

 

QQ截图20180121012248.png-65.4kB

 

IMG_3577.PNG-118.4kB

 

 

 

3.3 自定义自动报警的内容

 

(1)自定义内容样例

 

若是不修改报警的内容格式,看起来太乱了。咱们能够按照以下方式修改

 

 

 

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

 

QQ截图20180121195205.png-40.7kB

 

(2)样例测试

 

QQ截图20180121195126.png-67.1kB

 

 

 

四,用户参数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[],其中的mode模式就是用户要接受的参数,当咱们填写为free时则返回的为内存的剩余大小,若是咱们填入的为userd时这返回的是内存已经使用的大小。

 

相关语法:

 

UserParameter=key[*],command

 

 

 

  1. #描述:
  2. keykey的值在主机系统中必须是惟一的,其中*表明命令中接受的参数
  3. command:客户端系统中可执行的命令
  4. #举例:
  5. UserParameter=ping[*],echo $1
  6. ping[0]:此时0就是*,也就是传入参数是0$1也就是0,所以表达式将一直返回‘0
  7. ping[aaa]:此时aaa就是*,也就是传入参数是aaa$1也就是aaa,所以表达式将一直返回‘aaa

 

 

 

4.3 让咱们自定义一个能够传递参数的监控项

 

咱们作一个能够根据条件获取内存数值大小的监控项mem_check
当咱们键值为mem_check[free]时,获取剩余可用内存大小
当咱们键值为mem_check[used]时,获取实际占用内存大小
当咱们键值为mem_check时,获取总内存大小

 

 

 

4.3.1 咱们先制做一个获取数据的脚本

 

 

 

  1. [root@Zabbix_Server ~]# mkdir -p /server/scripts
  2. [root@Zabbix_Server ~]# cd /server/scripts/
  3. [root@Zabbix_Server scripts]# cat mem_check
  4. #!/bin/bash
  5. # author:Mr.chen
  6. case $1 in
  7. free)
  8. echo "`free | awk 'NR==3{print $4}'`"
  9. ;;
  10. used)
  11. echo "`free | awk 'NR==3{print $3}'`"
  12. ;;
  13. *)
  14. echo "`free | awk 'NR==2{print $2}'`"
  15. ;;
  16. esac

 

 

 

4.3.2 测试脚本

 

 

 

  1. [root@Zabbix_Server scripts]# chmod +x mem_check
  2. [root@Zabbix_Server scripts]# chown zabbix.zabbix mem_check
  3. [root@Zabbix_Server scripts]# sh mem_check
  4. 1004412
  5. [root@Zabbix_Server scripts]# sh mem_check free
  6. 782492
  7. [root@Zabbix_Server scripts]# sh mem_check used
  8. 221912

 

 

 

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

 

 

 

  1. [root@Zabbix_Server ~]# cd /etc/zabbix/zabbix_agentd.d/
  2. [root@Zabbix_Server zabbix_agentd.d]# cat mem_check.conf
  3. UserParameter=mem.check[*],/server/scripts/mem_check $1

 

 

 

4.3.4 测试自定义的键值

 

 

 

  1. #重启zabbix-agent客户端
  2. [root@Zabbix_Server zabbix_agentd.d]# /etc/init.d/zabbix-agent restart
  3. Shutting down Zabbix agent: [ OK ]
  4. Starting Zabbix agent: [ OK ]
  5. [root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check"
  6. 1004412
  7. [root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check[free]"
  8. 782676
  9. [root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check[used]"
  10. 221744

 

 

 

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

 

过程略,此时我相信同窗们已经会了。请同窗们本身尝试建立完整。

 

 

 

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

 

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

 

  • :Web操做很卡,容易出现502
  • :图层断裂
  • :开启的进程(Pollar)太多,即便减小item数量,之后加入必定量的机器也会有问题

 

因此,下面主要往两个优化方向考虑:

 

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

 

 

 

5.1 Agentd的配置调整

 

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

 

 

 

  1. ServerActive=192.168.0.220
  2. Hostname=192.168.0.220
  3. StartAgents=1

 

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

 

 

 

5.2 zabbix Server端配置调整

 

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

 

 

 

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

 

 

 

5.3 调整模版

 

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

 

QQ截图20180121221430.png-46.7kB

相关文章
相关标签/搜索