Nagios中的插件就是脚本写的程序,来获取数据使用的:前端
Zabbix中设置item收集数据就是用key完成的,现有的键不能知足需求时就须要本身定义key,监控项就是item,在建立监控项时须要输入键值,键值就是key. Key就是客户端agent收集好数据————> 传给server————>而后绘图,因此Key应该在客户端.ios
定义Key的语法nginx
UserParameter=<key>,<command>;[<command>..] command只能有一个返回值(UserParameter=key1,who |wc -l)
此处本身定义那个key1的名字能够自定义,能经过看到这个名字知道是干什么的就好了,可是这个名字,后面的命令必定要是/usr/bin下面的命令,若是是/usr/sbin下面的命令会报错,数据过不去,除非将zabbix用户提权到管理员.web
咱们首先分析一下怎么作自定义Key,以及当中数据流向shell
当看到这种需求,首先咱们想到的是在须要被监控的那台主机上装上zabbix-agent,以便收取数据,能够理解为ELKB当中的filebeat,logstash,就是收集数据到zabbix-server上,而后进行存储并根据须要作图表或者触发器报警等等.因此咱们先把zabbix-agent理解为一个filebeat,logstash收集数据/日志的服务.vim
而后咱们应该想的是怎么将有用的数据传给zabbix-agent,这点zabbix-agent上有自定义的函数UserParameter,经过他咱们能够将有用的数据经过传参传给这个函数,而后这个函数发往zabbix-server,或者zabbix-server过来取,至于怎么作分析,作存储,作图表跟agent一点关系都没有.bash
接下来就是咱们怎么去对UserParameter传参,这里咱们经过下面两个例子来讲明,先说明一种简单的,而后再将上面图的监控作一下.网络
# 一、解注释,支持写键值的时候可使用特殊字符 vim /etc/zabbix/zabbix_agentd.conf UnsafeUserParameters=1 # 2.建立一个文件,并定义key名,命令或脚本,(位置参数下面这种不须要) vim /etc/zabbix/zabbix_agentd.d/userparameter_user.conf UserParameter=key1,who |wc -l systemctl restart zabbix-agent # 3.检测key能不能传参过来 [root@zabbix ~]# zabbix_agentd -t key1 key1 [t|1] [root@zabbix ~]# zabbix_get -s 39.108.140.0 -k key1 1 # 4.至此咱们就能够到zabbix的web界面去建立监控项了, # 只不过不用填写官方自定义的key了, # 而是你本身起名的key,等示例二在进入web界面操做
若是出现一条命令传参到UserParameter没法知足需求,须要用到case或者命令比较长能够考虑使用脚本,可读性强也能知足需求,case等监控rabbitmq在介绍.函数
1 . 解开注释就不说了,先建立一个文件,定义一下key名,至因而命令仍是脚本根据需求来,此处先用脚本,此处须要用到位置参数.测试
cat /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf UserParameter=nginx[*],/etc/zabbix/key/nginx.sh $1 # 此处的nginx能够是自定义的名字, # [*] 为脚本里面的位置参数 # /etc/zabbix/key/nginx.sh为你写的自定义Key的脚本 # $1为位置参数,还记得咱们用zabbix官方自带的key时候里面填网卡名之类的吗,此处的位置参数跟那个差很少. # 正常来讲,若是是简单的key能够直接把命令放到这里来,值就直接传过去了,但此处用到了脚本,咱们看下脚本内容.
建立与zabbix_agent.d下配置文件中定义的脚本路径
这个脚本做用就是将查看nginx状态的关键取证信息提取出来,而后经过位置参数传给在userparameter_nginx.conf中的$1,而后传给zabbix-serverWEB中的监控项中的键值.
mkdir /etc/zabbix/key cat /etc/zabbix/key/nginx.sh #!/usr/bin/env bash # ******************************************************************************* # Author: ZhouJian # Mail: 18621048481@163.com # Data: 2019-11-12 # Describe: CentOS 7 Zabbix Monitor Nginx Server Status port=`systemctl status nginx |grep running|awk -F"(" '{print $2}'|awk -F")" '{print $1}'` if [ "$port" == "running" ];then port=1 else port=0 fi if [ $1 = "port" ];then echo $port fi chmod +x nginx.sh # 检测下脚本能不能传参成功 # 先重启服务 systemctl restart zabbix-agent zabbix_agentd -t nginx[port] nginx[port] [t|0] 接着咱们切换到zabbix监控主机上看能不能经过get获取值 zabbix_get -s 116.196.83.113 -k nginx[port] 0
若是此项能获取到值,说明咱们能够到zabbix-server上去建立监控项了,就跟建立官方自定义的key监控项同样,只不过到了键值哪里换成配置文件本身取的key名而已.
接下来咱们到zabbix的web前端去配置监控项
咱们能够看到此处有了最新数据,咱们接下来就能够去建立图形了,可是此处就先不作了,建立图形和前面步骤差很少,下面来一个稍微复杂一点的自定义Key监控脚本.
# 在/etc/zabbix/zabbix_agent.d/目录下建立一个配置文件,或者跟其余配置文件共用,配置文件里面经过UserParameter函数传参给zabbix-server,具体都有什么做用请看示例二. # 1.到这个目录下建立一个userparameter_cpu.conf文件,必定要以conf结尾. cat /etc/zabbix/zabbix_agentd.d/userparameter_cpu.conf UserParameter=nginx[*],/etc/zabbix/key/cpu.sh $1 # 2.建立userparameter_cpu.conf中定义的脚本路径,到这个路径写好脚本,并经过位置传输传给UserParameter。 cat /etc/zabbix/key/cpu.sh #!/usr/bin/env bash # ******************************************************************************* # Author: ZhouJian # Mail: 18621048481@163.com # Data: 2019-11-12 # Describe: CentOS 7 Zabbix Monitor CPU load Status m1load=`uptime |awk -F",| +" '{print $14}'` m5load=`uptime |awk -F",| +" '{print $16}'` m15load=`uptime |awk -F",| +" '{print $18}'` case $1 in m1load) echo $m1load ;; m5load) echo $m5load ;; m15load) echo $m15load ;; esac chmod +x cpu.sh # 3.重启服务而后测试下参数能不能传过去. systemctl restart zabbix-agent zabbix_agentd -t cpu[m1load] cpu[m1load] [t|0.32] # 咱们切换到zabbix-server机器用get命令,看能不能获得. zabbix_get -s 116.196.83.113 -k cpu[m1load] 0.10 # 咱们看到值是能够get到的,接下来咱们到zabbix的web页面上进行建立一个一分钟负载CPU的监控项,并建立触发器.
接下来咱们去看下有不有新数据,有的话咱们去建立一个图形
item(监控项)只负责收集数据,而一般收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,"触发器"正是用于为监控项所收集的数据定义的阈值,靠动做来完成的。每个触发器仅能关联至一个监控项,但能够为一个监控项同时使用多个触发器.事实上,为一个监控项定义多个具备不一样阈值的触发器,能够实现不一样级别的报警功能。如:一个监控网络的触发器是不能用在监控cpu上的;而一个item能够设置达到一个值作什么动做,达到另一个值作什么动做,因此能够设置多个触发器。可是触发器只是触发一个事件,并不会报警,报警 须要靠后续的动做来完成
一个触发器由一个表达式构成,它定义了监控项所采起的数据的一个阈值,一旦某次采集的数据超出了此触发器定义的阈值,触发器状态将会转换为"problem";而当采起的数据再次回归至合理范围内时,其状态将从新返回"ok"。
触发器表达式
https://www.zabbix.com/documentation/3.2/manual/config/triggers/prediction
触发器表达式高度灵活,能够建立出很是复杂的测试条件,基本的触发器表达式以下所示
{<server>:<key><function>{<parameter>}}<operator><constant>
注释
server: 主机名
key: 监控项对应的监控脚本就叫key
function: 评估采集到的数据是否在合理范围内所使用的函数,其评估过程能够根据采集的数据,当前时间及其余因素进行。目前触发器所支持的函数有:avg count change date dayofweek delta diff iregexp(正则表达是匹配) last max min nodata now sum等
parameter:函数参数,大多数数值函数能够接受秒数为其参数,而若是在数值参数以前使用"#"做为前缀,则表示为最近几回的取值,如sum(300)表示300秒内全部的取值之和,而sum(#10)则表示最近10次取值之和。此外avg count last min max还支持使用第二个参数用于完成时间限定:例如 max(1h,7d)将返回一周以前1小时内的最大值
operator操做符:/、*、-、+、<、>、# 不等于、=、& 逻辑与、| 逻辑或 constant:常数,不能超过多少,或者不能低于多少
接下来咱们先大概知道一下触发器怎么建立,具体怎么结合报警.
至此一个触发器就完成了
咱们能够看到下图有一个触发线,咱们尝试着将CPU负载弄上去,而后看有什么变化.
咱们经过dd命令看下cpu的负载能不能到达触发器.
dd if=/dev/zero of=test bs=1M count=1000
随机生成1百万个1K的文件
seq 1000000 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1