014-Zabbix的自动发现
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的自动发现的更多相关文章
- 【Zabbix】Zabbix Server自动发现
Zabbix自动发现 由于有上百台的虚拟机需要监控,如果一个个去添加配置,费时费力.Zabbix的自动发现,可以自动发现需要监控的机器,监控相应指标. 前置条件 安装部署好Zabbix Server. ...
- zabbix使用自动发现监控esxi的磁盘存储storage
zabbix使用自动发现监控esxi的磁盘存储storage 在任意一台可以访问vcenter的zabbix-agent服务器上添加exsi的磁盘监控模板即可 创建模板过程: custom.esxi. ...
- zabbix的自动发现、自定义添加监控项目、配置邮件告警
1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...
- 01 - zabbix | LLD自动发现
01 - zabbix | LLD自动发现 1. 原理 zabbix支持设置变量,用{#VAR_NAME}来表示.然后有一些系统保留的变量 2. 设置 2.1 交换机电源自动发现 名字写好后进进入 ...
- zabbix监控自动发现监控tomcat(V1)
背景说明: 由于zabbix监控使用自带的模版,只能监控主机上只有1个tomcat的场景适合,虽然网上很多朋友都是在每个监控项上面添加一个空格来解决问题.但是个人感觉这种方法还是蛮麻烦的,所以写一篇使 ...
- zabbix 添加自动发现端口并监控
最近在部署zabbix监控 有些服务器上开启的服务端口非常多 如果一个个添加监控会很繁琐,于是想到了自动发现规则 自动发现服务器上的服务端口并进行监控. 在zabbix客户端服务器上进行操作 1 ...
- zabbix之 自动发现磁盘io util 监控
一.iostat Zabbix并没有提供模板来监控磁盘的IO性能,所以我们需要自己来创建一个.iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之 ...
- Zabbix实现自动发现端口并监控
1.新建客户端需要的脚本 # vim discovertcpport.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1&q ...
- zabbix配置自动发现,故障邮件告警
对网段内的主机进行自动发现,自动加入主机组,自定加入template 创建动作时,类型这里选择discovery 然后将发现的主机加入host group和template: 动作针对的是discov ...
- zabbix主机自动发现
环境说明 角色 主机名 IP zabbix-server c1.heboan.com 192.168.88.1 zabbix-agent c2.heboan.com 192.168.88.2 zabb ...
随机推荐
- 浏览器端-W3School-JavaScript-HTML DOM:HTML DOM Event 对象
ylbtech-浏览器端-W3School-JavaScript-HTML DOM:HTML DOM Event 对象 1.返回顶部 1. HTML DOM Event 对象 实例 哪个鼠标按钮被点击 ...
- Windows10无法打开NVIDA控制面板
今天开机,突然发现NVIDA控制面板无法打开,在桌面右键启动nView Desktop Manager,点击启动,发现也无法启动控制面板,并且提示[您当前未使用连接到nvidia gpu的显示器].查 ...
- ListView 中如何优化图片?
图片的优化策略比较多.1.处理图片的方式:如果 ListView 中自定义的 Item 中有涉及到大量图片的,一定要对图片进行细心的处理,因为图片占的内存是ListView 项中最头疼的,处理图片的方 ...
- Windows下搭建Docker与Kubernetes(DevOps一)
Docker与Kubernetes (二)搭建 开通 Hyper-V 安装Docker for Windows 开通Kubernetes 3.关键概念 PodKubernetes 中的最小单元,一个 ...
- 三十六:数据库之SQLAlchemy外建之一对一关系
relationship()的uselist参数默认为True,即一对多,如果要一对一,则需让uselist=False 准备工作 from sqlalchemy import create_engi ...
- Toad oracle
CJ2PFCQ6P49Q4WHQT2D03GNTVX2AN5DG6FWD04YL4QW625KT391J9YF38VKB92SNBWNW-RU-BOARD-BD cr2384
- 浏览器从输入URL到渲染出页面发生了什么
总体来说分为以下几个过程: 1. DNS解析 2. TCP连接 3. 发送HTTP请求 4. 服务器处理请求并返回HTTP报文 5. 浏览器解析渲染页面 6. 连接结束 参考资料:[https:// ...
- 【miscellaneous】监狱智能视频监控系统设计解决方案
监狱智能视频监控系统设计解决方案 一.系统概况 随着司法监狱管理系统内视频监控系统的日益发展,现有的被动式人工监控这一传统模式已无法满足新形势下的监管工作需求,尤其是现在靠轮询的视频监控方式,无法对突 ...
- 【VS开发】【图像处理】自动白平衡(AWB)算法---色温曲线
原文地址:http://blog.csdn.net/wzwxiaozheng/article/details/38434391 白平衡算法---色温曲线 本文大体讲解了白平衡的算法流程,适用于想了解和 ...
- CoolFormat源代码格式化工具(转)
软件介绍: CoolFormat源代码格式化是一款C\C++\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具.软件可以快 ...