一、zabbix的自动发现
1 使用 Zabbix agent 监控 Linux
https://www.zabbix.com/documentation/7.0/zh/manual/guides/monitor_linux
1.1、zabbix自动发现的三种类型
|--------|----------------------------------------------|
| 序号 | 说明 |
| 1 | 自动网络发现 ( Network discovery) |
| 2 | 主动客户端自动注册 ( Active agent auto-registration ) |
| 3 | 低级别发现 ( low-level discovery ) |
[zabbix自动发现的三种类型]
1.2、zabbix的自动网络发现
|--------|-------------------------------------|
| zabbix提供非常有力和灵活的自动网络发现功能(通过网络发现,可以实现加速zabbix部署、简化管理、在不断变化的环境中使用zabbix而不需要过多的管理)。 zabbix网络发现基于以下信息实现 ||
| 序号 | 说明 |
| 1 | IP段自动发现 |
| 2 | 可用的外部服务(FTP,SSH,WEB,POP3,IMAP,TCP等) |
| 3 | 从zabbix客户端接收到的信息 |
| 4 | 从SNMP客户端接收到的信息 |
[zabbix的自动网络发现]
1.3、zabbix的自动发现原理
|--------|-----------------------------------------------------------------------|
| 网络发现由两个步骤组成【发现】和【动作(action)】 ||
| 发现 | zabbix周期性地扫描在网络发现规则中定义的IP段。根据每一个规则配置自身的检查频率。每一个规则都定义了一个对指定IP段的服务检查集合。 |
| 动作 | 动作是对发现的主机进行相关设置的过程,常用的动作有添加或删除主机、启用或停用主机、添加主机到某个组中、发现通知等。 |
[zabbix的自动发现原理]



1.4、被监控端安装agent并配置【被动模式-自动网络发现】
bash
#直接使用dnf/yum方式在线安装zabbix-agent2实操流程
#1-查看系统当前版本
cat /etc/os-release
#2-配置zabbix的仓库源(根据系统版本选择安装对应系统版本的源)【比如我这里是almalinux9.3也支持红帽9.3】
#(注意【openEuler 22.03 (LTS-SP3)】只能安装rhel8版本的zabbix-agent2内容【wget https://repo.zabbix.com/zabbix/7.0/rhel/8/x86_64/zabbix-agent2-7.0.19-release1.el8.x86_64.rpm -c o -P /data】)
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
dnf clean all
#3-安装zabbix-agent2(安装完成后zabbix-agent2后它的默认配置文件【zabbix_agent2.conf】是在【/etc/zabbix】目录下)
dnf install zabbix-agent2 -y
bash
#修改zabbix-agent2的配置文件后启动实操流程
#1-进入zabbix-agent2的配置文件路径编辑zabbix_agent.conf文件
cd /etc/zabbix/
vi zabbix_agent2.conf
#2-zabbix-agent2的配置文件【/etc/zabbix/zabbix_agent.conf】需修改的内容如下:
#zabbix agentd日志文件路径
LogFile=/var/log/zabbix/zabbix_agentd.log
#指定zabbix server端IP地址
Server=192.168.1.38
#指定启动agentd进程的数量,默认是3个,设置为0,表示关闭agentd的被动模式(zabbix server主动来agent拉取数据)
StartAgents=3
#【被动模式下可不用设置】启用agent的主动模式(zabbix agent主动推送数据到zabbix server),启动主动模式后,agentd将主动将收集到的数据发送到zabbix server端,ServerActive后面指定的ip就是zabbix server端IP
ServerActive=192.168.1.38
#需要监控服务器的主机名或者IP地址,此选择的设置一定要和zabbix web端主机配置中对应的主机名一致。
Hostname=192.168.1.36
#相关配置都可以放到此目录下,自动生效
Include=/etc/zabbix/zabbix_agentd.d/
#启用agent端自定义item功能,设置此参数为1后,就可以使用UserParameter指令了。UserParameter用于自定义监控项。
UnsafeUserParameters=1
#3-启动zabbix-agent2并查看其所占用的网络端口和进程信息
systemctl restart zabbix-agent2.service
netstat -antlp | grep zabbix_agent2
ps -ef | grep zabbix_agent2
#4-设置zabbix-agent2开机自启
systemctl enable zabbix-agent2.service
1.5、zabbix的web监控界面查看自动发现内容【被动模式-自动网络发现】
打开zabbix的web监控界面的左侧导航栏选择【监测】-->【自动发现】即可查看到所有配置了【zabbix客户端】方式的自动发现规则,如下图所示:

