zabbix6 LLD自动发现实战

2024/09/13 zabbix 共 3140 字,约 9 分钟

LLD自动发现原理介绍,自定义LLD获取多网卡ip地址信息,自动发现(网络)介绍与实战参考前文

一、自动发现介绍

1、什么是自动发现?

其实zabbix上”自动发现”有两种,分别是针对主机设备级别,我们称之为网络自动发现,在”数据采集”–> 自动发现;主要作用和实战部分前文已经介绍;这里不再赘述。

另一种”自动发现”提供了一种在计算机(设备)资源上为不同实体自动创建监控项,触发器和图形的方法。我们称之为LLD自动发现;例如,Zabbix可以在你的机器上自动获取监控文件系统或网络接口,而无需为每个文件系统或网络接口手动创建监控项。在Zabbix中,支持六种类型的发现项目:

l 系统文件的发现 l 网络接口的发现 l CPU和CPU内核的发现 l SNMP OID的发现 l 使用ODBC SQL查询的发现 没错,本文的重点就是”LLD自动发现”!

2. LLD发现过程原理

发现过程的一般如下: 首先,用户在“数据采集”→“模板”→“发现”列中创建一个发现规则。发现规则包括,(1)发现必要实体监控项,例如文件系统或网络接口)的项目,(2)根据该监控项的值创建触发器和图形的原型,发现必要实体的监控项就像其他地方所看到的常规监控项:服务器向该项目的值询问Zabbix agent(或者该项目的任何类型的设置),agent以文本值进行响应。区别在于agent响应的值应该包含特定JSON格式的发现实体的列表。这种格式的自定义检查者发现的细节才是最重要的,因为返回值必须包含键值对。例如,项目“net.if.discovery”会返回键值对:“{#IFNAME}”→“lo”和“{#IFNAME}”→“eth0”。

3、默认LLD自动发现

其实Zabbix自带的监控模板中就已经有包含以上默认的几个类型的LLD自动发现,如Linux系统自带的LLD自动发现规则 如下: LLD01 “数据采集”→“模板”→“Linux by Zabbix agent”→ “自动发现3”,包含了以下三个自动发现规则(Block devices discovery, Linux: Get filesystems:Mounted filesystem discovery,Network interface discovery),如图: LLD02 以上模板自带的三个发现规则,其实就是针对Linux磁盘分区、文件系统以及网络接口自动发现规则;

二、LLD自动发现实践

1. 实践需求

由于默认监控模板已经有对网络接口LLD自动发现,即通过自带的“Network interface discovery”规则,可以自动发现目标主机上的网络接口(网卡),以及相关的状态,进出流量,数据包等信息;比如查看Test-Alam8-172-21主机上所有网卡的信息,如下: LLD03 有一个问题:虽然看到了三张网上接口(ens192,ens224,lo),但是并不知道每张网卡的ip地址,要如何看到LLD自动发现网卡上的对应ip地址信息?

2. 需求实现剖析

既然能通过LLD发现网卡这么多的信息,同样的思路我当然也能获取对应的ip,原则上LLD自动发现是依赖于模板的,所以正常情况下如果自定义LLD发现规则,需要先创建一个新模板;但是由于需求是对网卡自动发现对应的ip地址,默认模板里已经有了网卡LLD自动发现规则,因此,我们只需要在默认模板里再添加一条自定义获取网卡ip的规则即可;本次需求实践,基于“Linux by Zabbix agent active”模板,添加一个LLD发现规则为“IP Address Discovery”用于获取网卡ip

3. zabbix-agent脚本配置

由于默认模板自带的LLD发现规则agent已经集成,但我们要自定义LLD,就需要自己写脚本实现,(注意这里脚本可参考,可用更好的其他方式自行重写)分别是:

1). 发现网上宏变量脚本

$ cat /etc/zabbix/bin/ifconfig.sh
#!/bin/bash
ip -4 addr show | awk '
/^[0-9]+:/ {
    iface = $2
    sub(/:$/, "", iface)
}
/inet / {
    split($2, a, "/")
    ip = a[1]
    print "{\"{#IFNAME}\":\"" iface "\", \"{#IPADDR}\":\"" ip "\"}"
}' | jq -s .

由于宏变量的输出为json文本格式,因此系统上需要额外安装jq程序

$ yum install jq -y

2). 获取IP地址脚本

$ cat /etc/zabbix/bin/ip.sh
#!/bin/bash
ip addr show "$1" |grep 'inet ' |awk '{print $2}' |cut -d'/' -f1

3). 自定义监控项配置

$ cat /etc/zabbix/zabbix_agentd.d/ifconfig.conf 
UserParameter=net.if.ip[*],/bin/bash /etc/zabbix/bin/ip.sh $1 
UserParameter=ip.discovery,/bin/bash /etc/zabbix/bin/ifconfig.sh

4). 重启zabbix-agent服务

systemctl restart zabbix-agent

5). 测试LLD变量获取

注意测试获取自定义监控项,需要在zabbix-server上使用zabbix-get命令如下:

自定义LLD获取网卡名
$ zabbix_get -s 172.21.161.115 -k "ip.discovery"
[
  {
    "{#IFNAME}": "lo",
    "{#IPADDR}": "127.0.0.1"
  },
  {
  "{#IFNAME}": "ens192",
    "{#IPADDR}": "172.21.161.115"
  },
  {
    "{#IFNAME}": "ens224",
    "{#IPADDR}": "172.21.201.244"
  }
]
自定义LLD获取网卡ip
zabbix_get -s 172.21.161.115 -k "net.if.ip["ens224"]"
172.21.201.244

到此自定义LLD客户端配置完成!,接下到Zabbix-server web GUI上进行配置.

4. 自定义LLD发现网卡IP

1). 配置自动发现规则

“数据采集”→“模板”→ 找到“Linux by Zabbix agent active”模板 如图: LLD04

→ “创建发现规则” → 依次填写如下信息 名称:IP Address Discovery 类型:选择 “Zabbix客户端(主动式)”, 如果在“Linux by Zabbix agent ”模板中可以选择“Zabbix客户端” 键值: ip.discovery 更新间隔: 5m 保留流失资源期限:7d (默认30d,可以按需要修改,表示没有再次发现到,保留时间)

最终LLD自动发现规则配置如图: LLD05

2). 配置过滤器

用于判断发现到的条件分别添加 {#IFNAME} 存在 和 {#IFNAME} 匹配 ,如图: LLD06

创建 监控项原型 → 依次填写如下信息: 名称: IP Address {#IFNAME} 类型:Zabbix客户端(主动式) 键值:net.if.ip[”{#IFNAME}”] 信息类型:文本 更新时间:1m 历史数据保留期: 储存期 7d 描述:网卡的ip地址信息 启用新的:默认钩选 发现: 默认钩选

最终配置如下图所示: LLD07

配置 “标记” 监控项原型 标记就是在看主机最新数据时可选的标签分类,按自带的网卡标记添加:

名称:Component 对应值: network 名称:interface 对应值: {#IFNAME} 最终配置如下图:

LLD08 最终完成自定义LLD发现规则创建:如图: LLD09

3. LLD发现网卡地址验证

监测→ 最新数据 → 选择主机“Test-Alam8-172-21”→ 标记 选择 “interface”最终如图所示: LLD10 至此自定义 LLD自动发现 完成!

文档信息

Search

    Table of Contents