文章目录
- [Zabbix 7.0 自定义 Linux 监控模板(Agent Active版,支持CPU/内存/磁盘/网卡自动发现)](#Zabbix 7.0 自定义 Linux 监控模板(Agent Active版,支持CPU/内存/磁盘/网卡自动发现))
- 一、模板基本信息
- 二、模板监控内容
- [三、为什么使用 Agent Active 模式](#三、为什么使用 Agent Active 模式)
-
- [1 减少 Zabbix Server 压力](#1 减少 Zabbix Server 压力)
- [2 更适合大规模环境](#2 更适合大规模环境)
- [3 更适合 NAT / 云环境](#3 更适合 NAT / 云环境)
- 四、核心监控项解析
-
- [1 CPU 利用率监控](#1 CPU 利用率监控)
- [2 内存利用率监控](#2 内存利用率监控)
- [3 主机重启监控](#3 主机重启监控)
- [4 Zabbix Agent 状态监控](#4 Zabbix Agent 状态监控)
- 五、自动发现(LLD)
-
- [1 网卡自动发现](#1 网卡自动发现)
- [2 磁盘设备自动发现](#2 磁盘设备自动发现)
- [3 文件系统自动发现](#3 文件系统自动发现)
- 六、模板宏参数说明
- 七、模板导入方法
- [八、完整模板 YAML](#八、完整模板 YAML)
- 九、总结
Zabbix 7.0 自定义 Linux 监控模板(Agent Active版,支持CPU/内存/磁盘/网卡自动发现)
在日常运维中,我们通常会使用 Zabbix 官方的 Linux 模板 来监控服务器。但在实际生产环境中,默认模板往往存在一些问题:
- 监控项较多但不够精简
- 某些指标不符合实际需求
- 自动发现和触发器配置较复杂
- 阈值不方便统一管理
因此在实际生产环境中,我整理了一套 自定义 Linux 主机监控模板 ,基于 Zabbix Agent Active 模式 实现主机监控。
该模板特点:
- 使用 Agent Active(主动上报)
- 自动发现 网卡 / 磁盘 / 文件系统
- 使用 Dependent Item 降低监控压力
- 支持 宏控制告警阈值
- 适用于 生产环境 Linux 服务器监控
一、模板基本信息
模板名称:
linux zabbix agent customize active
适用版本:
Zabbix 7.0+
模板作者:
xmyx
模板结构:
| 类型 | 数量 |
|---|---|
| Items | 多个 |
| Triggers | 多个 |
| Discovery Rules | 3 |
| Macros | 多个 |
监控模式:
Zabbix Agent Active
二、模板监控内容
该模板主要监控 Linux 主机的核心运行指标。
| 监控类型 | 监控内容 |
|---|---|
| Agent状态 | agent.ping、agent版本 |
| CPU监控 | CPU数量、CPU利用率 |
| 内存监控 | 总内存、可用内存、内存利用率 |
| 系统监控 | 主机名、系统运行时间 |
| 网络监控 | 网卡流量、网卡状态 |
| 磁盘监控 | 磁盘读写速率 |
| 文件系统 | 磁盘空间使用率 |
三、为什么使用 Agent Active 模式
很多运维在生产环境中更倾向使用 Agent Active。
优点:
1 减少 Zabbix Server 压力
Active 模式由 客户端主动上报数据,减少 Server 轮询。
2 更适合大规模环境
在上百台服务器环境中:
Agent Passive
= server轮询
Agent Active
= 客户端主动发送
Active 模式更加稳定。
3 更适合 NAT / 云环境
例如:
- 云服务器
- NAT 网络
- 容器环境
Active 模式无需 server 主动访问。
四、核心监控项解析
下面介绍模板中的几个关键监控指标。
1 CPU 利用率监控
监控项:
system.cpu.util[,idle]
CPU 空闲率。
模板通过 Dependent Item 计算真实 CPU 使用率:
CPU使用率 = 100 - idle
触发器规则:
avg(system.cpu.util,5m)>{$CPU.UTIL.MAX.WARN}
默认阈值:
{$CPU.UTIL.MAX.WARN}=80
含义:
CPU 使用率连续 5 分钟超过 80% 时触发告警。
2 内存利用率监控
监控项:
vm.memory.size[pavailable]
表示 可用内存百分比。
通过计算:
内存利用率 = 100 - pavailable
触发器:
min(vm.memory.utilization,5m)>{$MEMORY.UTIL.MAX}
默认阈值:
{$MEMORY.UTIL.MAX}=90
当内存利用率超过 90% 时触发告警。
3 主机重启监控
监控项:
system.uptime
触发规则:
last(system.uptime)<10m
当系统运行时间 小于10分钟 时触发告警。
用于检测:
- 服务器意外重启
- 运维重启
4 Zabbix Agent 状态监控
监控项:
zabbix[host,active_agent,available]
状态说明:
| 数值 | 状态 |
|---|---|
| 0 | unknown |
| 1 | available |
| 2 | not available |
触发器:
min(zabbix[host,active_agent,available],{$AGENT.TIMEOUT})=2
默认:
{$AGENT.TIMEOUT}=5m
五、自动发现(LLD)
模板支持 三种自动发现机制。
1 网卡自动发现
发现规则:
net.if.discovery
自动监控:
- 接收流量
- 发送流量
- 网卡状态
网卡状态来源:
/sys/class/net/{#IFNAME}/operstate
状态:
| 状态 | 含义 |
|---|---|
| up | 网卡正常 |
| down | 网卡断开 |
2 磁盘设备自动发现
发现规则:
vfs.dev.discovery
监控指标:
- 磁盘读取速率
- 磁盘写入速率
数据来源:
/sys/block/{#DEVNAME}/stat
通过 Dependent Item + JSON 解析 获取指标。
3 文件系统自动发现
发现规则:
vfs.fs.get
自动监控:
- 总空间
- 已使用空间
- 剩余空间
- 使用率
告警阈值:
{$VFS.FS.PUSED.MAX.WARN}=80
{$VFS.FS.PUSED.MAX.CRIT}=90
六、模板宏参数说明
模板中定义了多个宏,可以统一控制告警阈值。
| 宏 | 含义 | 默认值 |
|---|---|---|
| {$CPU.UTIL.MAX.WARN} | CPU告警阈值 | 80 |
| {$MEMORY.UTIL.MAX} | 内存告警阈值 | 90 |
| {$MEMORY.AVAILABLE.MIN} | 最小可用内存 | 20M |
| {$AGENT.TIMEOUT} | Agent超时时间 | 5m |
| {$VFS.FS.PUSED.MAX.WARN} | 磁盘告警 | 80 |
| {$VFS.FS.PUSED.MAX.CRIT} | 磁盘严重 | 90 |
七、模板导入方法
在 Zabbix Web 界面导入模板。
步骤:
Configuration
→ Templates
→ Import
→ 选择 YAML 文件
导入后即可绑定主机。
八、完整模板 YAML
完整模板如下:
yaml
zabbix_export:
version: '7.0'
template_groups:
- uuid: 5b250e5b377a494e92556c1e7b119187
name: prod
templates:
- uuid: 146055c87a7b4836bf645c927b266e30
template: 'linux zabbix agent customize active'
name: 'linux zabbix agent customize active'
description: 自定义监控项-客户端主动上报
vendor:
name: xmyx
version: '1.0'
groups:
- name: prod
items:
- uuid: fd0c6e6a47434644b9a037c383155e81
name: 'zabbix agent ping'
type: ZABBIX_ACTIVE
key: agent.ping
description: 主机是否存活
valuemap:
name: 'Zabbix agent ping status'
tags:
- tag: component
value: system
triggers:
- uuid: ae8a23fd12fe4741a1a7446ef2d7e3ac
expression: 'nodata(/linux zabbix agent customize active/agent.ping,{$AGENT.NODATA_TIMEOUT})=1'
name: Linux:zabbix无法ping通
event_name: 'Linux:zabbix无法ping通(or nodata for {$AGENT.NODATA_TIMEOUT})'
priority: AVERAGE
description: '对于活动代理,`nodata()` 函数与 `agent.ping` 一起使用,并使用 `{$AGENT.NODATA_TIMEOUT}` 作为时间阈值。'
manual_close: 'YES'
tags:
- tag: scope
value: availability
- uuid: 7555d9c071934242b767d8970e0d62e9
name: 'zabbix agent版本'
type: ZABBIX_ACTIVE
key: agent.version
delay: 1h
value_type: CHAR
trends: '0'
preprocessing:
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1d
tags:
- tag: component
value: application
- uuid: e3298b552dd3461f9f5d7383ae72f7a0
name: 主机CPU的数量
type: ZABBIX_ACTIVE
key: system.cpu.num
tags:
- tag: component
value: cpu
- uuid: 6d88c1b4424c4e55b28ced4940dc1e77
name: CPU利用率
type: DEPENDENT
key: system.cpu.util
delay: '0'
value_type: FLOAT
units: '%'
description: 'CPU utilization expressed in %.'
preprocessing:
- type: JAVASCRIPT
parameters:
- 'return (100 - value)'
master_item:
key: 'system.cpu.util[,idle]'
tags:
- tag: component
value: cpu
triggers:
- uuid: 33d7b0f4558f47409486e15a2a05b307
expression: 'avg(/linux zabbix agent customize active/system.cpu.util,5m)>{$CPU.UTIL.MAX.WARN}'
name: 'CPU 利用率高'
event_name: 'CPU 利用率高(over {$CPU.UTIL.CRIT}% for 5m)'
opdata: '当前利用率: {ITEM.LASTVALUE1}'
priority: WARNING
description: CPU利用率过高。系统响应速度可能会变慢。
tags:
- tag: scope
value: performance
- uuid: 82d3fbf3849048769134541b3dfef859
name: '剩余 CPU 百分比(空闲)'
type: ZABBIX_ACTIVE
key: 'system.cpu.util[,idle]'
value_type: FLOAT
units: '%'
description: '可用 CPU 百分比(空闲)'
tags:
- tag: component
value: cpu
- uuid: 71b2087f5bd9450487d51e6268b7b263
name: 主机名
type: ZABBIX_ACTIVE
key: system.hostname
delay: 1h
value_type: CHAR
trends: '0'
description: 主机名
preprocessing:
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 12h
tags:
- tag: component
value: system
triggers:
- uuid: 8e2f3a6ac2de4926a5cb474b70c703b7
expression: 'change(/linux zabbix agent customize active/system.hostname) and length(last(/linux zabbix agent customize active/system.hostname))>0'
name: Linux:系统名称已更改
event_name: 'Linux:系统名称已更改(新名字: {ITEM.VALUE})'
status: DISABLED
priority: INFO
description: 系统名称已更改。请手动确认以关闭问题。
manual_close: 'YES'
tags:
- tag: scope
value: notice
- tag: scope
value: security
- uuid: f4d0c5617d0d4bbcabff1ae91aa4e363
name: 主机运行时长
type: ZABBIX_ACTIVE
key: system.uptime
delay: 30s
trends: '0'
units: uptime
description: 主机运行时长
tags:
- tag: component
value: system
triggers:
- uuid: 1c8a91efdf5944ddac6c40a22a300e01
expression: 'last(/linux zabbix agent customize active/system.uptime)<10m'
name: 'Linux: {HOST.NAME} 已重新启动'
event_name: 'Linux: {HOST.NAME} 已重新启动(少于10分钟)'
priority: WARNING
description: 主机运行时间少于10分钟。
manual_close: 'YES'
tags:
- tag: scope
value: notice
- uuid: d9321830d61d4170a2d32664c7e3bccc
name: 获取文件系统
type: ZABBIX_ACTIVE
key: vfs.fs.get
history: '0'
value_type: TEXT
trends: '0'
description: 用于获取关于文件系统的原始信息集。这些信息稍后将在依赖项中进行预处理时被提取出来。主要是监控磁盘使用
tags:
- tag: component
value: raw
- uuid: 486fdd6272d54f4a80435024be33abf3
name: 剩余内存(字节)
type: ZABBIX_ACTIVE
key: 'vm.memory.size[available]'
units: B
description: |
The available memory:
- in Linux = free + buffers + cache;
tags:
- tag: component
value: memory
- uuid: bb5ec39808b04515ad1632bd947735bf
name: 剩余内存百分比
type: ZABBIX_ACTIVE
key: 'vm.memory.size[pavailable]'
value_type: FLOAT
units: '%'
description: 可用内存百分比.
tags:
- tag: component
value: memory
- uuid: 27f90d1d782f429cb83a4fcf961ec73a
name: 总内存
type: ZABBIX_ACTIVE
key: 'vm.memory.size[total]'
units: B
description: 总内存大小是bytes.
tags:
- tag: component
value: memory
- uuid: f9c60f94c22f401a91340ce9c7bff265
name: 内存利用率
type: DEPENDENT
key: vm.memory.utilization
delay: '0'
value_type: FLOAT
units: '%'
description: 已用内存的百分比是通过公式"100-pavailable"计算得出的。
preprocessing:
- type: JAVASCRIPT
parameters:
- 'return (100-value);'
master_item:
key: 'vm.memory.size[pavailable]'
tags:
- tag: component
value: memory
triggers:
- uuid: 99702e9388254f56820abf9ad287213c
expression: 'min(/linux zabbix agent customize active/vm.memory.utilization,5m)>{$MEMORY.UTIL.MAX}'
name: Linux:内存利用率高
event_name: 'Linux:内存利用率高(>{$MEMORY.UTIL.MAX}% for 5m)'
priority: AVERAGE
description: 系统可用内存不足。
dependencies:
- name: Linux:内存不足
expression: 'max(/linux zabbix agent customize active/vm.memory.size[available],5m)<{$MEMORY.AVAILABLE.MIN} and last(/linux zabbix agent customize active/vm.memory.size[total])>0'
tags:
- tag: scope
value: capacity
- tag: scope
value: performance
- uuid: f3f89495ab6545cd8a701f71b5f5c595
name: agent状态
type: INTERNAL
key: 'zabbix[host,active_agent,available]'
description: |
主机上活动检查的可用性。此项的值对应主机列表中的可用性图标。
可能值:
0 - 未知
1 - 可用
2 - 不可用
valuemap:
name: zabbix.host.active_agent.available
tags:
- tag: component
value: health
- tag: component
value: network
triggers:
- uuid: 5cc42d599bc742f5926faee2b590b44a
expression: 'min(/linux zabbix agent customize active/zabbix[host,active_agent,available],{$AGENT.TIMEOUT})=2'
name: 'Linux:zabbix agent不可用'
event_name: 'Linux:zabbix agent不可用'
opdata: '当前状态: {ITEM.LASTVALUE1}'
priority: HIGH
description: 活动检查被视为不可用。代理长时间未发送心跳信号。
tags:
- tag: scope
value: availability
discovery_rules:
- uuid: e0454cdc4f714611b6b6b1be9c19895a
name: 网络发现
type: ZABBIX_ACTIVE
key: net.if.discovery
delay: 1h
filter:
evaltype: AND
conditions:
- macro: '{#IFNAME}'
value: '{$NET.IF.IFNAME.MATCHES}'
formulaid: A
- macro: '{#IFNAME}'
value: '{$NET.IF.IFNAME.NOT_MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
description: 'The discovery of network interfaces.'
item_prototypes:
- uuid: 8707ecd803684f08a5b723b0a7fac183
name: 'Interface {#IFNAME}: 接收Bits'
type: ZABBIX_ACTIVE
key: 'net.if.in["{#IFNAME}"]'
delay: 3m
units: bps
preprocessing:
- type: CHANGE_PER_SECOND
parameters:
- ''
- type: MULTIPLIER
parameters:
- '8'
tags:
- tag: component
value: network
- tag: interface
value: '{#IFNAME}'
- uuid: d29616a13af74223a698b735b808da96
name: 'Interface {#IFNAME}: 发送Bits'
type: ZABBIX_ACTIVE
key: 'net.if.out["{#IFNAME}"]'
delay: 3m
units: bps
preprocessing:
- type: CHANGE_PER_SECOND
parameters:
- ''
- type: MULTIPLIER
parameters:
- '8'
tags:
- tag: component
value: network
- tag: interface
value: '{#IFNAME}'
- uuid: bd7a01e9b1734fa6a1a73808a1db3c69
name: 'Interface {#IFNAME}: 网卡状态'
type: ZABBIX_ACTIVE
key: 'vfs.file.contents["/sys/class/net/{#IFNAME}/operstate"]'
trends: '0'
valuemap:
name: ifOperStatus
preprocessing:
- type: JAVASCRIPT
parameters:
- |
var newvalue;
switch(value) {
case "unknown":
newvalue = 0;
break;
case "notpresent":
newvalue = 1;
break;
case "down":
newvalue = 2;
break;
case "lowerlayerdown":
newvalue = 3;
break;
case "testing":
newvalue = 4;
break;
case "dormant":
newvalue = 5;
break;
case "up":
newvalue = 6;
break; default:
newvalue = "Problem parsing interface operstate in JS";
}
return newvalue;
tags:
- tag: component
value: network
- tag: interface
value: '{#IFNAME}'
trigger_prototypes:
- uuid: 2b9f1414aa5144318b2df0d64d4580d3
expression: '{$IFCONTROL:"{#IFNAME}"}=1 and last(/linux zabbix agent customize active/vfs.file.contents["/sys/class/net/{#IFNAME}/operstate"])=2 and (last(/linux zabbix agent customize active/vfs.file.contents["/sys/class/net/{#IFNAME}/operstate"],#1)<>last(/linux zabbix agent customize active/vfs.file.contents["/sys/class/net/{#IFNAME}/operstate"],#2))'
recovery_mode: RECOVERY_EXPRESSION
recovery_expression: 'last(/linux zabbix agent customize active/vfs.file.contents["/sys/class/net/{#IFNAME}/operstate"])<>2 or {$IFCONTROL:"{#IFNAME}"}=0'
name: 'Linux: 接口 {#IFNAME}: 链接断开'
opdata: '当前状态: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: |
此触发表达式的工作原理如下:
1. 如果操作状态异常,则可能会触发该事件。
2. `{$IFCONTROL:"{#IFNAME}"}=1` - 用户可以将上下文宏重新定义为"0",表示此接口不重要。如果此接口关闭,则不会触发新的触发器。
3. `last(/TEMPLATE_NAME/METRIC,#1)<>last(/TEMPLATE_NAME/METRIC,#2)` - 仅当操作状态在(1)之前的某个时间点处于开启状态时,触发器才会触发(因此,对于"永久关闭"的接口,触发器不会触发)
manual_close: 'YES'
tags:
- tag: scope
value: availability
- uuid: 7874ad46a5a14aa39299bc0f06372a91
name: 硬盘发现
type: ZABBIX_ACTIVE
key: vfs.dev.discovery
delay: 30s
filter:
evaltype: AND
conditions:
- macro: '{#DEVNAME}'
value: '{$VFS.DEV.DEVNAME.MATCHES}'
formulaid: A
- macro: '{#DEVNAME}'
value: '{$VFS.DEV.DEVNAME.NOT_MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
- macro: '{#DEVTYPE}'
value: disk
formulaid: C
description: 发现硬盘
item_prototypes:
- uuid: 4bb5f84b2e954c28843fa1fb3898c034
name: '{#DEVNAME}: 磁盘读取速率'
type: DEPENDENT
key: 'vfs.dev.read.rate[{#DEVNAME}]'
delay: '0'
value_type: FLOAT
units: '!r/s'
description: 'r/s (read operations per second) - the number (after merges) of read requests completed per second for the device.'
preprocessing:
- type: JSONPATH
parameters:
- '$[0]'
- type: CHANGE_PER_SECOND
parameters:
- ''
master_item:
key: 'vfs.file.contents[/sys/block/{#DEVNAME}/stat]'
tags:
- tag: component
value: storage
- tag: disk
value: '{#DEVNAME}'
- uuid: 8ba78909402d4bb8ab32f12c679ea3db
name: '{#DEVNAME}: 磁盘写入速率'
type: DEPENDENT
key: 'vfs.dev.write.rate[{#DEVNAME}]'
delay: '0'
value_type: FLOAT
units: '!w/s'
description: 'w/s (write operations per second) - the number (after merges) of write requests completed per second for the device.'
preprocessing:
- type: JSONPATH
parameters:
- '$[4]'
- type: CHANGE_PER_SECOND
parameters:
- ''
master_item:
key: 'vfs.file.contents[/sys/block/{#DEVNAME}/stat]'
tags:
- tag: component
value: storage
- tag: disk
value: '{#DEVNAME}'
- uuid: 6cb879833db04483bcd373dd533b8d19
name: '{#DEVNAME}: 获取数据'
type: ZABBIX_ACTIVE
key: 'vfs.file.contents[/sys/block/{#DEVNAME}/stat]'
history: '0'
value_type: TEXT
trends: '0'
description: '获取 `/sys/block/{#DEVNAME}/stat` 的内容以获取磁盘统计信息。'
preprocessing:
- type: JAVASCRIPT
parameters:
- 'return JSON.stringify(value.trim().split(/ +/));'
tags:
- tag: component
value: raw
- uuid: e789534fe1824186a9de8b6553843fb5
name: 已挂载文件系统发现
type: DEPENDENT
key: vfs.fs.dependent.discovery
delay: '0'
filter:
evaltype: AND
conditions:
- macro: '{#FSNAME}'
value: '{$VFS.FS.FSNAME.MATCHES}'
formulaid: A
- macro: '{#FSNAME}'
value: '{$VFS.FS.FSNAME.NOT_MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
- macro: '{#FSTYPE}'
value: '{$VFS.FS.FSTYPE.MATCHES}'
formulaid: C
- macro: '{#FSTYPE}'
value: '{$VFS.FS.FSTYPE.NOT_MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: D
description: 发现挂载了不同类型的文件系统
item_prototypes:
- uuid: 8bd18db2849a487996adb25efdc4408e
name: 'FS [{#FSNAME}]:剩余空间'
type: DEPENDENT
key: 'vfs.fs.dependent.size[{#FSNAME},free]'
delay: '0'
units: B
description: 可用存储空间,以字节表示。
preprocessing:
- type: JSONPATH
parameters:
- $.bytes.free
master_item:
key: 'vfs.fs.dependent[{#FSNAME},data]'
tags:
- tag: component
value: storage
- tag: filesystem
value: '{#FSNAME}'
- tag: fstype
value: '{#FSTYPE}'
- uuid: 4c2c2129e9234e0a8d298e2244cceeb0
name: 'FS [{#FSNAME}]: 磁盘使用率'
type: DEPENDENT
key: 'vfs.fs.dependent.size[{#FSNAME},pused]'
delay: '0'
value_type: FLOAT
units: '%'
description: 计算方法为当前已使用空间占最大可用空间的百分比。
preprocessing:
- type: JSONPATH
parameters:
- $.bytes.pused
master_item:
key: 'vfs.fs.dependent[{#FSNAME},data]'
tags:
- tag: component
value: storage
- tag: filesystem
value: '{#FSNAME}'
- tag: fstype
value: '{#FSTYPE}'
trigger_prototypes:
- uuid: f07fceee6aa34aac936bd7b19759504b
expression: 'min(/linux zabbix agent customize active/vfs.fs.dependent.size[{#FSNAME},pused],5m)>{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}'
name: 'Linux: FS [{#FSNAME}]: 空间不足'
event_name: 'Linux: FS [{#FSNAME}]: 空间不足low (used > {$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}%, total {{?last(//vfs.fs.dependent.size[{#FSNAME},total])/1024/1024/1024}.fmtnum(1)}GB)'
opdata: '已用空间: {{ITEM.LASTVALUE1}.fmtnum(1)}%'
priority: AVERAGE
description: |
卷的空间使用量超过了"{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}%"限制。
触发器表达式基于当前使用的空间和最大可用空间。
事件名称表示总卷空间,根据文件系统类型,它可能与最大可用空间不同。
manual_close: 'YES'
tags:
- tag: scope
value: availability
- tag: scope
value: capacity
- uuid: a79e87dba1ec44da9e54764c3f0c2190
expression: 'min(/linux zabbix agent customize active/vfs.fs.dependent.size[{#FSNAME},pused],5m)>{$VFS.FS.PUSED.MAX.WARN:"{#FSNAME}"}'
name: 'Linux: FS [{#FSNAME}]: 空间不足'
event_name: 'Linux: FS [{#FSNAME}]: Space is low (used > {$VFS.FS.PUSED.MAX.WARN:"{#FSNAME}"}%, total {{?last(//vfs.fs.dependent.size[{#FSNAME},total])/1024/1024/1024}.fmtnum(1)}GB)'
opdata: '已用空间: {{ITEM.LASTVALUE1}.fmtnum(1)}%'
priority: WARNING
description: |
卷的空间使用量超过了"{$VFS.FS.PUSED.MAX.WARN:"{#FSNAME}"}%"限制。
触发器表达式基于当前使用的空间和最大可用空间。
事件名称表示总卷空间,根据文件系统类型,它可能与最大可用空间不同。
manual_close: 'YES'
dependencies:
- name: 'Linux: FS [{#FSNAME}]: 空间不足'
expression: 'min(/linux zabbix agent customize active/vfs.fs.dependent.size[{#FSNAME},pused],5m)>{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}'
tags:
- tag: scope
value: availability
- tag: scope
value: capacity
- uuid: 8c3b510de02d45c4b84ce60a72ff309f
name: 'FS [{#FSNAME}]: 磁盘总大小'
type: DEPENDENT
key: 'vfs.fs.dependent.size[{#FSNAME},total]'
delay: '0'
units: B
description: 总空间(以字节表示)。
preprocessing:
- type: JSONPATH
parameters:
- $.bytes.total
master_item:
key: 'vfs.fs.dependent[{#FSNAME},data]'
tags:
- tag: component
value: storage
- tag: filesystem
value: '{#FSNAME}'
- tag: fstype
value: '{#FSTYPE}'
- uuid: 8c3b510de12d45c4b84ce60a72ff309f
name: 'FS [{#FSNAME}]: 已用空间'
type: DEPENDENT
key: 'vfs.fs.dependent.size[{#FSNAME},used]'
delay: '0'
units: B
description: 'Used storage expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.bytes.used
master_item:
key: 'vfs.fs.dependent[{#FSNAME},data]'
tags:
- tag: component
value: storage
- tag: filesystem
value: '{#FSNAME}'
- tag: fstype
value: '{#FSTYPE}'
- uuid: d5e531445d1c4f389054786152d0f135
name: 'FS [{#FSNAME}]: 获取数据'
type: DEPENDENT
key: 'vfs.fs.dependent[{#FSNAME},data]'
delay: '0'
history: 1h
value_type: TEXT
trends: '0'
description: '`{#FSNAME}`文件系统的中间数据。'
preprocessing:
- type: JSONPATH
parameters:
- '$.[?(@.fsname==''{#FSNAME}'')].first()'
master_item:
key: vfs.fs.get
tags:
- tag: component
value: raw
- tag: component
value: storage
- tag: filesystem
value: '{#FSNAME}'
- tag: fstype
value: '{#FSTYPE}'
master_item:
key: vfs.fs.get
lld_macro_paths:
- lld_macro: '{#FSNAME}'
path: $.fsname
- lld_macro: '{#FSTYPE}'
path: $.fstype
preprocessing:
- type: JAVASCRIPT
parameters:
- |
var filesystems = JSON.parse(value);
result = filesystems.map(function (filesystem) {
return {
'fsname': filesystem.fsname,
'fstype': filesystem.fstype
};
});
return JSON.stringify(result);
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
overrides:
- name: 跳过动态文件系统的元数据收集
step: '1'
filter:
conditions:
- macro: '{#FSTYPE}'
value: ^(btrfs|zfs)$
formulaid: A
operations:
- operationobject: ITEM_PROTOTYPE
operator: LIKE
value: Inodes
discover: NO_DISCOVER
tags:
- tag: class
value: os
macros:
- macro: '{$AGENT.NODATA_TIMEOUT}'
value: 30m
- macro: '{$AGENT.TIMEOUT}'
value: 5m
description: 代理程序被视为不可用的超时时间。
- macro: '{$CPU.UTIL.MAX.WARN}'
value: '80'
description: cpu的阀值
- macro: '{$IFCONTROL}'
value: '1'
- macro: '{$MEMORY.AVAILABLE.MIN}'
value: 20M
description: 内存
- macro: '{$MEMORY.UTIL.MAX}'
value: '90'
description: 内存
- macro: '{$NET.IF.IFNAME.MATCHES}'
value: '^.*$'
description: 'Used for network interface discovery. Can be overridden on the host or linked template level.'
- macro: '{$NET.IF.IFNAME.NOT_MATCHES}'
value: '(^Software Loopback Interface|^NULL[0-9.]*$|^[Ll]o[0-9.]*$|^[Ss]ystem$|^Nu[0-9.]*$|^veth[0-9A-z]+$|docker[0-9]+|br-[a-z0-9]{12}|^kube-ipvs0$|^tunl0$|^cali649d7eafd3b$|^cali6a10ce4bc06$)'
description: 过滤网卡名称
- macro: '{$VFS.DEV.DEVNAME.MATCHES}'
value: .+
- macro: '{$VFS.DEV.DEVNAME.NOT_MATCHES}'
value: '^(loop[0-9]*|sd[a-z][0-9]+|nbd[0-9]+|sr[0-9]+|fd[0-9]+|dm-[0-9]+|ram[0-9]+|ploop[a-z0-9]+|md[0-9]*|hcp[0-9]*|zram[0-9]*)'
- macro: '{$VFS.FS.FSNAME.MATCHES}'
value: .+
description: 用于文件系统发现。可在主机或链接模板级别进行覆盖。
- macro: '{$VFS.FS.FSNAME.NOT_MATCHES}'
value: ^(/dev|/sys|/run|/proc|.+/shm$|/boot)
description: 用于文件系统发现。可在主机或链接模板级别进行覆盖。
- macro: '{$VFS.FS.FSTYPE.MATCHES}'
value: ^(btrfs|ext2|ext3|ext4|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|apfs|refs|ntfs|fat32|zfs)$
- macro: '{$VFS.FS.FSTYPE.NOT_MATCHES}'
value: ^\s$
- macro: '{$VFS.FS.INODE.PFREE.MIN.CRIT}'
value: '10'
- macro: '{$VFS.FS.INODE.PFREE.MIN.WARN}'
value: '20'
- macro: '{$VFS.FS.PUSED.MAX.CRIT}'
value: '90'
- macro: '{$VFS.FS.PUSED.MAX.WARN}'
value: '80'
description: 硬盘空间阀值
valuemaps:
- uuid: 79c846e7db114751a37dc86eab4c9c44
name: ifOperStatus
mappings:
- value: '0'
newvalue: unknown
- value: '1'
newvalue: notpresent
- value: '2'
newvalue: down
- value: '3'
newvalue: lowerlayerdown
- value: '4'
newvalue: testing
- value: '5'
newvalue: dormant
- value: '6'
newvalue: up
- uuid: d60fcdcac22d46409a2f8cf8d4f19ce7
name: zabbix.host.active_agent.available
mappings:
- value: '0'
newvalue: unknown
- value: '1'
newvalue: available
- value: '2'
newvalue: 'not available'
- uuid: fe491f8f499d40d6804b9dd3aca9d610
name: 'Zabbix agent ping status'
mappings:
- value: '1'
newvalue: up
triggers:
- uuid: a3334d0ed95a46159a5043a0f34e9a75
expression: 'max(/linux zabbix agent customize active/vm.memory.size[available],5m)<{$MEMORY.AVAILABLE.MIN} and last(/linux zabbix agent customize active/vm.memory.size[total])>0'
name: Linux:内存不足
event_name: 'Linux:内存不足 (<{$MEMORY.AVAILABLE.MIN} of {ITEM.VALUE2})'
opdata: 'Available: {ITEM.LASTVALUE1}, total: {ITEM.LASTVALUE2}'
priority: AVERAGE
description: 系统内存不足。
tags:
- tag: scope
value: capacity
- tag: scope
value: performance
九、总结
该模板实现了:
- Linux 主机基础监控
- CPU / 内存 / 磁盘监控
- 自动发现网卡
- 自动发现磁盘
- 自动发现文件系统
- 支持宏控制告警阈值
相比官方模板:
优点:
- 结构更清晰
- 监控更轻量
- 更适合生产环境
适合用于:
Linux服务器监控
云服务器监控
Kubernetes节点监控
运维统一监控模板