内容目录

自动化监控概述

自动化添加主机

前面我们演示了手动添加一台主机的方法,很简单。但我们现在有100台主机需要添加,就会变得非常繁琐,所以我们可以通过zabbix提供的自动注册或自动发现来实现主机的批量添加

自动化添加主机方式

网络发现(network discovery)
自动注册(active agent auto-registration)

网络发现概念

发现原理

  • 自动发现由两个步骤组成:发现discovery和动作action
    • 1.首先zabbix周期性地扫描在网络发现规则中定义的ip段,发现满足规则的主机
    • 2.然后使这些主机完成动作,即添加主机、添加模板、发送通知等待

file

规则示例

配置zabbix-web前端的网络发现来发现主机:

  • 首先进入配置-->自动发现
  • 单击创建发现规则
  • 配置自动发现规则属性
    • ip范围:172.15.1.1-254指zabbix会自动扫描这个网段的所有ip,依次连接这些ip的10050端口(检测类型选择zabbix客户端)
    • 检查:尝试通过system.uname监控项,看看是否能获取到数据,如果可以则加入该主机

file

网络发现实践

场景需求

例如我们设置ip段为172.16.1.1-172.16.1.254的网络发现规则,我们需要:

  • 发现有zabbix agent运行的主机
  • 每10分钟执行一次
  • 如果主机正常运行实践超过2分钟,添加主机
  • 如果主机停机时间超过24小时,删除主机
  • linux主机添加到linux servers组,链接模板为Template OS Linux
发现场景-步骤1

file

发现场景-步骤2

点击配置-->动作-->discovery actions,先配置条件

  • 服务类型等于zabbix客户端
  • system.unmae(规则中定义的zabbix agent键值)包含linux
  • 正常运行时间为2分钟(120秒)或更长

file

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

  • 添加主机
  • 将发现的主机添加到linux servers组(如果没该组,就创建)
  • 主机链接到Template OS Linux模板

file

发现场景-步骤3

定义动作删除失联主机

file

file

网络发现总结

  • 网络发现虽然能发现并添加主机,但仍然存在一些问题
    • 1.发现时间长,效率较低
    • 2.扫描过程中容易漏扫
    • 3.当ip地址不固定难以实现
    • 4.无法实现不通类型主机关联不通模板

自动注册概念

注册原理

自动注册(agent auto-registration)功能主要用于agent主动向server注册,与网络发现有同样的功能,但是这个功能更适用于ip地址是随机的,难以使用网络发现方式实现

  1. 注册时间短
  2. 适用复杂的环境,ip地址无规律
  3. 关联不同的模板
  4. 提高server性能

注册配置

自动注册主要分为两个步骤:

  • 1.自动注册,客户端必须开启主动模式,并设定主机名称
  • 2.在zabbix web中配置一个自动注册的动作

自动注册实践-1

场景需求
  • 根据不同的主机名称关联不同的主机模板
  • web主机节点,需要关联Template OS Linux模板、TCP Status模板、nginx模板、php模板
  • db主机节点,需要关联Template OS Linux模板、mysql模板
配置zabbix agent

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

vim /etc/zabbix/zabbix_agent2.conf
Server=192.168.99.4
ServerActive=192.168.99.4  # 设置主动模式
Hostname=wordpress  #指定主机名,如不指定则服务器将使用agent的系统主机名命名主机

# 重启agent
systemctl restart zabbix-agent2
配置zabbix server

点击配置-->动作-->AutoRegistrations,条件为主机名称包含wordpress

file

自动注册实践-2

场景需求
  • 使用主机元数据赖区分linuxwindows主机,根据不同的操作系统关联不同的主机模板
    • linux主机关联Template OS Linux模板
    • windows主机关联Template OS Windows模板
配置zabbix agent

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

vim /etc/zabbix/zabbix_agent2.conf
Server=192.168.99.4
ServerActive=192.168.99.4  # 设置主动模式
Hostname=wordpress  #指定主机名,如不指定则服务器将使用agent的系统主机名命名主机
HostMetadataItem=system.uname

# 重启agent
systemctl restart zabbix-agent2

2.这样能确保主机元数据包含linuxwindows,主机元数据示例如下:

# linux主机获取的元数据信息
Linux wordpress 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64

# windows主机获取的元数据信息
Windows:windows WIN-0PXGGSTYNHO 5.0.6001 Windows Server 2008 Service Pcak1 Intel IA-32
配置zabbix server
  • 第一个动作:
    • 名称:linux主机自动注册
    • 条件:主机元数据包含Linux
    • 操作:链接到模板:Template OS Linux
  • 第二个动作:
    • 名称:Windows主机自动注册
    • 条件:主机元数据包含Windows
    • 操作:链接到模板:Template OS Windows

主动模式与被动模式

主备模式基本概念

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

  • 1.web操作很卡,容易出现502错误
  • 2.监控图像中图层断裂
  • 3.监控告警不及时

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

主备模式功能区别

