Zabbix自动发现是通过(1)网络扫描或(2)代理主动发现实现监控。本文主要介绍网络扫描的发现方式,并深入介绍底层监控项的主动发现功能。

网络发现(Discovery)

对于网络发现最需要理解的就是工作流程,不然觉得这个发现功能很奇怪,理解之后,就觉得这个设计很合理了。而且使用起来也很正常,而大部分文章只是讲解了如何使用,官方文件简单的提到了工作流程,不小心很容易忽略。
参考文档: https://www.zabbix.com/documentation/4.0/manual/discovery/network_discovery

自动发现主要是希望通过发现网络中的主机,并自动把主机添加到监控中,并关联特定的模板,实现自动监控。例如在办公网络中,希望通过Zabbix Agent监控所有工作电脑,只需要把新安装的电脑开放防火墙10050端口,那么电脑就可以自动通过发现新机器,并开始监控。如果网络中可能存在Windows和Linux系统,就需要通过Zabbix Agent判断自动添加的主机是Windows还是Linux。
以上这个过程需要分为两个步骤:

  1.通过网络扫描制定的服务,本例为Zabbix Agent是否可以访问system.uname指标
  2.发现主机之后需要执行添加的动作,这个过程由动作(Action)完成

下图为配置扫描是的方法:

扫描到网端内存在新机器时,就会出现在监控(Monitoring)->发现(Discovery)中:

如果希望把新发现的机器添加到Zabbix监控范围,就需要通过动作来实现主机添加,模板关联了。如下图所示,在配置(Configuration)->动作(Action),选择事件源为发现(Discovery)。通过创建一个新动作,配置好条件和动作实现自动添加主机功能。

工作流程如下:

如图,如果网络中有新的机器加入,Zabbix Server扫描到了该机器的代理服务,并且满足动作的条件,则会执行添加主机的动作,并自动关联模板。如果需要分别添加Windows和Linux主机,则需要分别创建两个规则,并通过Zabbix主机发现制定的检查值(本例为system.uname指标)判断是否包含windows或者linux字样来判断是否采用特定的规则。

底层自动发现(Low Level Discovery)
什么叫底层发现?底层发现是相对与网络发现的,这里翻译为“底层”有点儿不好理解,“低级别”的发现也不是很合理,最好的理解是:发现监控项,相对于添加主机而言,监控项是位于主机之下的,所以有“底层发现”之说。底层发现主要是发现监控主机的监控项,并自动进行监控的一个功能。主要可以实现自动添加监控项,添加触发器,添加图,也可以添加另外的主机。通过底层发现规则自动添加的规则叫做原型。
参考文档:https://www.zabbix.com/documentation/4.0/manual/discovery/low_level_discovery
底层发现执行需要在特定的主机之上才可以执行,而且只能通过模板来添加(添加多项,就是复制操作,需要原型来定义)。他的工作原理如下:

  1.通过采集主机的特定指标,获得一个JSON对象
  2.解析JSON对象,匹配原型,获得需要执行的添加项的具体内容
  3.检查该模型是否已经添加,有则结束
  4.添加具体的内容,如果有多项,则添加多项(监控项,触发器,图,其他主机)
下面以监控Java进程的内存使用情况为例,分析如何实现自动发现机器上运行的Java进程,并主动监控Java进程的内存使用情况,本例仅实现监控进程的内存回收时间和执行回收的次数。
监控Java进程在JDK中有一个jps工具,可以监控Java的进程名称和进程号,例如执行如下命令:

[root@upass-server scripts]# jps -l
upaas-config-server-1.1..jar
content-uauth-client-1.1-SNAPSHOT.jar
upaas-eureka-server-1.1..jar
content-uauth-service-1.1-SNAPSHOT.jar
org.apache.catalina.startup.Bootstrap
sun.tools.jps.Jps

例如上面系统运行了Tomcat服务和Spring Cloud的几个微服务,希望通过进程IP获得每一个进程的内存回收数据。这可以通过jstat获得。

[root@upass-server scripts]# jstat -gc
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1536.0 6656.0 1184.0 0.0 158720.0 14280.5 70144.0 29983.1 60888.0 57833.7 7936.0 7439.1 53.392 0.318 53.711

具体指令参考:https://blog.csdn.net/wayne_2015/article/details/71159813
要实现自动发现Java进程,需要通过一个脚本实现发现,并配置到Zabbix Agent中。
发现脚本:zbx_java_discovery.sh

