• Zabbix监控平台(二)深入理解zabbix


    一,Zabbix Web操作深入

     

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

     

    (1)创建一个模版

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

    image_1csimopsa13gjil61p6nuao1e9j16.png-34kB


    image_1csimpfe9tn3gt1df3j141p5o23.png-38.6kB

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

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

    image_1csimr4v820iua31dbf1drr1s9h2g.png-75.5kB


    image_1csims7bl1pbs1uh41m871di1kd32t.png-68.4kB

     

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

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

    image_1csimugj8jmf1909jfq2kdb0a3a.png-30.6kB


    image_1csimuuj321r1bqr10ubkrn1keh3n.png-26.1kB


    image_1csimvbhod9kc9i1ngu1u6p1hm644.png-30kB

     

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

    cpu模板监控项

    image_1cu77rhg51nvglodcpi1greoe79.png-213.7kB

    mem模板监控项

    image_1cu78284qnpq3n41m1a1a4h15hjm.png-204kB

    disk模板监控项(随便找了一个键值)

    image_1cu78j2fe1nvsvbfvag8agkmq13.png-225.1kB

     

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

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

    image_1csin1o9d1d2g1eaqsi71drv1u3f5r.png-8.3kB


    image_1csin23db1lm2nid1jhasjb195h68.png-35.8kB


    image_1csin2d8733hvkbp961v931eab6l.png-58.3kB


    image_1csin2pplhmbshf1vdb9qhk4o72.png-75.8kB

     

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

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

     

    6)把新添加的模板链接到主机里面并检测

    image_1cu78q7pooa9901d4l19l9ilp1g.png-98.4kB


    image_1cu78tiuu146nat9pn51o38frb1t.png-85.1kB


    image_1cu7aaiks1kbi19d91p5ac8d1o3um.png-151.3kB


    image_1cu79rpaoambk5q1ngvhvl9j29.png-119.6kB

     

    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 ===>表示现在获取的值如果和之前的不同就告警

    例如:

    image_1csinfmj8d0413hj6hpct19ld7f.png-153.9kB

     

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

     

    (1)创建一个触发器

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

    image_1csinh9aq1iga5hg1o1l8ad1o9j7s.png-42.4kB


    image_1csini536fjs1nb718uv1pp81dli99.png-76.5kB


    image_1csinjecuoma1f4d1t1g11nc2o4am.png-39.4kB


    image_1csink9c6ojm1ach17b39sup9gcj.png-26.7kB

     

    (2)进行表达器测试

    image_1csinlaad1op55jg10ktmggdmfd0.png-69.3kB


    image_1csinlrm0k7j1b0d1m2855j4jbdd.png-37.8kB


    image_1csinmk50sjkl4c1et41lh7a6fdq.png-59.5kB


    image_1csinmvqrd6i19md1i4u15e61v5ie7.png-42.8kB


    image_1csinna3n4bh14on10ld1opq1qacek.png-19kB

    表达式测试成功后,我们添加即可

     

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

    image_1csino7i8104625lnp1bo114kqf1.png-47.9kB


    image_1cu7bknrf85e1ahuqgf1mq81gt13.png-144.5kB

     

    监控项表达式说明

    {aaaa:vm.memory.size[available].last()}<20M

     
    1. aaaa:模版名
    2. vm.memory.size:zabbix监控端向被监控端发送的代号
    3. .last()<20 :last()<===>last(0)<===>last(#1)

    zabbix_get -s 192.168.200.69 -k "vm.memory.size" 
    获取对应IP的全部内存总量

    zabbix_get -s 192.168.200.69 -k "vm.memory.size[available]" 
    获取对应IP的剩余内存总量

    image_1cu7bpcll1ushhp51t8r3cqdsr1g.png-21.4kB

     

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

     

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

    image_1csinthmflu3to91ujg18qcvfsfu.png-83kB


    image_1csintt16klf147ncaf1sej1rl7gb.png-17.2kB

     

    (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)创建监控项的告警触发器

    image_1csio0a6n1lut1alhfuv16m8gs1ho.png-18.4kB


    image_1csio0m06u92ooi17oe13di5ci5.png-52.4kB


    image_1csio12f21joimunuaq1mffpk2ii.png-18.8kB


    image_1csio1d8i1as4hbb12so17j91rc4iv.png-18.5kB


    image_1csio1pn71dn61mc2ukrj3h1o28jc.png-13.3kB


    image_1csio26pfth11sl3enn8n37u3jp.png-13.5kB

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

     

    二,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(上文有所有包)

    wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz

    yum -y install perl-Net-SSLeay perl-IO-Socket-SSL

    tar xf sendEmail-v1.56.tar.gz -C /usr/local/

    cd /usr/local/sendEmail-v1.56/

    /bin/cp -ra sendEmail /usr/local/bin/

    chmod +x /usr/local/bin/sendEmail

    which sendmail

    image_1cu82m5su17na1460956ip61vmm13.png-154.3kB

     

    3.1.2 sendmail命令使用说明

    image_1csiojg831q73vcbuhp10rm1oijk6.png-60.8kB

     

    3.1.3 调整QQ邮箱设置

    image_1cu81sf1dvlo17lgh21vj6133i9.png-103.4kB


    image_1cu827u7p1rja1tis12sc1i2s1b2pm.png-51.9kB


    开启后生成的码保存一下,测试邮件的时候需要用到

     

    测试邮件发送

    sendEmail -f 1123400300@qq.com -t 1123400300@qq.com -u "zabbix_server" -s smtp.qq.com -o message-content-type=html -o message-charset=utf8 -xu 1123400300@qq.com -xp lrvtvcgwvsmtijic -m "邮件发送成功"

    image_1cu82p95j20n1rl11lukf9b132820.png-27.7kB


    image_1cu82pshc1jfh1hu01ksl9b71f752d.png-101.1kB

     

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

    cd /usr/local/zabbix/share/zabbix/alertscripts

    pwd

    vim sendmail.sh

    chmod +x sendmail.sh

    chown zabbix.zabbix sendmail.sh

    cat sendmail.sh

     
    1. #!/bin/bash
    2. #author:Mr.sun
    3. to=$1
    4. subject=$2
    5. body=$3
    6. from=1123400300@qq.com
    7. smtp=smtp.qq.com
    8. passwd=lrvtvcgwvsmtijic
    9. /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"

    image_1cu83lrhi142mcm1mhaejq1vmu2q.png-80.2kB

     

    3.1.5 脚本测试

    sh sendmail.sh 1123400300@qq.com "hello world" "新的一天"

    image_1cu83ndne1tj8r6b1184nd61hfc37.png-19.2kB


    image_1cu83o54m1nffgpi1i4ag1m14j03k.png-101.7kB

     

    3.1.6 修改zabbix_server.conf配置文件

    cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"

     
    1. 447 AlertScriptsPath=${datadir}/zabbix/alertscripts
     

    将上述内容修改成如下所示

    cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"

     
    1. 447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts

    image_1cu83rpev1ka9fmq7depge1v4r41.png-17.4kB

     

    重启zabbix_server服务

    /etc/init.d/zabbix_server restart

    netstat -antup | grep zabbix_serve

    image_1cu83so44nd810j51co6pg1k194e.png-27.9kB

     

    3.1.7 创建报警媒介

    image_1csip15ti1c3j1grb1c7i1c1ccg3mk.png-42.9kB


     
    1. {ALERT.SENDTO}
    2. {ALERT.SUBJECT}
    3. {ALERT.MESSAGE}

    image_1csip1o0m5j0mm417j0phopt2nh.png-52.4kB


    image_1csip28c01mas1j4km5s371krknu.png-43.5kB


    image_1csip31dmvou1mfqa341rnflhsob.png-45.3kB


    image_1cu85jhje1i561bf0bbjaa0hg14r.png-40.9kB


    image_1cu85kmrj1nipp812s71uj21jnb58.png-48.8kB

     

    3.1.8 创建报警动作

    image_1csip43ms1u5h16ua1dt4ce217v1p5.png-32.1kB


    image_1cu85opqt65tlht1go31urg9hk5l.png-65.7kB


    image_1csip4uks1kuvqkk1h2glti143tpv.png-58.9kB


    image_1cu862q9q1c2kh4c1r5a11ikdt262.png-101.1kB

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

    image_1cu863vhjhlqsa110r319dhl16f.png-81.9kB


    image_1cu864ls6vbk1dia1u5s1gar10fm6s.png-29.1kB

     

    3.1.9 QQ邮件报警测试

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

    image_1cu86beuj14i317u41b7211rt1mtj79.png-110.2kB

    利用Xshell,增加连接数,触发报警并检查邮件

    image_1cu86g3es1isgbtpjrv1rti1m87m.png-145kB

     
     

    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}

    image_1csiptgmbb4qoe2o0fuqn1oue18n.png-52.8kB

     

    (2)样例测试

    image_1cu86gv1djli1k8o1h341t3t1e1a83.png-145kB

     

    四,用户参数User parameters

     

    4.1 概述

    有时候当我们监控的项目在Zabbix预定义的key中没有定义时,这时候我们可以通过编写Zabbix的用户参数的方法来监控我们要求的项目item。形象一点说Zabbix代理端配置文件中的User

    parameters就相当于通过脚本获取要监控的值,然后把相关的脚本或者命令写入到配置文件中的User

    parameter中,然后Zabbix server读取配置文件中的返回值通过处理前端的方式返回给用户。

     

    用户参数的语法

    UserParameter=,

    其中,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 我们先制作一个获取数据的脚本

    mkdir -p /server/scripts

    cd /server/scripts/

    vim mem_check

    cat mem_check

     
    1. #!/bin/bash
    2. # author:Mr.sun
    3. case $1 in
    4. free)
    5. echo "`free | awk 'NR==3{print $4}'`"
    6. ;;
    7. used)
    8. echo "`free | awk 'NR==3{print $3}'`"
    9. ;;
    10. *)
    11. echo "`free | awk 'NR==2{print $2}'`"
    12. ;;
    13. esac

    image_1cu87ub1hjtno60rmr1p951u6i8g.png-41.3kB

     

    4.3.2 测试脚本

    chmod +x mem_check

    chown zabbix.zabbix mem_check

    sh mem_check

    sh mem_check free

    sh mem_check used

    image_1cu87vt6m1tlp1m7ol68l13cj8t.png-38.1kB

     

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

    cd /etc/zabbix/zabbix_agentd.d/

    vim mem_check.conf

    cat mem_check.conf

     
    1. UserParameter=mem.check[*],/server/scripts/mem_check $1

    image_1cu8811kpoen1uprtlh1scp36j9a.png-24.8kB

     

    4.3.4 重启并在server端测试自定义的键值

    /etc/init.d/zabbix-agent restart

    zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check"

    zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[*]"

    zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[free]"

    zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[used]"

    image_1cu8836i3fe916db877ts81mva9n.png-17.7kB


    image_1cu884loija9cnv1vq23mg1ig8a4.png-37.6kB

     

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

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

     

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

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

    1. Web操作很卡,容易出现502

    2. 图层断裂

    3. 开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题

     

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

    1. 用Proxy或者Node模式做分布式监控

    2. 调整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主动收集数据进程减少一些。 StartTrappers=200
    2. #把这个负责处理Agentd推送过来的数据的进程开大一些。
     

    5.3 调整模版

    因此收集数据的模式发生了变化,因此需要把所有的监控项的类型由原来的“zabbix客户端”改成“zabbix客户端(主动式)”。

    这样,只需要简单的几步,就完成了主动模式的切换,调整之后服务器不卡了,图层不裂了,进程也少了。

    image_1csiqlggu1esn79j1cc51ssr11eu19h.png-61.5kB

  • 相关阅读:
    Raft Consensus Algorithm 分布式系统一致性协议
    Dynamic Programming 类问题的空间优化方法
    Bellman–Ford and SPFA Algorithm
    K8S
    SegmentTree
    TCP TIME_WAIT 状态
    When does locking or MVCC occur? Where do I need to specify which one the database should use?
    神经网络的工作原理
    React Native:State 及其 生命周期
    Css Animation
  • 原文地址:https://www.cnblogs.com/linyaonie/p/10113376.html
Copyright © 2020-2023  润新知