被动和主动模式,针对的都是agent
被动模式:server轮询检测agent。(领导找下属询问销售业绩,每个一段时间询问一次)
主动模式:agent主动上报给server。(领导给下属分配业务,下属定期通知领导)

主备模式与发现的关系

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

主备模式与监控项的关系

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

何时需要使用主动模式

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

如何调为主动模式

修改agent配置

1.修改zabbix_agent2.conf

vim /etc/zabbix/zabbix_agent2.conf
ServerActive=192.168.99.4  # 指定agent收集的数据发送给谁
Hostname=wordpress  # 要与zabbix web中添加主机对应,否则会找不到主机

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

vim /etc/zabbix/zabbix_server_conf
StartPollers=10  # zabbix server主动采集数据进程减少一些
StartTrappers=20  # 负责处理agent推送过来数据的进程开大一些
修改模板为主动模式
  1. 克隆一份被动模式监控项的模板
  2. 点击克隆后的模板-->选中所有监控项-->批量修改-->zabbix客户端(主动式)
  3. 选择主机取消链接并清理被动模板,然后重新关联主动式模板
总结

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

低级自动发现LLD

什么是LLD

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

为何需要LLD

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

LLD极速体验

编写网卡采集命令
ifconfig eth0 | awk '/ether/ {print $2}'
fa:26:21:09:6d:00

# 客户端新建一个监控项配置文件
UserParameter=net.mac[*],ifconfig "$1" | awk '/ether/ {print $$2}'
测试取值
# 客户端测试取值
zabbix_agent2 -t net.mac[eth0]
net.mac[eth0]      [s|fa:26:21:09:6d:00]

# 服务端测试取值
zabbix_get -s blue.yn.cn -k net.mac[eth0]
fa:26:21:09:6d:00
web添加监控原型

点击-->配置-->主机-->自动发现规则-->network interface discovery-->监控项原型-->创建监控项原型

file
file

LLD原理分析

为什么能自动创建并监控eht0mac地址呢,其实是依靠自动发现规则\监控项原型来实现

发现规则

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

zabbix_get -s blue.yn.cn -k net.if.discovery
[{"{#IFNAME}":"eth0"},{"{#IFNAME}":"lo"}]
监控原型

然后再通过监控项原型自动发现规则中提取到的网卡名称依次传递给监控项,完成自动创建

file

如果后期增加eth1网卡会自动添加对应的监控项,但移除eth1网卡并不会自动移除该网卡对应的监控项

LLD监控主机端口实践

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

  • 监控每台主机侦听的tcp端口:
    • 1.定义自动发现规则
    • 2.定义监控项原型
# 编写脚本,用来获取主机的所有端口,效果如下:
{
        "data":[
                {"{#TCP_PORT}":"111"},
                {"{#TCP_PORT}":"22"},
                {"{#TCP_PORT}":"3306"},
                {"{#TCP_PORT}":"80"},
                {"{#TCP_PORT}":"9000"}
        ]
}
编写发现规则脚本
vim /etc/zabbix/zabbix_agent2.d/tcpport_discovery.sh
#!/usr/bin/bash

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

#echo ${array_tcpport[@]}

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

index=0
# 遍历数组
for i in ${array_tcpport[@]}
do
        index=$[ $index + 1 ]

        if [ $index -eq $length ];then
                printf "\t\t{\"{#TCP_PORT}\":\"$i\"}\n"
        else
                printf "\t\t{\"{#TCP_PORT}\":\"$i\"},\n"
        fi
done
printf "\t]\n"
printf "}\n"

# 执行脚本
sh tcpport_discovery.sh
{
        "data":[
                {"{#TCP_PORT}":"111"},
                {"{#TCP_PORT}":"22"},
                {"{#TCP_PORT}":"3306"},
                {"{#TCP_PORT}":"80"},
                {"{#TCP_PORT}":"9000"}
        ]
}
创建特殊的监控项
vim /etc/zabbix/zabbix_agent2.d/discovery_tcpport.conf
UserParameter=tcpport.discovery, sudo /bin/bash /etc/zabbix/zabbix_agent2.d/tcpport_discovery.sh

# zabbix用户添加sudo权限
vim /etc/sudoers
zabbix ALL=(ALL) NOPASSWD:ALL

# 重启agent
systemctl restart zabbix-agent2.service
服务端测试取值
zabbix_get -s blue.yn.cn -k tcpport.discovery
{
        "data":[
                {"{#TCP_PORT}":"111"},
                {"{#TCP_PORT}":"22"},
                {"{#TCP_PORT}":"3306"},
                {"{#TCP_PORT}":"80"},
                {"{#TCP_PORT}":"9000"}
        ]
}
web创建自动发现规则

创建 Tcp_Port Discovery by yj模板
然后点击模板的自动发现创建发现规则
名称:tcpport discovery
键值:tcpport.discovery,取得所有侦听的tcp端口

file

web创建监控项原型

名称:Check Tcp Port{#TCP_PORT}
键值:net.tcp.listen[{#TCP_PORT}],将端口号通过参数传递至该监控项中

file

web创建触发器

file

web结果验证

file

file

最后修改日期: 2024年10月24日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。