#!/bin/bash
javaProcessList=`sudo $JAVA_HOME/bin/jps -l | grep -v Jps | grep -v Jstat | awk '{print $1"#"$2}' | grep "^[0-9]*#[a-zA-Z].*" `
echo "{\"data\":["
first=
for javaProcess in $javaProcessList;
do
IFS='#' read -r -a items <<< "$javaProcess";
if [ $first == ]; then
echo "{\"{#JAVAPSNAME}\":\"${items[1]}\",\"{#JAVAPSPID}\":\"${items[0]}\"}";
first=
else
echo ",{\"{#JAVAPSNAME}\":\"${items[1]}\",\"{#JAVAPSPID}\":\"${items[0]}\"}";
fi
done; echo "]}";

检查Java进程内存回收的脚本: zbx_java_stat.sh

#!/bin/sh

#jstat -gc $PID
# S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
#512.0 512.0 0.0 0.0 4416.0 1982.6 10944.0 0.0 4480.0 866.8 384.0 73.9 0.000 0.000 0.000
if [ 'YGC' == $ ]; then
pos=
elif [ 'YGCT' = $ ]; then
pos=
elif [ 'FGC' == $ ]; then
pos=
elif [ 'FGCT' == $ ]; then
pos=
elif [ 'GCT' == $ ]; then
pos=
else
pos=
fi
sudo $JAVA_HOME/bin/jstat -gc $ | grep -v YGC | awk -v p=$pos '{print $p}'

把上面两个脚本添加到Zabbx agent UserParameter中:

### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=javaps,/etc/zabbix/scripts/zbx_java_discovery.sh
UserParameter=javastat[*],/etc/zabbix/scripts/zbx_java_stat.sh $ $

这样就可以通过Zabbix Agent调用脚本了。
例如,调用javaps查看java进程信息:

[zabbix@upass-server ~]$ /etc/zabbix/sbin/zabbix_agentd -c /etc/zabbix/conf/zabbix_agentd.conf -t javaps
javaps [t|{"data":[
{"{#JAVAPSNAME}":"upaas-config-server-1.1.0.jar","{#JAVAPSPID}":""}
,{"{#JAVAPSNAME}":"content-uauth-client-1.1-SNAPSHOT.jar","{#JAVAPSPID}":""}
,{"{#JAVAPSNAME}":"upaas-eureka-server-1.1.0.jar","{#JAVAPSPID}":""}
,{"{#JAVAPSNAME}":"content-uauth-service-1.1-SNAPSHOT.jar","{#JAVAPSPID}":""}
,{"{#JAVAPSNAME}":"org.apache.catalina.startup.Bootstrap","{#JAVAPSPID}":""}
]}]

就可以输出底层发现要求的JSON格式了。
调用javastat就可以获得特定进程的内存回收状态了,格式为javastat[PID|YGC|YGCT|FGC|
FGCT|GCT]

[zabbix@upass-server ~]$ /etc/zabbix/sbin/zabbix_agentd -c /etc/zabbix/conf/zabbix_agentd.conf -t javastat[,YGC]
javastat[,YGC] [t|]

这里需要注意:

  1.Zabbix Agent要求用非Root用户运行,如果java进程用其他用户,或者root用户运行,可能jps无法查询,所以需要配置zabbix用户的sudo,请参考:https://blog.csdn.net/huangzhijie3918/article/details/51345178
  2.Zabbix Agent测试时要注意,如果不是确实配置文件位置,那么需要在执行命令时制定配置文件,才可以正确执行。

通过以上工作,zabbix agent就可以实现java进程的内存回收监控了,下面在Zabbix Server上实现自动发现监控。
流程如下:

创建一个监控的模板
  1.在该模板上添加一个自动发现规则
  2.在新添加的规则上添加监控项原型(prototype)
  3.把新模板关联到部署好的主机(也可以添加到上一节中自动发现规则的自动添加模板中)

下面图示配置内容:
添加一个模板,并关联一个模板组:

在模板中添加底层自动发现(Low Level Discovery),实现自定义的java内存监控,这里需要选择采用zabbix agent,并输入关键字(key)为前面编写的javaps命令,该命令执行zbx_java_discovery.sh脚本,获得当前进程列表的JSON数据。

在通过底层自动发现模板,添加监控项(Item)模板,实现自动监控当前运行的有效Java进程。

一共添加了5个监控项,分别获取Java年轻代内存回收次数,时间,全内存回收(FGC)次数和时间,内存回收总耗时。

经过Zabbix自动发现后,就会自动添加监控项,并开始监控,如果存在错误,会有告警提示。

注意:
如果在调试过程中发现不对劲的地方,可以通过调高日志级别,获取更多的日志信息,有助于解决问题。
下面指令调高服务器日志级别:
zabbix_server -c /usr/local/etc/zabbix_server.conf -R log_level_increase
具体文档参考:
https://www.zabbix.com/documentation/4.0/manual/concepts/server

