五、Zabbix自动化监控

文章目录

1. 自动化监控概述

1.1 自动化添加主机

假设我们现在有100台主机需要添加,如果是一台台手动添加,工作量非常大。怎么样解决呢?我们可以通过zabbix提供的自动注册或自动发现来实现主机的批量添加。

1.2 自动化添加主机方式

网络发现(Network discovery)
自动注册(Active agent auto-registration)

2. 网络发现概念

2.1 发现原理

  • 自动发现由两个步骤组成:发现discovery 和动作action
    • 1.首先zabbix 周期性扫描“网络发现规则”中定义的IP段,发现满足规则的主机
    • 2.然后使这些主机完成动作,添加主机、链接模版、发送通知等
      在这里插入图片描述

2.2 规则示例

配置zabbix的网络来发现主机:

  • 首先进入配置→自动发现
  • 点击创建发现规则
  • 编辑自动发现规则属性
    • IP范围:192.168.20.1 - 192.168.20.254指zabbix会自动扫描这个网段的所有IP,依次连接这些IP的10050端口;
    • 检查:尝试通过system.uname监控项,看看是否能获取到数据,如果可以则假如该主机;
      在这里插入图片描述

2.3 网络发现实践

2.3.1 场景需求

例如我们设置IP段为192.168.20.1-192.168.20.254的网络发现规则,我们需要怎么操作:

  • 发现有zabbix agent 运行的主机
  • 每10分钟执行一次
  • 如果主机正常运行时间超过2分钟,添加主机
  • 如果主机停机时间超过24小时,删除主机
  • 将Linux主机添加到"Linux server"组、链接模版Template OS linux到linux主机

2.3.2 发现场景-步骤1

在这里插入图片描述

2.3.3 发现场景-步骤2

点击配置→动作→Discovery actions

  • “zabbix agent"服务器是"up”
  • system.uname(规则中定义的zabbix agent键值)包含“linux”
  • 正常运行时间为2分钟(120秒)或者更长
    在这里插入图片描述

该动作(action)将执行以下操作:

  • 将发现的主机添加到Linux server组(如果以前未添加主机,则自动添加主机)
  • 链接主机到Template OS Linux 模版
    在这里插入图片描述

2.3.4 发现场景-步骤3

定义动作删除失联主机
在这里插入图片描述
在这里插入图片描述

2.3.5 网络发现结果检查

2.4 网络发现总结

网络发现虽然能发现并添加主机,但依然存在一些问题:

  • 1.发现时间长,效率低; 因为是串行添加 1-2-3-4-5
  • 2.扫描过程中容易漏扫
  • 3.当IP地址不固定难以实现
  • 4.无法实现不同类型主机关联不同模版

3. 自动注册概念

3.1 注册原理

自动注册(agent auto-registration)功能主要用于Agent 主动向Server注册,与网络发现有同样的功能,但是这个功能更适用于云环境下,因为云环境下IP地址是随机的,难以使用网络发现方式实现;
1、注册时间短
2、适用于云复杂环境,IP地址无规律
3、关联不同的模版
4、提高server性能

3.2 注册配置

自动注册主要分为两个步骤:
1.自动注册,客户端避险开启主动模式,并设定主机名称
2.在zabbix web中配置一个自动注册的动作

3.3 自动注册实践-1

3.3.1 场景需求

  • 根据不同的主机名称关联不同的主机模版
  • web主机节点,需要关联Template OS Linux模版、TCP status模版、Nginx模版
  • db主机节点,需要管理Template OS Linux模版、MySQL模版

3.3.2 配置ZabbixAgent

每当活动agent刷新主动检查到服务器的请求时,都会进行自动注册尝试。
请求的延时在agent的RefreshActiveChecks参数中指定,第一个请求在agent重启后立即发送

[root@localhost ~]# vim /etc/zabbix/zabbix_agent2.conf 
Server=192.168.20.46
ServerActive=192.168.20.46  #设置主动模式 
Hostname=web02              #指定主机名,如不指定则服务器将使用agent的系统主机名命名主机

[root@localhost ~]# /etc/init.d/zabbix-agent2 restart

3.3.3 配置ZabbixServer

点击配置→动作→Autoregistration actions, 添加两个动作,一个是针对web组,一个是针对db组;
在这里插入图片描述

3.3.4 自动注册结果检查

在这里插入图片描述

3.4 自动注册实践-2