注意:如果在zabbix的web监控界面没有显示我们指定的网段设备,则需要检查该网段的设备:《1》是否安装了agent2包;
《2》是否对agent2的配置文件【/etc/zabbix/zabbix_agent2.conf】配置了【Server】指向zabbix-server的IP地址【Hostname】是否修改为了设备的IP;
《3》是否agent2服务正在运行,修改agent2的配置文件后是否重启;
《4》检查设备的防火墙是否开启(若开启了则需要放开agent2的端口,默认是10050);
bash
#永久放开被监控端防火墙中agent2对应的10050端口
firewall-cmd --list-port
firewall-cmd --zone=public --add-port=10050/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port
二、zabbix的自动注册
2.1、实现zabbix自动发现后添加到主机链接监控模板等一系列配置【被动模式-自动网络发现】
目前我们已经实现了在zabbix的自动发现指定网段的主机设备,但是目前并没有将这些发现的主机设备注册到【监测-->主机】下面且没有链接对应的模板内容,因此我们需要对发现的这些主机设置发现的动作,实现发现主机后就可以自动链接监控模板、添加到对应的主机组、资产清单并启用等一系列的操作:
打开zabbix的web监控界面左侧导航栏的【告警】-->【动作】-->【发现动作】-->【创建动作】然后会弹出一个【新的动作】配置界面:
《1》动作: 首选需要配置该动作的名称(方便我们了解这个动作是做什么的);然后就是【添加】动作的条件(即需要满足什么条件就执行该动作的过滤内容)【我这里指定【服务类型 等于 Zabbix 客户端 】【自动发现状态 等于 上】两个宽松条件】还可以指定IP地址等限定条件,可以根据自己的实际情况需要添加。
**《2》操作:**也就是需要执行哪些动作流程(我这里添加了:
|--------------------------------|
| 添加主机 |
| **添加到主机群组:**Discovered hosts |
| **模板链接:**Linux by Zabbix agent |
| 启用主机 |
| **设置主机资产模式:**自动 |
)这五个内容流程,详细操作如下图所示:




2.2、验证发现主机后的自动添加链接模板是否成功【被动模式-自动网络发现】
打开zabbix的web界面点击【数据采集】-->【主机】界面就可以看到发现的这些主机自动添加上了,我们可以随便点击一个自动添加上的主机查看信息都是我们配置的动作里面的【操作】内容;同时还可以点击左侧导航栏下的【资产记录】-->【主机】查看到所有自动发现后自动添加到资产的主机内容,详细操作如下图所示:



2.3、客户端主动自动注册【主动模式】(推荐使用)
客户端自动注册(agent auto-registration)功能**【主要用于agent主动且自动向zabbix server注册】。与前面的Network discovery具有同样的功能,但是这个功能更适用于特定的环境,当存在一个条件未知(如agent端的IP地址段、agent端的操作系统版本等信息)时,Agent去请求Server仍然可以实现自动添加监控的功能**(如:云环境下的监控,云环境中,IP分配就是随机的,这个功能就可以很好的解决类似的问题)。
配置主动客户端自动注册有两个步骤:分别是【在客户端配置文件中设置参数】 、【在zabbix web配置一个action】。
2.3.1、客户端的操作
需要编辑agent2配置文件【/etc/zabbix/zabbix_agent2.conf】四个内容【Server】【ServerActive】【Hostname】【HostMetadata】。
bash
#1-实现客户端主动自动注册的agent2配置文件【/etc/zabbix/zabbix_agent2.conf】修改内容
#这里主动模式下zabbix服务器的地址
Server=192.168.1.38
#这里主动模式下zabbix服务器的地址,默认端口号是10051
ServerActive=192.168.1.38
#客户端名称(采用功能_IP【mysql_192.168.1.41】或直接用IP)
Hostname=192.168.1.41
#这里设置了两个元数据,一个是告诉自己是linux服务器,另一个就是写一个通用的带有公司标识的字符串(两个元数据中间用空格隔开,可以指定多个元数据内容)
HostMetadata=linux zabbix.ck
#2-agent2的配置文件修改完成后需要重启和查看agent2进程是否存在
systemctl restart zabbix-agent2.service
ps -ef | grep zabbix_agent2
systemctl enable zabbix-agent2.service
自动注册请求发生在每次客户端发送一个主动刷新检查请求到服务器时。请求间的延时在客户端中配置文件zabbix_agentd.conf的RefreshActiveChecks 参数中指定。第一次请求将在客户端重启之后立即发送。
2.3.2、zabbix的web界面配置action
打开zabbix的web界面的左侧导航栏【告警】-->【动作】-->【自主注册动作】-->【创建动作】,主要分为两个内容:
《1》动作:首选需要添加名称(如:客户端自主自动注册);然后就是添加过滤条件(也就是将agent2配置文件中的元数据内容添加上)【如:【主机元数据 包含 linux 】【主机元数据 包含 zabbix.ck】】;
**《2》操作:**实现agent2主动上报给zabbix-server后,zabbix服务端自动将这个设备添加到主机、链接对应模板、启用该主机、设置清单模式等内容(
|---------------------------------------|
| 添加主机 |
| **添加到主机群组:**Discovered hosts |
| **模板链接:**Linux by Zabbix agent active |
| 启用主机 |
| **设置主机资产模式:**自动 |
)详细操作如下图所示:




