zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jvm基本结构和解析
    多态的意思
    java中对象的简单解读
    double类型和int类型的区别
    python 解析xml文件
    win10不能映射Ubuntu共享文件
    Qt程序打包
    Ubuntu boot分区文件误删,系统无法启动,怎么解
    ubuntu Boot空间不够问题“The volume boot has only 5.1MB disk space remaining”
    Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default
  • 原文地址:https://www.cnblogs.com/linyaonie/p/10113376.html
Copyright © 2011-2022 走看看