3.4.1 场景需求

  • 根据不同主机名称关联不同的主机模版
  • web主机节点,需要关联Template OS Linux模版、TCL status模版、Nginx模版、PHP模版;
  • db主机节点,需要关联Template OS Linux模版、MySQL模版;
  • 客户端采用Ansible Playbook实现,做到完全自动化添加主机,并智能添加模版

3.4.2 配置Ansible

#1.安装
#2.配置
server
serverActive
Hostname
#2.所有的脚本,所有的UserParameter全部导入到对应
的目录中;
#3.启动
# 脚本参考: roles_zbx.tar.gz
1.agent适用ansible来运行; (serverActive
Hostname )
2.所有的agent都需要有脚本,conf配置文件,其次,服
务必须都是启用了对应的状态(Ansible);
3.给server导入所有的模板;
3.配置server,配置自动注册的动作,根据不同主机名
称,关联不同的模板

3.4.3 配置ZabbixServer

点击配置→动作→Autoregistration actions,添加两个动作,一个针对web组,一个针对db组
在这里插入图片描述

3.4.4 自动注册结果检查

3.5 自动注册实践-3

3.5.1 场景需求

  • 使用主机元数据来区分Linux主机和Windows主机,根据不同的操作系统关联不同的主机模版
    • Linux主机关联Template OS Linux模版
    • Windows主机关联Template OS Windows模版

3.5.2 配置ZabbixAgent

1、在配置文件中额外添加HostMetadataItem一行内容:

[root@web01 ~]# vim /etc/zabbix/zabbix_agent2.conf
Server=192.168.20.46
ServerActive=192.168.20.46
Hostname=web01
HostMetadataItem=system.uname

2、这样就能确保主机元数据将包含“Linux”或“Windows”,主机元数据示例如下:

#Linux主机获取的元数据信息
#Linux: Linux server3 3.2.0-4-686-pae #1
SMP Debian 3.2.41-2 i686 GNU/Linux

#Windows主机获取的元数据信息
#Windows: Windows WIN-0PXGGSTYNHO 5.0.6001
Windows Server 2008 Service Pack 1 Intel
IA-32

3.5.3 配置ZabbixServer

  • 第一个动作:

    • 名称: Linux主机自动注册
    • 条件:主机元数据似Linux
    • 操作:链接到模版: Template OS Linux
  • 第二个动作:

    • 名称: windows主机自动注册
    • 主机以元数据似Windows
    • 操作:链接到模版:Template OS Windows

4. 主动与被动模式概念

4.1 主被模式基本概念

默认情况下,zabbix server会直接去每个agent上抓去数据,对于agent来说,是被动模式,也是默认的一种获取数据的方式,但是当zabbix server 监控主机数量过多的时候,由Zabbix Server端去抓取agent上的数据,zabbix server会出现严重的性能问她,主要表现如下:

  • web操作很卡,容易出现502
  • 监控图形中图形断裂
  • 监控告警不及时

如何解决呢? 可以使用主动模式,agent端主动汇报自己收集到的数据给Zabbix Server,这样Zabbix Server就会空闲很多。

4.2 主被模式功能区别

被动和主动模式,针对的都是Agent;
被动模式: Server轮询检测Agent
主动模式:Agent主动上报给Server

4.3 主被模式与发现的关系

自动发现属于被动模式,效率低,如果扫描主机过多,容易出现漏添主机的情况
自动注册属于主动模式,效率高,能根据主机名称、元数据等关联不同主机模版

4.4 主被模式与监控项的关系

zabbix默认使用的是被动模式监控,当需要获取100个监控项的值,需要Server向Agent轮训100次
Zabbix主动模式如需要获取100个监控项的值,Server会将要获取监控项的值生成一个清单给Agent,Agent采集完成后一次将所有数据发送给Server

4.5 何时需要使用主动模式

1.当队列存在大量延时的监控项
2.当监控主机超过500台

4.6 如何调为主动模式

4.6.1 修改Agent配置

注意: Agent2目前不支持主动模式,测试:建议使用zabbix-agent
1.修改zabbix_agentd.conf 配置文件

[root@web01 ~]#  vim /etc/zabbix/zabbix_agentd.conf
ServerActive=192.168.20.46
Hostname=web01 #要与zabbixweb中添加主机对应,否则会找不到主机

2.当开启agent主动发送数据模式,还需要在zabbix server端修改两个参数,保证性能。