2.3.3、验证客户端主动自动注册是否成功
打开zabbix的web端的【数据采集】-->【主机】查看该主机是否自动添加到该界面上了(添加上了则表示成功)其可以点击该主机的信息查看内容(也可以到【监测】-->【主机】界面查看该主机的【最新数据】【仪表盘】内容),详细操作如下图所示:
注意:若在zabbix的web界面中没有查看到主动自动注册的主机设备,那么需要检查zabbix-server的10051端口是否开放可访问,若没有放开则需要放开:
bash
#永久放开zabbix-server中防火墙对应的10051端口
firewall-cmd --list-port
firewall-cmd --zone=public --add-port=10051/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port





2.4、低级别发现Low-level discovery(LLD)
2.4.1、低级别发现类型
|--------|----------------------------------------------------------------------------|
| 序号 | 低级别发现类型 |
| 1 | 文件系统、磁盘分区发现 |
| 2 | 网络接口发现 |
| 3 | SNMP OID发现 |
| 4 | CPU核和状态 |
| ||
| 序号 | zabbix中自带的key |
| 1 | 【vfs.fs.discovery】【vfs.dev.discovery】 适用于zabbix agent监控方式,用来获取文件系统、磁盘分区信息。 |
| 2 | 【snmp.discovery】 SNMP agent监控方式。 |
| 3 | 【net.if.discovery】 适用于zabbix agent监控方式,用来获取网络接口信息。 |
| 4 | 【system.cpu.discovery 】 适用于zabbix agent监控方式,用来获取CPU信息。 |
| 可以用zabbix-get来查看key获取的数据,对于snmp,不能通过zabbix-get来验证,只能在web页面中进行配置使用 bash #除了snmp键外,其余的zabbix键都可以使用zabbix_get测试获取(-s后面指定的是哪台被监控的设备IP) zabbix_get -s 192.168.1.10 -k vfs.dev.discovery zabbix_get -s 192.168.1.10 -k net.if.discovery #zabbix_get -s 192.168.1.10 -k net.if.discovery命令执行后的显示结果示例 #其中{#IFNAME}就是一个宏,会返回系统中所有网卡的名字 [{"{#IFNAME}":"lo"},{"{#IFNAME}":"ens33"}] ||
[低级别发现类型]