014-Zabbix的自动发现的更多相关文章

  1. 【Zabbix】Zabbix Server自动发现

    Zabbix自动发现 由于有上百台的虚拟机需要监控,如果一个个去添加配置,费时费力.Zabbix的自动发现,可以自动发现需要监控的机器,监控相应指标. 前置条件 安装部署好Zabbix Server. ...

  2. zabbix使用自动发现监控esxi的磁盘存储storage

    zabbix使用自动发现监控esxi的磁盘存储storage 在任意一台可以访问vcenter的zabbix-agent服务器上添加exsi的磁盘监控模板即可 创建模板过程: custom.esxi. ...

  3. zabbix的自动发现、自定义添加监控项目、配置邮件告警

    1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...

  4. 01 - zabbix | LLD自动发现

    01 - zabbix | LLD自动发现 1. 原理 zabbix支持设置变量,用{#VAR_NAME}来表示.然后有一些系统保留的变量 2. 设置 2.1 交换机电源自动发现   名字写好后进进入 ...

  5. zabbix监控自动发现监控tomcat(V1)

    背景说明: 由于zabbix监控使用自带的模版,只能监控主机上只有1个tomcat的场景适合,虽然网上很多朋友都是在每个监控项上面添加一个空格来解决问题.但是个人感觉这种方法还是蛮麻烦的,所以写一篇使 ...

  6. zabbix 添加自动发现端口并监控

    最近在部署zabbix监控  有些服务器上开启的服务端口非常多  如果一个个添加监控会很繁琐,于是想到了自动发现规则  自动发现服务器上的服务端口并进行监控. 在zabbix客户端服务器上进行操作 1 ...

  7. zabbix之 自动发现磁盘io util 监控

    一.iostat Zabbix并没有提供模板来监控磁盘的IO性能,所以我们需要自己来创建一个.iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之 ...

  8. Zabbix实现自动发现端口并监控

    1.新建客户端需要的脚本 # vim discovertcpport.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1&q ...

  9. zabbix配置自动发现,故障邮件告警

    对网段内的主机进行自动发现,自动加入主机组,自定加入template 创建动作时,类型这里选择discovery 然后将发现的主机加入host group和template: 动作针对的是discov ...

  10. zabbix主机自动发现

    环境说明 角色 主机名 IP zabbix-server c1.heboan.com 192.168.88.1 zabbix-agent c2.heboan.com 192.168.88.2 zabb ...

随机推荐

  1. 查询Oracle表空间使用情况

    ,),'990.99')||'%' "使用比(%)",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)" ...

  2. Linux高级调试与优化——进程管理和调度

    进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地 ...

  3. Android-Universal-Image-Loader的缓存处理机制与使用 LruCache 缓存图片

    讲到缓存,平时流水线上的码农一定觉得这是一个高大上的东西.看过网上各种讲缓存原理的文章,总感觉那些文章讲的就是玩具,能用吗?这次我将带你一起看过UIL这个国内外大牛都追捧的图片缓存类库的缓存处理机制. ...

  4. Searching for MobileNetV3

    1. 摘要 基于网络架构搜索和 NetAdapt 算法,作者提出了新一代的 MobileNets,并通过一些先进的结构对其进行了改进. 作者发布了两个模型 MobileNetV3-Large 和 Mo ...

  5. leetcode 621 任务调度器 Task Scheduler

    给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完.CPU 在 ...

  6. Computer Network Homework3’ s hard question

    Computer Network Homework3’ s hard question 1. Which kind of protocol does CSMA belong to? A. Random ...

  7. 阶段3 2.Spring_10.Spring中事务控制_5 spring事务控制的代码准备

    创建一个工程,只搭建环境不做配置.等配置的时候把这个项目相关的代码再复制到新项目里面 jar包的打包方式 导入包 事务控制也是基于AOP的.所以这里导入aspectjweaver 复制jdbcTemp ...

  8. java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap

    七月 26, 2017 1:52:15 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for ...

  9. 使用SpringWebFlow

    使用SpringWebFlow 本章主要内容: · 创建会话式的Web应用程序 · 定义流程状态和行为 Spring Web Flow 是Spring MVC 的扩展,它支持开发基于流程的应用程序.它 ...

  10. vsftp新建用户及目录时遇到的坑

    1.有关vsftp配置及用户权限设置,请参考: http://blog.sina.com.cn/s/blog_3edc5e2e0102vzv8.html 2.需求:公司另一部门要求单独建一目录,来存在 ...