[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
StartPollers=10 #zabbix server主动采集数据进程减少一些
StartTrappers=200 #负责处理Agent推送过来数据的进程开大一些

4.6.2 修改模式为主动式

1.克隆一份被动模式监控项的模版
2.点解克隆模版→选中所有监控项→批量修改→zabbix客户端(主动式)
3.选择主机取消并清理被动模版,然后重新关联新的“主动式”模版

4.6.3 总结

当完成主动模式的切换之后,可以持续观察图zabbix server的负载,应该会降下来不少,其次在操作上也不卡了, 图也不裂了,zabbix的性能得到较大的提升。

5. 低级发现LLD

5.1 什么是LLD

自动发现:是用来自动化添加主机的
低级自动发现:是用来自动化添加监控项的

5.2 为何需要LLD

场景1: 监控所有主机的端口,而不同的主机启动的端口都不一样,怎么办
场景2:监控所有主机的分区,不同主机分区都不一样,怎么办
场景3:监控所有主机的网络、不同的主机配置都不一样,怎么办

5.3 LLD快速体验

基于已有的自动发现规则,添加一个监控原型,用来监控所有网卡的MAC地址

5.3.1 编写网卡采集命令

[root@localhost ~]# ifconfig eth0 | awk '/eth0/ {print $NF}'
00:0C:29:1F:D3:72
[root@localhost ~]# ifconfig eth1 | awk '/eth1/ {print $NF}'
00:0C:29:1F:D3:7C

5.3.2 创建自定义监控项

[root@localhost ~]# vim  /etc/zabbix/zabbix_agent2.d/system.conf
UserParameter=net.mac[*],ifconfig  "$1" | awk '/$1/ {print $$NF}'

[root@localhost ~]# /etc/init.d/zabbix-agent2 restart

5.3.3 服务端测试取值

[root@zabbix-server ~]# zabbix_get  -s 192.168.20.49 -k net.mac[eth0]
00:0C:29:1F:D3:72
[root@zabbix-server ~]# zabbix_get  -s 192.168.20.49 -k net.mac[eth1]
00:0C:29:1F:D3:7C

5.3.4 web添加监控原型

单击配置→主机→自动发现规则→Network interface discovery→监控项原型→创建监控项原型
在这里插入图片描述

5.4LLD原理分析

为什么能自动创建并监控eth0、eth1的mac地址呢,其实就是依靠“自动发现规则\监控原型”来实现

5.4.1 发现规则

当我们查看“自动发现规则”的时候发现它定义了一个特殊的key,net.if.discovery,这个key可以提取到主机所有网卡名称

[root@zabbix-server ~]# zabbix_get -s 192.168.20.49 -k net.if.discovery
[{"{#IFNAME}":"lo"},{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"}]

5.4.2 监控原型

然后在通过“监控原型”将“自动发现规则”提取到的网卡名称依次传递给监控项,完成自动创建
在这里插入图片描述
如果后期增加eth2 网卡会自动添加对应的监控项,但移除eth2网卡并不会自动移除该网卡对应的监控项;

5.5 LLD监控主机端口实例

特殊监控项:提取每台主机的端口
系统:listen.tcp[{#TCP_PORT}]
脚本:监控项(必须预留能传参的位置)

  • 监控每台主机端口:
    • 1.定义自动发现规则
    • 2.定义监控项原型
# 编写脚本,用来获取主机所有端口,效果如下
{
	"data:[
		{"{#TCP_PORT}":"10050"},
		{"{#TCP_PORT}":"12345"},
		{"{#TCP_PORT}":"22"},
		{"{#TCP_PORT}":"25"},
		{"{#TCP_PORT}":"3306"},
		{"{#TCP_PORT}":"35934"},
		{"{#TCP_PORT}":"35986"},
		{"{#TCP_PORT}":"6379"},
		{"{#TCP_PORT}":"80"},
		{"{#TCP_PORT}":"8005"},
		{"{#TCP_PORT}":"8080"}
	]
}

5.5.1 编写发现规则脚本

[root@web01 ~]# vim /etc/zabbix/zabbix_agent2.d/discovery_port.sh
#!/bin/bash

port_array=($(ss -tnlp | awk '{print $4}' |awk -F ":" '{print $NF}' |  egrep "^[0-9]+$" | sort  | uniq | xargs))
length=${#port_array[@]}

printf "{\n"
printf '\t'"\"data\":["

index=0

for i in ${port_array[@]}
do 
    index=$[ $index +1 ]
    printf '\n\t\t{'
    if [ $index -eq ${length} ];then
	printf "\"{#TCP_PORT}\":\"${i}\"}"
    else
	printf "\"{#TCP_PORT}\":\"${i}\"},"
    fi
done
    printf "\n\t]\n"
    printf "}\n"


#执行脚本
[root@web01 ~]# sh /etc/zabbix/zabbix_agent2.d/discovery_port.sh 
{
	"data":[
		{"{#TCP_PORT}":"10050"},
		{"{#TCP_PORT}":"12345"},
		{"{#TCP_PORT}":"22"},
		{"{#TCP_PORT}":"25"},
		{"{#TCP_PORT}":"3306"},
		{"{#TCP_PORT}":"35934"},
		{"{#TCP_PORT}":"35986"},
		{"{#TCP_PORT}":"6379"},
		{"{#TCP_PORT}":"80"},
		{"{#TCP_PORT}":"8005"},
		{"{#TCP_PORT}":"8080"}
	]
}

5.5.2 创建特殊的监控项

#定义一个特殊的zabbix监控项
[root@web01 tmp]# vim  /etc/zabbix/zabbix_agent2.d/discovery_port.conf 
UserParameter=port.discovery,/bin/bash  /etc/zabbix/zabbix_agent2.d/discovery_port.sh

#重启agent
[root@web01 zabbix_agent2.d]#  /etc/init.d/zabbix-agent2 restart

5.5.3 服务端测试取值

[root@zabbix-server ~]# zabbix_get -s 192.168.20.47 -k port.discovery
{
	"data":[
		{"{#TCP_PORT}":"10050"},
		{"{#TCP_PORT}":"12345"},
		{"{#TCP_PORT}":"22"},
		{"{#TCP_PORT}":"25"},
		{"{#TCP_PORT}":"3306"},
		{"{#TCP_PORT}":"35934"},
		{"{#TCP_PORT}":"35986"},
		{"{#TCP_PORT}":"6379"},
		{"{#TCP_PORT}":"80"},
		{"{#TCP_PORT}":"8005"},
		{"{#TCP_PORT}":"8080"}
	]
}

5.5.4 web创建自动发现规则

名称: port discovery
键值: port discovery #取得所有的端口号
在这里插入图片描述

5.5.5 web创建监控项原型

名称:Check Port {#TCP_PORT}
键值:net.tcp.listen[{#TCP_PORT}],将端口号传递至该监控项中
在这里插入图片描述

5.5.6 web创建触发器

在这里插入图片描述

5.5.7 web结果验证

在这里插入图片描述

5.6 LLD监控Redis多实例实践

5.6.1 场景需求说明

redis 7001 client_connected,user,max,
redis 7002 client_connected,user,max,
特殊脚本: 提取redis端口;7001 7002
脚本:自定义监控项(端口,clients_connected)

5.6.2 Redis监控配置

1.提取监控项(预留两个传参位置,port,key)
2.发现规则,脚本,提取数据,封装特殊的监控项
在这里插入图片描述

5.6.2.1 场景环境搭建

1.安装redis服务
[root@web01 tmp]# yum install redis -y

2.准备配置文件

[root@web01 redis.conf.d]# cat redis-7001.conf 
bind 127.0.0.1
port 7001
daemonize yes
[root@web01 redis.conf.d]# cat redis-7002.conf 
bind 127.0.0.1
port 7002
daemonize yes

3.启动服务

[root@web01 redis.conf.d]# redis-server ./redis-7001.conf 
[root@web01 redis.conf.d]# redis-server ./redis-7002.conf 
[root@web01 redis.conf.d]# netstat -tnlp | grep redis
tcp        0      0 127.0.0.1:7001              0.0.0.0:*                   LISTEN      13898/redis-server  
tcp        0      0 127.0.0.1:7002              0.0.0.0:*                   LISTEN      13902/redis-server
5.6.2.2 编写采集数据脚本
[root@web01 zabbix_agent2.d]# cat redis_mutil_status.sh 
#!/bin/bash

port=$1
key=$2
redis-cli -p ${port} info | grep "\<${key}\>" |  awk -F ':' '{print $NF}'

#测试脚本
[root@web01 zabbix_agent2.d]# ./redis_mutil_status.sh  7001 connected_clients
1
[root@web01 zabbix_agent2.d]# ./redis_mutil_status.sh  7002 connected_clients
2
5.6.2.3 创建自定义监控项
[root@web01 zabbix_agent2.d]# cat  redis_mutil_status.conf
UserParameter=rds.status[*],/etc/zabbix/zabbix_agent2.d/redis_mutil_status.sh "$1" "$2"
#重启agent2
[root@web01 zabbix_agent2.d]# /etc/init.d/zabbix-agent2 restart
5.6.2.4 服务端测试取值
[root@zabbix-server ~]# zabbix_get -s 192.168.20.47 -k rds.status[7001,connected_clients]
1
[root@zabbix-server ~]# zabbix_get -s 192.168.20.47 -k rds.status[7002,connected_clients]
2

5.6.3 配置自动发现LLD

5.6.3.1 编写发现规则脚本
[root@web01 zabbix_agent2.d]# ./redis_mutil_discovery.sh 
{
	"data":[
		{"{#PORT}":"6379"},
		{"{#PORT}":"7001"},
		{"{#PORT}":"7002"}
	]
}
[root@web01 zabbix_agent2.d]# cat ./redis_mutil_discovery.sh 
#!/bin/bash

rds_port=($(netstat -lntp |grep redis | awk '{print $4}' | awk -F ':' '{print $NF}' | xargs))
length=${#rds_port[@]}

printf "{\n"
printf '\t'"\"data\":["

index=0
for i in ${rds_port[@]}
do
	index=$[ $index + 1 ]
	printf '\n\t\t{'
	if [ $index -eq ${length} ];then
		printf "\"{#PORT}\":\"${i}\"}"
	else
		printf "\"{#PORT}\":\"${i}\"},"
	fi
done
printf "\n\t]\n"
printf "}\n"


#执行脚本
[root@web01 zabbix_agent2.d]# ./redis_mutil_discovery.sh 
{
	"data":[
		{"{#PORT}":"6379"},
		{"{#PORT}":"7001"},
		{"{#PORT}":"7002"}
	]
}
5.6.3.2 创建发现规则监控项
[root@web01 ~]# cat /etc/zabbix/zabbix_agent2.d/redis_mutil_discovery.conf 
UserParameter=redis.discovery,sudo /bin/bash /etc/zabbix/zabbix_agent2.d/redis_mutil_discovery.sh

[root@web01 ~]# /etc/init.d/zabbix-agent2 restart
5.6.3.3 服务端测试取值
[root@zabbix-server ~]# zabbix_get -s 192.168.20.47 -k  redis.discovery
{
	"data":[
		{"{#PORT}":"7001"},
		{"{#PORT}":"7002"}
	]
}

5.6.4 配置zabbix web

5.6.4.1 web创建自动发现规则

创建模版→自动发现→创建自动发现规则

在这里插入图片描述

5.6.4.2 web创建监控项原型

在这里插入图片描述

5.6.4.3 web创建触发器原型
名称: Redis {#PORT} 内存利用达70%

#故障表达式原型
{Template Redis Status panpancar:rds.status[{#PORT},used_memory].last()}/{Template Redis Status panpancar:redis.status[{#PORT},  total_system_memory].last()}*100>=70

#恢复表达式原型
{Template Redis Status panpancar:rds.status[{#PORT},used_memory].last()}/{Template Redis Status panpancar:redis.status[{#PORT},  total_system_memory].last()}*100<=50

在这里插入图片描述

5.6.4.4 web创建图形原型

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.6.4.6 测试告警并验证
[root@web01 ~]# redis-cli -p 7001 
127.0.0.1:7001> debug populate 20000000


[root@web01 ~]# redis-cli -p 7001 
127.0.0.1:7001>  FLUSHALL
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zabbix是一种监控系统,可以通过使用Orabbix插件来监控Oracle数据库的运行状态。Orabbix插件提供了多层次的监控,包括可用性和服务器性能指标。\[1\] 在配置Zabbix监控Oracle数据库时,需要在Zabbix Server的配置文件中设置Zabbix Server的名称、IP地址和监控端口。同时,还需要在Orabbix插件的配置文件中设置数据库的名称,该名称必须与Web监控和Agent的主机名保持一致。\[2\] 此外,Zabbix监控系统还提供了一系列的文章和教程,包括Server部署、初始化配置、版本升级、Agent监控Windows客户端、SNMP监控Windows客户端、EMAIL警告配置、VMware虚拟化监控、日志监控监控网络设备指定接口流量、自动发现配置、拓扑图绘制、SNMP Traps主动告警、SNMP Mibs库加载、Oracle监控、自动发现Oracle表空间并监控等。\[3\] 所以,如果你想使用Zabbix监控Oracle数据库,你可以通过配置Zabbix Server和Orabbix插件来实现。 #### 引用[.reference_title] - *1* *2* [zabbix监控oracle数据库](https://blog.csdn.net/citao9160/article/details/100248054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Zabbix监控系统系列之十四:Oracle监控](https://blog.csdn.net/weixin_38623994/article/details/100675280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值