注意:在使用zabbix_get获取被监控主机的指定key内容时若提示"zabbix_get [321]: Get value error: cannot connect to [[192.168.1.10]:10050]: connection error (POLLERR,POLLHUP)"时需要检查:《1》被监控端设备的10050端口是否放开;《2》zabbix-agent2服务是否在运行;《3》zabbix-agent2服务的配置文件【/etc/zabbix/zabbix_agent2.conf】中的【Server】是否指向zabbix-server的IP;排查无误后就可以解决这个错误了。
2.4.2、zabbix中的宏
简单的说宏就是一个字符串变量,作用和变量作用很类似;不同的是宏它是一个常量,通常是一个固定值;宏主要作用是方便我们配置一些经常需要修改的值,用宏替换比较方便(如:我们要监控100台nginx,其中nginx的端口有时候监听在80,有时候监听在8000;若不使用宏,那么对应端口就是一个固定的数字,如果端口发生变化那么我们就要修改100次,十分麻烦;有了宏我们只需要修改对应宏的值即可)。
宏主要应用在zabbix的模板、items、trigger中,而在自动发现中使用宏更多。
在zabbix中宏分【内建宏】和【自定义宏】, 所谓内置宏就是zabbix中原生就有的宏,我们可以直接调用;自定义宏就是我们自己按照需求定义的一个宏。宏变量都是大写的。使用宏变量,可以使zabbix功能更加强大。
bash
#要使用内置宏,固定的语法格式为:
{#MACRO}
#在低级别发现(LLD)中常用的内置宏有{#FSNAME}, {#FSTYPE}, {#IFNAME}, {#SNMPINDEX}, {#SNMPVALUE}等。
#其中,{#FSNAME}表示文件系统名称,{#FSTYPE}表示文件系统类型,{#IFNAME}表示网卡名称。
bash
#使用自定义宏,语法格式为:
{$MACRO}
#宏变量可以定义在主机、模板以及全局,宏用在不同位置,作业的级别也不同,其优先级由高到低顺序如下:
#《1》主机级别的宏优先级最高
#《2》第一级模板中的宏
#《3》第二级模板中的宏
#《4》全局级别的宏
因此,zabbix查找宏的顺序为:首选查找主机级别的宏,如果在主机级别不存在宏设置,那么zabbix就会去模板中看是否设置有宏。如果模板中也没有,将会查找使用全局的宏。若是在各级别都没找到宏,将不使用宏。





三、zabbix的主动模式与被动模式
默认情况下,zabbix server会直接去每个agent上抓取数据,这对于agent来说,是被动模式,也是默认的一种获取数据的方式,但是,当zabbix server监控主机数量过多的时候,由Server端去抓取agent上的数据,Zabbix server会出现严重的性能问题,主要表现的问题如下:
《1》Web操作很卡,容易出现502;
《2》图层断裂;
《3》开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题。
针对被动模式导致的zabbix-server性能问题,有如下两个优化方向:
《1》用Proxy或者Node模式做分布式监控;
《3》调整Agentd为主动模式。
3.1、被监控端agent的配置优化
打开被监控端agent的配置文件【/etc/zabbix/ zabbix_agent2.conf】优化如下参数内容:
bash
#指定启动agentd进程的数量,默认是3个,设置为0,表示关闭agentd的被动模式,关闭被动模式后,agent端的10050端口也关闭了,若要兼容被动模式,可把StartAgents设为1,如果一开始就是使用主动模式的话建议把StartAgents设为0,关闭被动模式。(zabbix server主动来agent拉取数据)
StartAgents=0
#启用agent的主动模式(zabbix agent主动推送数据到zabbix server),启动主动模式后,agentd将主动将收集到的数据发送到zabbix server端,ServerActive后面指定的ip就是zabbix server端IP
ServerActive=192.168.1.38
#需要监控服务器的主机名或者IP地址,此选择的设置一定要和zabbix web端主机配置中对应的主机名一致。
Hostname=192.168.1.10
#这里设置了两个元数据,一个是告诉自己是linux服务器,另一个就是写一个通用的带有公司标识的字符串(两个元数据中间用空格隔开,可以指定多个元数据内容)
HostMetadata=linux zabbix.ck
#启用agent端自定义item功能,设置此参数为1后,就可以使用UserParameter指令了。UserParameter用于自定义监控项。
UnsafeUserParameters=1
3.2、Zabbix Server端配置调整
如果开启了agent端的主动发送数据模式,需要在zabbix Server端修改如下两个参数,保证性能( 打开zabbix-server端的配置文件【】)
bash
#zabbix-server端的配置文件参数优化
#将zabbix Server主动收集数据进程减少一些
StartPollers=10
#将负责处理Agentd推送过来的数据的进程开大一些
StartTrappers=200
注意:如果zabbix-server是在容器中运行的,则需要修改zabbix-server容器的【StartPollers】【StartTrappers】参数值后再重启该容器;若是【docker-compose.yml】文件则修改该文件中的【StartPollers】【StartTrappers】参数值后执行【docker-compose up -d】命令重启。
3.3、调整模板为主动式
因为收集数据的模式发生了变化,因此需要把所有的监控项的类型由原来的"zabbix客户端【Linux by Zabbix agent】"改成"zabbix客户端(主动式)【Linux by Zabbix agent active】"。这样,只需要简单的几步,就完成了主动模式的切换,调整之后服务器不卡了,图层不裂了,进程也少了。
注意:我们在制作模板的时候建议做两套模板(一套被动、一套主动)【在创建好了一套后直接点击该模板的【克隆】模式按照提示修改类型和名称即可(zabbix-server7.0直接点击【克隆即可】、但是zabbix-sevre7.0以下需要点击【全克隆】)】。

3.3.1、直接将指定模板的模式调整为【zabbix客户端(主动式)】
若想将指定模板的模式直接调整为为主动式则选择zabbix的web界面左侧导航栏的【数据采集】-->【模板】-->【过滤出模板】-->选择指定模板的【监控项】-->【全选监控项】-->【批量更新】-->【类型】(zabbix客户端(主动式))-->【更新】即可,详细操作如下图所示:



3.3.2、直接将指定主机的模式调整为【zabbix客户端(主动式)】
打开zabbix的web界面左侧导航栏的【数据采集】-->【主机】-->模板下的【Linux by Zabbix agent】取消链接-->点击【选择】(Linux by Zabbix agent active)-->【更新】即可,如下图所示:


