Zabbix 7.0 自定义 Linux 监控模板(Agent Active版,支持CPU/内存/磁盘/网卡自动发现)

文章目录

  • [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节点监控
运维统一监控模板

相关推荐
进击切图仔2 小时前
linux 虚拟文件系统简介和详解
linux·运维·服务器
皮皮哎哟2 小时前
嵌入式数据库从入门到精通
linux·数据库·sqlite3·sqlite3_open
虾..3 小时前
Linux 网络套接字编程
linux·运维·网络
开开心心_Every3 小时前
PDF密码移除工具,解除打印编辑复制权限免费
linux·运维·服务器·pdf·web3·ocr·共识算法
生活很暖很治愈3 小时前
Linux——UDP编程&通信
linux·服务器·c++·ubuntu
就不掉头发3 小时前
Linux与数据库
linux·运维·数据库
Lolo_fi3 小时前
Linux gpio子系统
linux