1.查看数据

2.中文乱码

字体原因

红色框内

如何解决

安装文泉驿微米黑(常用中文字体)

[root@zabbix ~]$ yum install -y wqy-microhei-fonts

[root@zabbix ~]$ ll /usr/share/fonts/wqy-microhei/
total 5060
-rw-r–r– 1 root root 5177387 May 25 2009 wqy-microhei.ttc

[root@zabbix ~]$ cd /code/zabbix/assets/fonts/
[root@zabbix /code/zabbix/assets/fonts]$ ll
total 740
-rw-r–r– 1 nginx nginx 756072 Apr 16 19:00 DejaVuSans.ttf
[root@zabbix /code/zabbix/assets/fonts]$ mv DejaVuSans.ttf DejaVuSans.ttf.bak

[root@zabbix /code/zabbix/assets/fonts]$ cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc  /code/zabbix/assets/fonts/DejaVuSans.ttf DejaVuSans.ttf

[root@zabbix /code/zabbix/assets/fonts]$ ll
total 5060
-rw-r–r– 1 nginx nginx 5177387 Aug 21 22:14 DejaVuSans.ttf

3. Zabbix-客户端-创建Key

zabbix_agent2 -p 是 Zabbix Agent 2 的一个重要命令,用于 列出所有支持的内置监控键值(built-in keys)及其详细信息。这些内置键值是 Zabbix 预定义的、无需额外配置即可直接使用的监控项,用于采集系统、服务等基础指标

命令作用解析

zabbix_agent2:Zabbix 代理程序(第二代代理,性能更优,支持更多功能)。

-p(或 –print):参数用于打印所有支持的监控键值(包括内置键和用户自定义键,若有),并显示键值的类型、描述、参数要求等

[root@zabbix ~]$ zabbix_agent2 -p | awk ‘/^[a-z]+\./{print $1}’
agent.hostname
agent.ping
agent.variant
agent.version
system.localtime[utc]
system.run[echo
web.page.get[localhost,,80]
developers. 
web.page.perf[localhost,,80]
web.page.regexp[localhost,,80,OK]
vfs.file.size[/etc/passwd]
vfs.file.time[/etc/passwd,modify]
vfs.file.exists[/etc/passwd]
vfs.file.contents[/etc/passwd]
vfs.file.regexp[/etc/passwd,root]
vfs.file.regmatch[/etc/passwd,root]
vfs.file.md5sum[/etc/passwd]
vfs.file.cksum[/etc/passwd]
vfs.file.owner[/etc/passwd]
vfs.file.permissions[/etc/passwd]
vfs.file.get[/etc/passwd]
vfs.dir.size[/var/log]
vfs.dir.count[/var/log]
vfs.dir.get[/var/log]
net.dns[,zabbix.com]
net.dns.record[,zabbix.com]
net.tcp.dns[,zabbix.com]
net.tcp.dns.query[,zabbix.com]
net.tcp.port[,80]
net.tcp.listen[80]
net.tcp.service[ssh,127.0.0.1,22]
net.tcp.service.perf[ssh,127.0.0.1,22]
net.tcp.socket.count[,80]
net.udp.listen[68]
net.udp.service[ntp,127.0.0.1,123]
net.udp.service.perf[ntp,127.0.0.1,123]
net.udp.socket.count[,53]
system.users.num
log.count[logfile]
logrt.count[logfile]
zabbix.stats[127.0.0.1,10051]
kernel.maxfiles
kernel.maxproc
kernel.openfiles
vfs.fs.size[/,free]
vfs.fs.inode[/,free]
vfs.fs.discovery
vfs.fs.get
vfs.dev.write[sda,operations]
net.if.in[lo,bytes]
net.if.out[lo,bytes]
net.if.total[lo,bytes]
net.if.collisions[lo]
net.if.discovery
vm.memory.size[total]
proc.cpu.util[inetd]
proc.num[inetd]
proc.mem[inetd]
system.cpu.switches
system.cpu.intr
system.cpu.util[all,user,avg1]
system.cpu.load[all,avg1]
system.cpu.num[online]
system.cpu.discovery
system.uname
system.hw.chassis
system.hw.cpu
system.hw.devices
system.hw.macaddr
system.sw.arch
system.sw.os
system.sw.packages
system.swap.size[all,free]
system.swap.in[all]
system.swap.out[all]
system.uptime
system.boottime
modbus.get[tcp://localhost]
system.hostname

awk 脚本 /^[a-z]+\./{print $1} 的作用:

^[a-z]+\.:正则表达式,匹配以小写字母开头、后跟一个或多个小写字母、再跟一个点(.) 的行(这是 Zabbix 内置监控项的典型命名格式,如 system.、vfs.、net. 等)。

{print $1}:打印符合条件的行的第一个字段(即监控项的键,如 system.cpu.load[all,avg1]、vfs.file.size[/etc/passwd])。

输出内容说明

执行命令后,会输出类似以下格式的信息(以常见内置键为例)

system.cpu.load[average1]                    [float]  System cpu load average (1 minute)
system.cpu.load[average5]                    [float]  System cpu load average (5 minutes)
system.cpu.load[average15]                   [float]  System cpu load average (15 minutes)
vm.memory.size[total]                        [int]    Total memory size in bytes
vm.memory.size[available]                    [int]    Available memory size in bytes
vm.memory.size[used]                         [int]    Used memory size in bytes
disk.space[/,total]                          [int]    Total disk space on / in bytes
disk.space[/,free]                           [int]    Free disk space on / in bytes
disk.space[/,used]                           [int]    Used disk space on / in bytes
net.if.in[eth0,bytes]                        [int]    Incoming bytes on interface eth0
net.if.out[eth0,bytes]                       [int]    Outgoing bytes on interface eth0

每行包含 3 部分核心信息

键值名称(如 system.cpu.load[average1]):监控项的唯一标识,部分键值需要参数(如 [average1] 表示 1 分钟负载)。

数据类型(如 [float][int]):返回值的数据类型(浮点数、整数等)。

描述:键值的功能说明(如 “1 分钟系统 CPU 负载”)

实用场景

查询可用监控项:当你需要配置新监控项时,用此命令确认 Zabbix Agent 2 支持哪些内置键,避免使用不存在的键值。

验证键值参数:部分键值需要指定参数(如 disk.space[/,free] 中的 / 表示根分区),通过输出可明确参数格式。

排查监控项问题:若某个监控项提示 “不支持的键值”,可通过此命令确认该键是否存在或参数是否正确

常用内置键值举例

键值名称 用途 参数说明
system.cpu.load[averageN] 系统 CPU 负载 N 为 1/5/15(分钟)
vm.memory.size[param] 内存使用情况 param 为 total/available/used 等
disk.space[fs,param] 磁盘空间 fs 为文件系统(如 /),param 为 total/free/used 等
net.if.in[if,param] 网卡入站数据 if 为网卡名(如 eth0),param 为 bytes/packets 等
system.uptime 系统运行时间 无参数

Zabbix 内置了大量监控键值(key),覆盖系统资源、网络、磁盘、进程等场景。以下是 最常用的核心 key 分类整理,方便快速配置监控项

系统资源监控

key 名称 参数说明 描述(返回值) 用途场景
system.cpu.load[averageN] N 为 1/5/15(分钟) 系统 CPU 负载平均值(浮点型) 监控 CPU 负载趋势
system.cpu.util[,user] 第二个参数:user(用户态)、system(系统态)、idle(空闲)等 CPU 使用率(百分比) 监控 CPU 各状态占比
system.uptime 无参数 系统运行时间(秒) 监控服务器稳定运行时长
system.uname 无参数 系统信息(内核版本、主机名等字符串) 记录服务器基本信息

内存监控

key 名称 参数说明 描述(返回值) 用途场景
vm.memory.size[total] total(总内存)、available(可用)、used(已用)、free(空闲)等 内存大小(字节) 监控总内存 / 可用内存
vm.memory.util[used] used(已用占比)、available(可用占比)等 内存使用率(百分比) 监控内存使用趋势

磁盘监控

key 名称 参数说明 描述(返回值) 用途场景
disk.space[fs,total] fs 为文件系统(如 //data);第二个参数:total(总空间)、free(空闲)、used(已用)等 磁盘空间大小(字节) 监控磁盘总容量 / 剩余空间
disk.space[fs,usedp] fs 同上;usedp 为已用百分比 磁盘使用率(百分比) 磁盘空间告警(如超过 80%)
vfs.fs.inode[/,usedp] fs 为文件系统;usedp 为 inode 已用百分比 inode 使用率(百分比) 避免 inode 耗尽导致无法创建文件

网络监控

key 名称 参数说明 描述(返回值) 用途场景
net.if.in[if,bytes] if 为网卡名(如 eth0ens33);bytes(字节)、packets(数据包)、errors(错误数)等 网卡入站数据量 / 错误数 监控网络流入流量 / 异常
net.if.out[if,bytes] 参数同上 网卡出站数据量 / 错误数 监控网络流出流量 / 异常
net.tcp.listen[port] port 为端口号(如 80、443) 端口监听状态(1 = 监听,0 = 未监听) 监控服务端口是否存活

进程与服务监控

key 名称 参数说明 描述(返回值) 用途场景
proc.num[process] process 为进程名(如 nginxmysql 进程数量(整数) 监控进程是否运行(数量 > 0)
net.udp.port[port] port 为 UDP 端口号 UDP 端口监听状态(1 = 监听,0 = 未监听) 监控 UDP 服务(如 DNS)
system.service.state[name] name 为服务名(如 nginx.service 服务状态(running/stopped 等字符串) 监控系统服务运行状态

日志与文件监控

key 名称 参数说明 描述(返回值) 用途场景
vfs.file.size[path] path 为文件路径(如 /var/log/messages 文件大小(字节) 监控日志文件是否过大
vfs.file.exists[path] path 为文件 / 目录路径 文件是否存在(1 = 存在,0 = 不存在) 监控关键文件是否丢失
log[/var/log/nginx/error.log,error] 第一个参数为日志路径,第二个为关键字 包含关键字的日志行数(最新匹配) 监控错误日志中的异常关键字

文件基础属性监控

key 名称 参数说明 返回值类型 描述与用途
vfs.file.exists[path] path:文件 / 目录的绝对路径(如 /etc/passwd 整数 1 = 存在,0 = 不存在
👉 监控关键文件是否丢失(如配置文件、证书)
vfs.file.size[path] path:文件路径 整数(字节) 文件大小
👉 监控日志文件是否过大(如 /var/log/messages
vfs.file.mtime[path] path:文件路径 整数(时间戳) 文件最后修改时间(Unix 时间戳)
👉 监控文件是否被更新(如配置文件篡改检测)
vfs.file.ctime[path] path:文件路径 整数(时间戳) 文件最后状态变更时间(权限 / 所有者修改)
👉 监控文件权限是否被异常修改
vfs.file.mode[path] path:文件路径 字符串 文件权限(如 0644
👉 确保关键文件权限合规(如 /etc/sudoers 权限是否为 0440)

文件内容与完整性监控

key 名称 参数说明 返回值类型 描述与用途
vfs.file.md5sum[path] path:文件路径 字符串 文件的 MD5 哈希值
👉 监控文件内容是否被篡改(如核心配置文件)
vfs.file.sha256sum[path] path:文件路径 字符串 文件的 SHA256 哈希值
👉 更高安全性的内容完整性校验
vfs.file.contents[path] path:文件路径 字符串 文件内容(仅适合小文件)
👉 监控配置文件中的关键参数(如 nginx.conf 中的端口配置)
log[file,regexp] file:日志文件路径;regexp:关键字(如 error 整数 匹配关键字的最新行数(仅监控新增内容)
👉 监控日志中的错误 / 警告信息(如 Nginx 错误日志)
logrt[file_pattern,regexp] file_pattern:滚动日志匹配(如 /var/log/nginx/access_*.log);regexp:关键字 整数 匹配滚动日志中关键字的最新行数
👉 监控按时间分割的日志(如按天生成的访问日志)

目录监控

key 名称 参数说明 返回值类型 描述与用途
vfs.dir.size[path] path:目录路径 整数(字节) 目录总大小(含子目录)
👉 监控备份目录 / 临时目录大小(如 /tmp/backup
vfs.dir.count[path,pattern] path:目录路径;pattern:文件匹配(如 *.log,可选) 整数 目录下匹配模式的文件数量
👉 监控日志目录下的文件数是否过多(如 /var/log 下的 .log 文件)
vfs.dir.perm[path] path:目录路径 字符串 目录权限(如 0755
👉 确保目录权限合规(如 /var/www 权限是否为 0755)

实用场景举例

监控关键配置文件是否被篡改:
用 vfs.file.md5sum[/etc/nginx/nginx.conf] 记录哈希值,当值变化时触发告警(文件被修改)。
监控日志文件增长过快:
用 vfs.file.size[/var/log/mysql/error.log] 配置阈值(如超过 1GB 告警)。
检测服务是否生成新日志:
用 vfs.file.mtime[/var/log/redis/redis.log] 监控最后修改时间,若长时间未更新(如 24 小时),可能服务异常。
监控临时目录文件数量:
用 vfs.dir.count[/tmp,*.tmp] 当 .tmp 文件数超过 1000 时告警(可能存在内存泄漏)

内置键值key

[root@web01 ~]$ zabbix_agent2 -p

如访问时没有权限如何处理

[root@zabbix ~]$ zabbix_get -s web01 -k vfs.file.contents[/etc/shadow]
ZBX_NOTSUPPORTED: Cannot open file /etc/shadow: open /etc/shadow: permission denied

提权(客户端)

[root@web01 ~]$ visudo

[root@web01 ~]$ tail -2 /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL

4.自定义监控

书写格式

/etc/zabbix/zabbix_agent2.conf

Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See ‘zabbix_agentd’ directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=

格式:UserParameter=<key>,<shell command>

<key>:监控项的唯一标识(在 Zabbix 前端配置时需要使用此 key),命名建议简洁且有意义(如 system.disk.usage、app.response.time)。

<shell command>:实际执行的 shell 命令 / 脚本,其输出结果将作为监控项的采集值(需确保命令能稳定返回有效值,如数字、字符串等)。

特性:

可配置多个 UserParameter,每个对应一个独立的监控项。

非必填项(默认无配置),需根据业务需求手动添加

端口

客户端

[root@web01 ~]$ vim /etc/zabbix/zabbix_agent2.d/web.conf
[root@web01 ~]$ systemctl restart zabbix-agent2.service
[root@web01 ~]$ tail -1 /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=nginx.dk,ss -lntup |grep -wc 80

服务端

[root@zabbix ~]$ zabbix_get -s web01 -k nginx.dk
2

权限

客户端

[root@web01 ~]$ cat /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=conf.shadow,sudo wc -l /etc/shadow|cut -d ” ” -f1

[root@web01 ~]$ systemctl restart zabbix-agent2.service

服务端

[root@zabbix ~]$ zabbix_get -s web01 -k conf.shadow
39

添加监控

触发器

图形

 

5.创建监控一些相关说明

1. Zabbix 客户端

  • 工作方式:被动模式。Zabbix 服务器主动向被监控主机的 Zabbix agent 发送请求(如用 zabbix_get 命令),agent 接收请求后返回系统 / 应用指标(如 CPU、内存、磁盘使用率)。
  • 适用场景:监控已安装 Zabbix agent 的服务器(Linux/Windows 等),适合 小规模、网络稳定 的环境(由服务器主导采集节奏)。

2. Zabbix 客户端 (主动式)

  • 工作方式:主动模式。Zabbix agent 主动向服务器 / Proxy推送数据,无需服务器先发起请求。
  • 适用场景:监控 大规模主机(减少服务器请求压力)、跨防火墙环境(agent 主动连服务器,无需开放入站端口)。需在 agent 配置文件中指定服务器地址。

3. 简单检查

  • 工作方式:Zabbix 服务器直接执行基础检查,无需 agent 或其他代理。
  • 典型场景:
    • ICMP ping(检查主机网络可达性);
    • TCP 端口检查(如 80 端口是否开放,判断 Web 服务是否存活)。
  • 特点:用于 基础可用性监控(网络设备、服务端口的 “存活检测”)。

4. SNMP 代理

  • 工作方式:基于 SNMP 协议(支持 v1/v2c/v3),向支持 SNMP 的设备(交换机、路由器等)发送请求,通过 OID(对象标识符) 获取指标(如接口流量、设备温度)。
  • 前提条件:设备需开启 SNMP 服务,配置 共同体(Community,v1/v2c) 或 认证信息(v3)。
  • 适用场景:监控网络设备、不支持 Zabbix agent 的专用设备(如打印机、工业设备)。

5. SNMP trap

  • 工作方式:Zabbix 作为SNMP trap 接收器,接收设备主动发送的陷阱(Trap)消息。
  • 典型场景:设备发生异常(如接口 down、温度超限)时,主动向 Zabbix 推送告警,无需 Zabbix 主动查询。
  • 特点:用于 实时接收设备异常通知,需配置 trap 处理程序(如snmpd服务、Zabbix trap 脚本)。

6. Zabbix 内部

  • 工作方式:监控 Zabbix 服务器自身的内部指标,通过内置键值(如 zabbix[hosts] 表示已配置主机数,zabbix[triggers] 表示触发器数量)获取数据。
  • 适用场景:监控 Zabbix 服务器的 运行状态与内部统计信息(如服务器负载、配置项数量)。

7. Zabbix 采集器

  • 工作方式:接收 外部程序主动推送的数据(如通过 zabbix_sender 工具、自定义脚本向 Zabbix 发送数据)。
  • 适用场景:自定义数据采集(如业务系统订单量、日志解析结果等,由外部程序主动上报)。

8. 外部检查

  • 工作方式:Zabbix 服务器 / Proxy 执行 外部脚本 / 命令(需放在 Zabbix 配置的 ExternalScripts 目录),脚本输出结果作为监控值。
  • 适用场景:自定义监控(如解析业务日志、调用特殊 API、执行复杂命令获取指标)。

9. 数据库监控

  • 工作方式:直接连接数据库(MySQL、PostgreSQL、Oracle 等),执行 SQL 查询获取指标(如连接数、慢查询数、表数据量)。
  • 前提条件:需配置数据库连接信息(地址、端口、用户名、密码),SQL 查询结果需为 单个数值(如 SELECT COUNT(*) FROM table)。
  • 适用场景:监控数据库性能、业务表状态等。

10. HTTP 代理

  • 工作方式:发送 HTTP/HTTPS 请求 到指定 URL,根据响应内容(状态码、响应时间、页面内容)生成指标。
  • 典型场景:
    • 网站可用性(状态码是否为 200);
    • API 接口响应时间;
    • 页面关键词匹配(如检查 “服务正常” 是否存在)。
  • 适用场景:Web 服务、API 接口的监控。

11. IPMI 客户端

  • 工作方式:通过 IPMI 协议 与服务器的 BMC(基板管理控制器)通信,获取 硬件级指标(CPU 温度、风扇转速、电源状态、磁盘健康度)。
  • 特点:无需依赖操作系统或 agent,即使服务器关机 也能采集硬件数据;需服务器支持 IPMI 并配置 IPMI 网络。
  • 适用场景:服务器硬件状态监控。

12. SSH 客户端

  • 工作方式:通过 SSH 协议 远程登录目标主机,执行命令(如 df -h 查磁盘、top 查 CPU)并解析输出。
  • 适用场景:监控 无法安装 Zabbix agent 但支持 SSH 的设备(如网络设备、嵌入式系统),安全性比 Telnet 高。

13. TELNET 客户端

  • 工作方式:通过 Telnet 协议 远程登录目标主机执行命令。
  • 特点:与 SSH 类似,但 Telnet 是 明文传输,安全性低;适用于老旧设备或临时调试场景。

14. JMX agent 代理程序

  • 工作方式:通过 JMX 协议 连接 Java 应用(如 Tomcat、JVM),获取 JVM 内存、线程、类加载等指标。
  • 前提条件:Java 应用需开启 JMX 远程连接(配置 com.sun.management.jmxremote 等参数),Zabbix 通过 JMX 端口(默认 12345)采集数据。
  • 适用场景:Java 应用服务器(如 Tomcat)、JVM 进程的监控。

15. 可计算的

  • 工作方式:基于 已有监控项的数值,通过公式(四则运算、函数)计算生成新指标(如 (已用空间 / 总空间) * 100 得到磁盘使用率)。
  • 特点:不实际采集数据,依赖其他监控项结果,在 Zabbix 服务器端计算。
  • 适用场景:需要 “二次加工” 的指标(如聚合、比率计算)。

16. 相关项目

  • 工作方式:依赖 “主监控项” 的原始数据,提取多个子指标(如主监控项采集日志,相关项目用正则从日志中分别提取 “错误数”“警告数”)。
  • 特点:减少重复采集(一次采集,多次提取),提高效率。

17. 脚本

  • 工作方式:执行 Zabbix 服务器 / Proxy 上的 自定义脚本 获取数据,与 “外部检查” 类似,但更灵活(可在 Web 界面配置脚本参数)。
  • 适用场景:复杂业务逻辑的自定义指标采集。

Zabbix 日常监控中最常用的类型及其典型

1. Zabbix agent(被动模式)

  • 典型场景:监控已安装 Zabbix agent 的服务器(Linux/Windows)的系统基础指标(CPU 使用率、内存占用、磁盘空间、进程状态等)。
  • 特点:服务器主动向 agent 发请求,适合小规模、网络稳定的环境。

2. Zabbix agent (主动式)

  • 典型场景:监控大规模主机集群(如数百台服务器),或跨防火墙环境(agent 主动连服务器,无需开放入站端口)。
  • 特点:agent 主动推送数据,减轻服务器请求压力。

3. SNMP 代理

  • 典型场景:监控网络设备(交换机、路由器、防火墙)的接口流量、设备温度、端口状态等;或监控不支持 Zabbix agent 的 IoT 设备、工业设备。
  • 特点:依赖设备的 SNMP 服务,需配置共同体(community)或认证信息(v3)。

4. 外部检查 / 脚本

  • 典型场景:自定义业务指标监控(如解析业务日志中的错误数、调用内部 API 获取订单量、执行 Shell/Python 脚本采集特殊指标)。
  • 特点:灵活适配非标监控需求,脚本需放在 Zabbix 配置的 ExternalScripts 目录。

5. HTTP 代理

  • 典型场景:监控Web 服务可用性(状态码是否为 200)、API 接口响应时间(如 RESTful API 的请求耗时)、页面关键词匹配(如 “服务正常” 是否存在)。
  • 特点:模拟浏览器请求,支持 HTTP/HTTPS,可配置请求头、认证信息。

6. SSH 客户端

  • 典型场景:监控无法安装 Zabbix agent 但支持 SSH 的设备(如老旧网络设备、嵌入式系统),远程执行命令(如 df -h 查磁盘、top 查进程)并解析输出。
  • 特点:安全性高于 Telnet(加密传输),需配置 SSH 用户名 / 密码或密钥。

7. 数据库监控

  • 典型场景:监控数据库性能(如 MySQL 连接数、慢查询数、InnoDB 缓冲池命中率)、业务表数据量(如用户表行数)。
  • 特点:直接连接数据库执行 SQL 查询,需配置数据库地址、端口、账号密码。

8. 简单检查

  • 典型场景:基础可用性监控,如ICMP ping 检测主机是否在线、TCP 端口检查(如 80/443 端口是否开放)。
  • 特点:无需 agent,服务器直接执行检查,适合快速判断服务是否存活。
这些类型覆盖了服务器、网络设备、Web 服务、数据库、自定义业务等绝大多数监控场景,是日常配置中最常选用的类型。

触发器

历史数据函数

  1. baselinedev()
    • 作用:计算 “前几个相同时间段” 的历史数据,与 “最后一个数据时期” 的偏差程度。
    • 场景:对比 “上周同一时段(如上周一下午 2 点)” 和 “本周同一时段” 的 CPU 负载,判断当前数据是否偏离历史基线,识别业务外的异常波动。
  2. baselinewma()
    • 作用:通过加权移动平均(近期数据权重更高)计算历史数据的 “正常基线”。
    • 场景:用近 30 天的服务器请求量做加权平均生成基线,若当前请求量远高于基线,判断为流量异常突增。
  3. change()
    • 作用:返回监控项最新值与前一个采集值的差值,反映 “瞬时变化量”。
    • 场景:监控网络接口流量时,change()可得到两次采集间隔的流量变化,检测突发流量波动。
  4. changecount()
    • 作用:统计指定时间周期内,相邻监控值的变化次数,支持过滤变化方向(all所有变化、inc仅增加、dec仅减少)。
    • 场景:统计 “1 小时内 CPU 负载上升的次数”(用changecount(1h,inc)),判断负载是否频繁波动。
  5. first()
    • 作用:返回指定时间窗口内最早采集到的监控值。
    • 场景:查询 “今天 0 点到现在,最早的内存使用率”(用first(1d),1d表示 1 天窗口)。
  6. fuzzytime()
    • 作用:检查监控项数据的时间戳与 Zabbix 服务器时间的偏差是否≤阈值,确保数据 “新鲜度”。
    • 场景:日志时间戳若与服务器时间差超 10 秒,判断为采集延迟,触发告警。
  7. last()
    • 作用:返回监控项最新(最近)的采集值,是最常用的实时告警函数。
    • 场景:“当前 CPU 负载> 80%”“最新磁盘使用率” 等实时性告警,均依赖last()。
  8. logeventid()
    • 作用:从日志型监控项中,匹配正则表达式V,返回符合条件的最后一条日志的 “事件 ID”。
    • 场景:提取系统日志中含 “ERROR” 的最后一条日志的事件 ID,用于关联日志系统的事件追踪。
  9. logseverity()
    • 作用:返回日志监控项在周期T内最后一条日志的 “严重性级别”(如 INFO/WARN/ERROR 对应的数值)。
    • 场景:判断最新日志的严重程度,若为 ERROR 则触发告警。
  10. logsource()
    • 作用:检查日志监控项在周期T内最后一条日志是否匹配参数V的 “日志源”(如日志文件路径、服务名),返回1(匹配)或0(不匹配)。
    • 场景:判断最后一条错误日志是否来自/var/log/nginx/error.log。
  11. monodec()
    • 作用:检查监控项值是否连续减少,返回1(是单调减少)或0(否),支持模式参数细化判断。
    • 场景:内存使用率持续减少(monodec()返回1),疑似内存泄漏,触发告警。
  12. monoinc()
    • 作用:检查监控项值是否连续增加,返回1(是单调增加)或0(否),支持模式参数。
    • 场景:磁盘使用率持续增加(monoinc()返回1),预警磁盘即将爆满。
  1. nodata()
    • 作用:检测指定时间T内是否未收到监控项数据,返回1(无数据,异常)或0(有数据,正常),支持strict模式(更严格的无数据判断)。
    • 场景:最常用检测 Agent 是否离线(如 “5 分钟无数据则告警”,表达式为nodata(5m)=1)。
  2. percentile()
    • 作用:返回指定周期T内监控值的第 P 百分位数(排除极端值,反映 “大多数情况”)。
    • 场景:统计 “95% 分位的响应时间”(percentile(1h,95)),即 95% 的请求响应时间都低于该值。
  3. rate()
    • 作用:计算单调递增计数器的 “每秒平均速率”。
    • 场景:网络接口入流量(计数器持续累加)的每秒速率、请求数的 QPS(每秒请求数)。
  4. trendavg()
    • 作用:基于 Zabbix趋势数据(预聚合存储),返回周期T内的平均值,性能优于直接用avg()(适合长期统计)。
    • 场景:统计 “过去 7 天的平均 CPU 负载”,用趋势数据聚合更高效。
  5. trendcount()
    • 作用:基于趋势数据,统计周期T内成功检索到的值的数量,判断趋势数据的完整性。
    • 场景:检查 “过去 1 天的趋势数据有多少有效样本”。
  6. trendmax()
    • 作用:基于趋势数据,返回周期T内的最大值,性能优于直接用max()(适合长期统计)。
    • 场景:统计 “过去 30 天的最大内存使用率”。
  7. trendmin()
    • 作用:基于趋势数据,返回周期T内的最小值,性能优于直接用min()(适合长期统计)。
    • 场景:统计 “过去 30 天的最小磁盘剩余空间”。
  8. trendstd()
    • 作用:基于趋势数据,检测周期T内的异常值(通过标准差等统计方法),识别数据是否偏离正常波动。
    • 场景:响应时间突然波动过大时触发告警。
  9. trendsum()
    • 作用:基于趋势数据,返回周期T内的数值总和,性能优于直接用sum()(适合长期统计)。
    • 场景:统计 “过去 1 个月的总网络流量”。

字符串函数

  1. ascii()
    • 作用:返回字符串最左侧字符的 ASCII 码值。
    • 示例:ascii(“Zabbix”) → 返回 90(字符 ‘Z’ 的 ASCII 码为 90)。
    • 场景:判断文本开头是否为特定字符(如日志行首的标识位)。
  2. bitlength()
    • 作用:返回字符串的二进制位总长度(需结合字符编码的二进制位数计算)。
    • 示例:bitlength(“A”) → 返回 8(’A’ 的 ASCII 编码 65 对应二进制 01000001,共 8 位)。
    • 场景:底层编码分析(如验证字符集的二进制存储长度),日常监控中较少直接使用。
  3. bytelength()
    • 作用:返回字符串的字节长度(不同编码下字符占字节数不同,如 UTF-8 中汉字占 3 字节,英文字母占 1 字节)。
    • 示例:bytelength(“你好”) → 返回 6(2 个汉字,每个 3 字节);bytelength(“Zabbix”) → 返回 6(6 个英文字母,每个 1 字节)。
    • 场景:监控文本数据的字节规模(如日志每行的字节数是否异常)。
  4. char()
    • 作用:根据ASCII 码值,返回对应的字符。
    • 示例:char(90) → 返回 ‘Z’。
    • 场景:生成特定字符用于测试、拼接文本(如构造带标识的告警信息)。
  5. concat()
    • 作用:将多个输入值拼接为一个字符串。
    • 示例:concat(“Hello “, “Zabbix”) → 返回 “Hello Zabbix”。
    • 场景:拼接多监控项的文本结果(如结合主机名和服务状态),或构造复杂告警描述。
  6. find()
    • 作用:在指定周期 T 内,检查字符串是否匹配模式 V,并满足运算符 O 的条件,返回 1(匹配)或 0(不匹配)。
    • 示例:find(“.*ERROR.*”, 5m) → 5 分钟内检查文本是否包含 “ERROR”,匹配则返回 1。
    • 场景:监控日志中是否出现错误关键字(如 ERROR、Exception)。
  7. insert()
    • 作用:将指定字符 / 空字符串插入到原字符串的指定位置(位置从 1 开始计数)。
    • 示例:insert(“abc”, “x”, 2) → 在第 2 位插入 “x”,返回 “axbc”。
    • 场景:修改文本格式(如给监控标识添加前缀)。
  8. left()
    • 作用:返回字符串最左侧指定个数的字符。
    • 示例:left(“abcdef”, 3) → 返回 “abc”。
    • 场景:提取文本开头的关键信息(如日志的时间戳前缀)。
  9. length()
    • 作用:返回最近周期 T 内字符串的长度(以字符为单位)。
    • 示例:监控项返回 “error occurred”,length() → 返回 14。
    • 场景:判断日志行是否有内容(length() > 0 表示有内容),或文本长度是否异常(如配置文件行过长)。
  10. ltrim()
    • 作用:从字符串开头删除指定字符(默认删除空格)。
    • 示例:ltrim(” abc”, ” “) → 返回 “abc”。
    • 场景:清理文本开头的多余空格 / 符号(如日志行首的无效空格)。
  11. mid()
    • 作用:从字符串的指定起始位置 start 开始,返回接下来 N 个字符组成的子字符串。
    • 示例:mid(“abcdef”, 2, 3) → 从第 2 位(’b’)开始,取 3 个字符,返回 “bcd”。
    • 场景:提取文本中间的特定段(如从 URL 中提取路径部分)。
  12. repeat()
    • 作用:返回由重复指定次数的字符串组成的新字符串。
    • 示例:repeat(“ab”, 3) → 返回 “ababab”。
    • 场景:生成测试用的重复文本,或构造特定格式的字符串(如占位符)。
  1. replace()
    • 作用:搜索字符串中匹配指定模式的部分,并用替换字符串替换这些部分。
    • 示例:replace(“abc123”, “123”, “456”) → 返回 “abc456″。
    • 场景:替换日志中的敏感信息(如 IP、密码),或统一文本格式(如将旧标识替换为新标识)。
  2. right()
    • 作用:返回字符串最右侧指定个数的字符。
    • 示例:right(“abcdef”, 3) → 返回 “def”。
    • 场景:提取文本结尾的关键信息(如日志的状态码后缀)。
  3. rtrim()
    • 作用:从字符串末尾删除指定字符(默认删除空格)。
    • 示例:rtrim(“abc “, ” “) → 返回 “abc”。
    • 场景:清理文本末尾的多余空格 / 符号(如日志行尾的无效空格)。
  4. trim()
    • 作用:从字符串开头和末尾同时删除指定字符(默认删除空格)。
    • 示例:trim(” abc “, ” “) → 返回 “abc”。
    • 场景:标准化文本格式(如清理配置项两端的多余空格)。

按位函数

1. bitand() – 按位与

  • 作用:对两个数的二进制位逐位进行 “与” 运算,规则为 “同 1 为 1,否则为 0”。
  • 示例:bitand(6, 3)
    • 6 的二进制:110;3 的二进制:011。
    • 逐位与运算:110 & 011 = 010(即十进制的2)。
  • 场景:判断二进制标志位是否同时满足多个条件。例如,系统状态寄存器中,某两位分别代表 “服务运行中”(位 1)和 “数据已缓存”(位 2),用bitand(状态值, 0b11)可判断是否同时满足这两个状态。

2. bitshiftl() – 按位左移

  • 作用:将一个数的二进制位整体向左移动指定位数,右侧补0。
  • 示例:bitshiftl(2, 3)
    • 2 的二进制:10;左移 3 位后:10000(即十进制的16)。
  • 场景:处理二进制位的偏移量(如硬件寄存器的位偏移计算),或对计数器类的二进制值进行 “放大” 运算(如将小数值按位左移后匹配硬件编码规则)。

3. bitnot() – 按位非

  • 作用:对一个数的每一位二进制位取反(1变0,0变1)。若为有符号数,结果需结合补码理解(可能出现负数)。
  • 示例:bitnot(2)
    • 2 的 8 位二进制(正数):00000010;取反后:11111101(补码表示为-3)。
  • 场景:反转二进制标志位(如将 “启用” 标志(1)转为 “禁用” 标志(0),或反之)。

4. bitor() – 按位或

  • 作用:对两个数的二进制位逐位进行 “或” 运算,规则为 “有 1 为 1,否则为 0”。
  • 示例:bitor(6, 3)
    • 6 的二进制:110;3 的二进制:011。
    • 逐位或运算:110 | 011 = 111(即十进制的7)。
  • 场景:合并多个二进制标志位。例如,同时设置 “告警触发”(位 1)和 “邮件通知”(位 2)标志,用bitor(原标志, 0b11)实现。

5. bitshiftr() – 按位右移

  • 作用:将一个数的二进制位整体向右移动指定位数,左侧补符号位(正数补0,负数补1)。
  • 示例:bitshiftr(8, 2)
    • 8 的二进制:1000;右移 2 位后:10(即十进制的2)。
  • 场景:缩小二进制数值的规模,或提取高位的标志位(如右移后只保留低几位有效位)。

6. bitxor() – 按位异或

  • 作用:对两个数的二进制位逐位进行 “异或” 运算,规则为 “不同为 1,相同为 0”。
  • 示例:bitxor(6, 3)
    • 6 的二进制:110;3 的二进制:011。
    • 逐位异或运算:110 ^ 011 = 101(即十进制的5)。

数学函数

  1. abs() – 绝对值
    作用:返回数值的非负绝对值。
    示例:abs(-5) → 5;abs(3.14) → 3.14。
    场景:计算 “实际值与目标值的偏差绝对值”(如温度偏差超阈值告警)。
  2. acos() – 反余弦(弧度制)
    作用:返回角度的反余弦值(结果为弧度),是 cos() 的逆运算。
    示例:acos(0) → π/2(约 1.5708 弧度,对应 90°)。
    场景:几何 / 工程计算(如监控系统中受力分析的角度推导)。
  3. asin() – 反正弦(弧度制)
    作用:返回角度的反正弦值(结果为弧度),是 sin() 的逆运算。
    示例:asin(1) → π/2(约 1.5708 弧度,对应 90°)。
    场景:同几何、振动波形等三角函数监控场景。
  4. atan() – 反正切(弧度制)
    作用:返回角度的反正切值(结果为弧度),是 tan() 的逆运算。
    示例:atan(1) → π/4(约 0.7854 弧度,对应 45°)。
    场景:计算斜率、方向角(如网络延迟变化率的角度分析)。
  5. atan2() – 坐标的反正切(弧度制)
    作用:根据横、纵坐标计算反正切值(含象限判断,结果为弧度)。
    示例:atan2(1, 1) → π/4(第一象限 45°);atan2(-1, -1) → -3π/4(第三象限)。
    场景:平面坐标的角度计算(如物体运动方向、信号相位差监控)。
  6. avg() – 周期 T 内的平均值
    作用:计算指定周期 T 内监控值的平均值,最常用统计函数之一。
    示例:avg(5m) → 过去 5 分钟的平均 CPU 负载。
    场景:平滑瞬时波动(如服务器平均响应时间、网络平均流量)。
  7. cbrt() – 立方根
    作用:返回数值的立方根。
    示例:cbrt(8) → 2;cbrt(-27) → -3。
    场景:工程计算(如体积与边长的关系、存储容量的立方根指标)。
  8. ceil() – 向上取整
    作用:返回 “大于等于该数的最小整数”(向上舍入)。
    示例:ceil(2.3) → 3;ceil(-1.5) → -1。
    场景:资源配额计算(如 “至少需要多少台服务器” 的向上取整)。
  9. cos() – 余弦(弧度制)
    作用:返回弧度角度的余弦值。
    示例:cos(0) → 1;cos(π) → -1。
    场景:三角函数监控(如交流电波形、周期性任务相位)。
  10. cosh() – 双曲余弦
    作用:返回双曲余弦值(公式:(eˣ + e⁻ˣ) / 2)。
    示例:cosh(0) → 1;cosh(1) → 约 1.5431。
    场景:工程数学模型(如悬链线形状、物理系统能量计算)。
  11. cot() – 余切(弧度制)
    作用:返回弧度角度的余切值(cot(x) = 1/tan(x))。
    示例:cot(π/4) → 1(因 tan(π/4)=1)。
    场景:机械结构、几何角度的工程监控。
  12. degree() – 弧度转角度
    作用:将弧度值转换为角度值(方便理解三角函数结果)。
    示例:degree(π) → 180(π 弧度对应 180°)。
    场景:将三角函数结果从弧度转为角度(如 “角度超 30° 告警”)。
  13. e() – 自然常数(欧拉数)
    作用:返回自然常数 e(约 2.71828)。
    示例:e() → 2.71828…。
    场景:自然指数模型(如连续复利、指数增长监控)。
  14. exp() – 自然常数的幂
    作用:返回 e 的指定次幂(eˣ)。
    示例:exp(1) → e(约 2.71828);exp(2) → e²(约 7.38906)。
    场景:指数增长 / 衰减监控(如病毒传播、放射性衰变模拟)。
  15. expm1() – 自然常数的幂减 1
    作用:返回 eˣ – 1,对小值计算更精确(避免精度损失)。
    示例:expm1(0.001) → 约 0.0010005(比 exp(0.001)-1 更精确)。
    场景:高精度指数模型(如化学动力学、微小变化的指数响应)。
  16. floor() – 向下取整
    作用:返回 “小于等于该数的最大整数”(向下舍入)。
    示例:floor(2.7) → 2;floor(-1.2) → -2。
    场景:资源分配的下限计算(如 “最多需要多少基础资源” 的向下取整)。
  17. log() – 自然对数
    作用:返回以 e 为底的对数(ln(x))。
    示例:log(e) → 1;log(1) → 0。
    场景:对数刻度监控(如 pH 值、信号强度的对数表示)。
  18. log10() – 常用对数(以 10 为底)
    作用:返回以 10 为底的对数。
    示例:log10(100) → 2;log10(1) → 0。
    场景:十进制对数计算(如分贝值、地震震级监控)。
  19. max() – 周期 T 内的最大值
    作用:返回指定周期 T 内监控值的最大值,最常用统计函数之一。
    示例:max(1h) → 过去 1 小时的 CPU 负载峰值。
    场景:检测峰值(如高峰期最大网络流量、最高 CPU 使用率)。
  20. min() – 周期 T 内的最小值
    作用:返回指定周期 T 内监控值的最小值,最常用统计函数之一。
    示例:min(24h) → 过去 24 小时的内存剩余最小值。
    场景:检测谷值(如夜间最低请求量、最小磁盘 IO)。
  21. mod() – 除法的余数(取模)
    作用:返回两数相除的余数。
    示例:mod(7, 3) → 1;mod(-5, 3) → 1(数学定义下的取模)。
    场景:周期性任务监控(如 “每 5 分钟执行一次,判断当前是否为周期点”)。
  22. pi() – Pi 常数
    作用:返回圆周率 π(约 3.14159)。
    示例:pi() → 3.1415926535…。
    场景:几何计算(如圆周长、面积监控,三角函数基础值)。
  23. power() – 基值的幂
    作用:返回 “基值的指定次幂”(base^exponent)。
    示例:power(2, 3) → 8;power(10, 2) → 100。
    场景:幂运算计算(如面积(边长 ²)、体积(边长 ³)监控)。
  24. radians() – 角度转弧度
    作用:将角度值转换为弧度值(供三角函数计算使用)。
    示例:radians(180) → π(约 3.14159 弧度)。
    场景:将角度输入转为三角函数所需的弧度(如监控系统中角度计算正弦值)。
  25. rand() – 随机整数值
    作用:返回随机整数(范围依实现而定)。
    示例:rand() → 可能返回 15、89 等。
    场景:测试场景(模拟随机数据波动,验证告警规则鲁棒性)。
  26. round() – 四舍五入到小数位
    作用:将数值四舍五入到指定小数位(默认到整数位)。
    示例:round(3.1415, 2) → 3.14;round(2.5) → 3。
    场景:数据格式化(如监控浮点数保留 1 位小数,方便阈值配置)。
  27. signum() – 符号函数
    作用:判断数值符号,负返回 -1、0 返回 0、正返回 1。
    示例:signum(-5) → -1;signum(0) → 0;signum(3.2) → 1。
    场景:判断数值趋势(如流量流入 / 流出、变化量正负)。
  28. sin() – 正弦(弧度制)
    作用:返回弧度角度的正弦值。
    示例:sin(π/2) → 1;sin(π) → 0。
    场景:三角函数监控(如交流电正弦波形、周期性运动位移)。
  29. sinh() – 双曲正弦
    作用:返回双曲正弦值(公式:(eˣ – e⁻ˣ) / 2)。
    示例:sinh(0) → 0;sinh(1) → 约 1.1752。
    场景:工程数学模型(如悬链线、热传导监控)。
  30. sqrt() – 平方根
    作用:返回数值的非负平方根。
    示例:sqrt(16) → 4;sqrt(2) → 约 1.4142。
    场景:几何计算(如正方形边长)、统计(均方根计算)。
  31. sum() – 周期 T 内的值之和
    作用:返回指定周期 T 内监控值的总和,最常用统计函数之一。
    示例:sum(1d) → 过去 1 天的网络流量总和。
    场景:累计值监控(如每日请求总数、每月磁盘写入量)。
  32. tan() – 正切(弧度制)
    作用:返回弧度角度的正切值(tan(x) = sin(x)/cos(x))。
    示例:tan(π/4) → 1;tan(π/2) → 无穷大(Zabbix 中可能返回极大值)。
    场景:工程计算(如斜率、角度的正切值监控)。
  33. truncate() – 数值截断到小数位
    作用:将数值截断(非四舍五入)到指定小数位,其余舍去。
    示例:truncate(3.1415, 2) → 3.14;truncate(3.999, 1) → 3.9。
    场景:数据格式化(强制保留小数位,用于精确阈值比较)。

日期和时间函数

1. date() – 当前日期

  • 作用:返回当前日期,格式为 YYYY-MM-DD(如 2025-09-16)。
  • 示例:date() → 返回字符串 “2025-09-16″。
  • 场景:
    • 结合触发器判断 “是否在特定日期触发告警”(如每月 1 日检查备份状态)。
    • 告警信息中插入当前日期(如 {TRIGGER.NAME} 触发于 {date()})。

2. dayofmonth() – 当前是本月的第几天

  • 作用:返回当前日期在 “本月的第几天”(取值范围 1~31)。
  • 示例:若今天是 2025-09-16,则 dayofmonth() → 返回整数 16。
  • 场景:
    • 触发 “每月 1 日执行磁盘清理” 的告警逻辑。
    • 监控 “月末(如每月最后 3 天)的系统负载是否异常”。

3. dayofweek() – 当前是本周的第几天

  • 作用:返回当前日期在 “本周的第几天”(取值范围 1~7,周日为 7,周一为 1,依此类推)。
  • 示例:若今天是周二(2025-09-16 是周二),则 dayofweek() → 返回整数 2。
  • 场景:
    • 触发 “工作日(周一到周五)的业务高峰告警”,过滤周末干扰。
    • 监控 “周末(周六、周日)的资源使用率是否过低”。

4. now() – UNIX 时间

  • 作用:返回当前时间的 UNIX 时间戳(从 1970-01-01 00:00:00 UTC 起的秒数)。
  • 示例:若当前时间为 2025-09-16 10:30:00,则 now() → 返回整数 1752724200(实际值依时间而定)。
  • 场景:
    • 计算 “监控项数据的时间差”(如 {item.last(0)} + 3600 < now() 表示 “数据已过期 1 小时”)。
    • 时间戳相关的阈值判断(如 “任务执行超时(超过 30 分钟)”)。

5. time() – 当前时间

  • 作用:返回当前时间,格式为 HH:MM:SS(如 10:30:45)。
  • 示例:time() → 返回字符串 “10:30:45″。
  • 场景:
    • 触发 “特定时段(如 00:00-06:00 夜间)的告警”,避免白天干扰。
    • 告警信息中插入当前时间(如 {TRIGGER.NAME} 触发于 {time()})。

聚合函数

  1. avg() – 周期 T 内的平均值
    • 作用:计算指定周期T内监控值的算术平均值,是最常用的统计聚合函数之一。
    • 示例:avg(5m) → 计算过去 5 分钟内监控项数值的平均值。
    • 场景:平滑瞬时波动,反映趋势(如服务器 5 分钟平均 CPU 负载、网络平均流量)。
  2. count() – 周期 T 内满足条件的数量
    • 作用:统计周期T内 “成功检索到且满足运算符O条件” 的监控值数量。
    • 示例:count(10m,>80) → 统计过去 10 分钟内数值大于 80 的次数。
    • 场景:过滤偶发异常,多次触发才告警(如 “10 分钟内 CPU 负载> 80 的情况出现≥3 次”)。
  3. countunique() – 唯一值的个数
    • 作用:统计周期T内监控值的唯一值数量(去重后计数)。
    • 示例:countunique(1h) → 统计 1 小时内不同的 HTTP 状态码数量。
    • 场景:监控 “服务返回的状态码种类是否异常增多”(如正常仅200,若出现404/500则唯一值变多)。
  4. kurtosis() – 测量概率分布的 “尾度”
    • 作用:衡量数据分布的峰态(值越大,尾部越厚,极端值越多)。
    • 示例:kurtosis(1d) → 分析 1 天内响应时间分布的峰态。
    • 场景:检测 “是否出现大量极端值”(如响应时间既有极快又有极慢的情况,尾部变厚)。
  5. mad() – 中值绝对偏差
    • 作用:先算数据的中位数,再求每个数据与中位数的绝对偏差的平均值(对异常值更鲁棒)。
    • 示例:mad(1h) → 计算 1 小时内监控值相对于其中位数的平均绝对偏差。
    • 场景:存在异常值时,替代标准差衡量数据波动(如服务器响应时间有少量极端值时,mad更准确)。
  6. max() – 周期 T 内的最大值
    • 作用:返回周期T内监控值的最大值,是最常用的统计聚合函数之一。
    • 示例:max(1h) → 取过去 1 小时内的最大内存使用率。
    • 场景:检测峰值(如高峰期 CPU 负载峰值、网络流量峰值)。
  7. min() – 周期 T 内的最小值
    • 作用:返回周期T内监控值的最小值,是最常用的统计聚合函数之一。
    • 示例:min(24h) → 取过去 24 小时内的最小磁盘剩余空间。
    • 场景:检测谷值(如夜间最低请求量、最小内存空闲率)。
  8. skewness() – 测量概率分布的不对称性
    • 作用:衡量数据分布的偏度(值为正→右偏,值为负→左偏)。
    • 示例:skewness(1d) → 分析 1 天内请求延迟分布的偏斜方向。
    • 场景:检测 “数据分布是否偏离对称”(如响应时间右偏,说明存在较多慢请求)。
  9. stddevpop() – 群体标准差
    • 作用:计算周期T内所有数据的总体标准差(分母为n),反映数据离散程度。
    • 示例:stddevpop(1h) → 计算 1 小时内所有监控值的总体标准差。
    • 场景:能获取 “全部数据” 时,衡量整体波动(如已知所有服务器的响应时间,计算总体标准差)。
  10. stddevsamp() – 样本标准差
    • 作用:计算周期T内数据的样本标准差(分母为n-1),反映样本离散程度。
    • 示例:stddevsamp(1h) → 计算 1 小时内抽样监控值的样本标准差。
    • 场景:仅能获取 “部分样本” 时,估计整体波动(如从多台服务器中抽样,计算样本标准差)。
  11. sum() – 周期 T 内的值之和
    • 作用:返回周期T内监控值的总和,是最常用的统计聚合函数之一。
    • 示例:sum(1d) → 取过去 1 天内的网络流量总和。
    • 场景:累计值监控(如每日请求总数、每月磁盘写入量)。
  12. sumofsquares() – 平方和
    • 作用:计算周期T内所有监控值的平方之和()。
    • 示例:sumofsquares(1h) → 计算 1 小时内各监控值的平方和。
    • 场景:统计分析(如计算方差的中间步骤、特定数学模型输入)。
  1. varpop() – 总体方差
    • 作用:计算周期T内所有数据的总体方差(标准差的平方,分母为n),反映总体离散程度。
    • 示例:varpop(1h) → 计算 1 小时内所有监控值的总体方差。
    • 场景:同stddevpop,能获取全体数据时,衡量整体波动的平方(方差是方差分析的基础)。
  2. varsamp() – 样本方差
    • 作用:计算周期T内数据的样本方差(标准差的平方,分母为n-1),反映样本离散程度。
    • 示例:varsamp(1h) → 计算 1 小时内抽样监控值的样本方差。
    • 场景:同stddevsamp,仅能获取样本时,估计整体波动的平方。

运算符函数

1. between() – 范围判断函数

  • 作用:检查监控项的数值是否落在指定的数值范围内,返回 1(在范围内)或 0(不在范围内)。
  • 语法:between(数值, 最小值, 最大值)
  • 示例:
    • 若监控项返回值为 50,则 between(50, 0, 100) → 返回 1(50 在 0~100 范围内)。
    • 若监控项返回值为 120,则 between(120, 0, 100) → 返回 0(120 不在 0~100 范围内)。
  • 场景:
    • 监控 “CPU 使用率是否在正常区间(如 20%~80%)”,超出则告警。
    • 检测 “网络延迟是否在合理范围(如 0~200ms)”。

2. in() – 枚举值匹配函数

  • 作用:检查监控项的数值是否等于列出的多个值中的任意一个,返回 1(匹配)或 0(不匹配)。
  • 语法:in(数值, 值1, 值2, …, 值N)
  • 示例:
    • 若监控项返回值为 200,则 in(200, 200, 404, 500) → 返回 1(200 是列出的值之一)。
    • 若监控项返回值为 403,则 in(403, 200, 404, 500) → 返回 0(403 不在列出的值中)。
  • 场景:
    • 监控 “HTTP 状态码是否为异常码(如 404、500)”,匹配则告警。
    • 检测 “服务状态是否为故障状态(如error、down)”。

预测函数

1. forecast() – 趋势预测函数

  • 作用:基于指定周期 T 内的历史数据,预测未来 t 秒后监控项的数值。
  • 原理:通过分析周期 T 内数据的趋势(如增长、下降、波动规律),拟合出趋势模型,进而推断未来 t 秒的数值。
  • 语法:forecast(周期T, 预测时长t)
  • 示例:
    • 若想基于过去 1h(周期 T=1h)的磁盘使用率数据,预测 3600s(1 小时)后的值,表达式为 forecast(1h, 3600)。
    • 若预测结果超过阈值(如 “预测 1 小时后磁盘使用率> 95%”),则触发告警。
  • 场景:
    • 资源耗尽预警(如磁盘、内存即将占满,提前几小时 / 几天告警)。
    • 业务增长预测(如请求量持续增长,预测何时达到系统上限)。

2. timeleft() – 剩余时间预测函数

  • 作用:基于指定周期 T 内的历史数据,估计达到指定阈值还剩余的时间(单位:秒)。
  • 原理:分析周期 T 内数据的变化速率(如磁盘使用率的增长速度),结合当前值与阈值的差距,计算达到阈值的剩余时间。
  • 语法:timeleft(周期T, 阈值)
  • 示例:
    • 若磁盘当前使用率 80%,阈值 95%,基于过去 1h(周期 T=1h)的增长趋势,表达式 timeleft(1h, 95) 会返回 “预计还需 X 秒达到 95%”。
    • 若返回值 < 3600(1 小时),则触发 “1 小时内磁盘将爆满” 的告警。
  • 场景:
    • 关键资源的 “倒计时告警”(如磁盘剩余空间不足,提前 1 小时预警)。
    • 业务指标接近上限的预警(如连接数即将打满,提前 30 分钟通知)。

常用函数

一、基础数据获取与统计函数(核心高频)

1. last(sec|#num, <time_shift>) – 获取指定时序值

  • 作用:获取监控项的 “倒数第 N 个值” 或 “历史时间偏移值”,是实时告警的基础。
  • 语法:{<实体>:<键值>.last(范围[, 时间偏移])}
    • 范围:sec(时间秒数,如300=5 分钟内最新值)或#num(倒数序号,如#2= 倒数第二个值);
    • 时间偏移:如1d(昨天此时)、1h(1 小时前),用于历史同期对比。
  • 支持类型:float、int、str、text、log
  • 示例:
    # 最新CPU负载>3(实时告警)
    {web:system.cpu.load[avg1].last()}>3
    
    # 昨天此时的CPU负载>0.7(历史对比)
    {web:system.cpu.load[avg1].last(,1d)}>0.7
    
    # /etc/passwd文件校验值变化(文件篡改检测)
    {web:vfs.file.cksum[/etc/passwd].last(#1)}<>{web:vfs.file.cksum[/etc/passwd].last(#2)}
    
  • 注意:#num超过实际采集数时返回NULL,需结合nodata()判断。

2. count(sec|#num, 阈值, 操作符[, 时间偏移]) – 统计满足条件的数量

  • 作用:统计 “指定范围” 内满足条件的监控值个数,用于过滤偶发波动(如 “多次触发才告警”)。
  • 语法:{<实体>:<键值>.count(范围, 阈值, 操作符[, 时间偏移])}
    • 范围:sec(时间秒数)或#num(最近 N 个值);
    • 操作符:eq(等于)、ne(不等于)、gt(大于)、like(文本包含)等。
  • 支持类型:float、int、str、text、log
  • 示例:
    # 最近3次ping中有≥2次延时>50ms(减少误报)
    {server:pingsec[target].count(#3,50,gt)}>=2
    
    # 10分钟内日志含"ERROR"的次数≥3(错误频发告警)
    {web:log.nginx.error.count(10m,"ERROR",like)}>=3
    
    # 最近5分钟主机不可达次数>5(持续离线)
    {server:icmpping.count(300,0,eq)}>5
    
  • 注意:文本匹配必须用like,数值比较用gt/lt等。

3. avg(sec|#num[, 时间偏移]) – 计算平均值

  • 作用:计算 “指定范围” 内的算术平均值,平滑瞬时波动(如 “1 小时平均负载”)。
  • 语法:{<实体>:<键值>.avg(范围[, 时间偏移])}
  • 支持类型:float、int(仅数值型)
  • 示例:
    # 过去1小时平均CPU负载>1.0(持续过载)
    {web:system.cpu.load[avg1].avg(1h)}>1.0
    
    # 昨天此时10分钟内平均内存使用率>85%(历史对比)
    {db:vm.memory.util[used].avg(10m,1d)}>85
    

4. min(sec|#num[, 时间偏移]) / max(sec|#num[, 时间偏移]) – 极值获取

  • 作用:分别获取 “指定范围” 内的最小值 / 最大值,检测谷值 / 峰值异常。
  • 语法:{<实体>:<键值>.min(范围[, 时间偏移])} / max(…)
  • 支持类型:float、int(仅数值型)
  • 示例:
    # 过去5分钟可用内存最小值<1GB(内存不足预警)
    {app:vm.memory.size[available].min(5m)}<1024
    
    # 30分钟内CPU使用率最大值>90%(峰值过载)
    {web:system.cpu.util[user].max(30m)}>90
    

5. sum(sec|#num[, 时间偏移]) – 计算总和

  • 作用:计算 “指定范围” 内的累计值,用于统计流量、请求数等累加型指标。
  • 语法:{<实体>:<键值>.sum(范围[, 时间偏移])}
  • 支持类型:float、int(仅数值型,建议用于累加项)
  • 示例:
    # 1小时内网络总入流量>1GB(累计超限)
    {web:net.if.in[eth0].sum(1h)}>1073741824  # 1GB=1073741824字节
    
    # 今日(0点至今)请求总数>100万
    {api:web.requests.sum(today(),now())}>1000000
    

6. nodata(sec[, strict]) – 检测无数据

  • 作用:检测 “过去 sec 秒内” 是否无数据,用于判断 Agent 离线、服务无响应。
  • 语法:{<实体>:<键值>.nodata(时间秒数[, strict])}
    • strict(可选):严格模式,数据不连续也视为无数据。
  • 支持类型:所有类型
  • 示例:
    # 5分钟内无ping数据(主机离线)
    {server:icmpping.nodata(300)}=1
    
    # 10分钟内日志数据不连续(采集异常)
    {web:log.nginx.error.nodata(600,strict)}=1
    

7. diff(sec|#num) – 检测值是否变化

  • 作用:检测 “指定范围” 内值是否变化,返回1(有变化)或0(无变化),监控静态值(如配置文件)。
  • 语法:{<实体>:<键值>.diff(范围)}
  • 支持类型:float、int、str、text
  • 示例:
    # 5分钟内配置文件校验值无变化(正常),若=0则告警(未更新)
    {web:vfs.file.cksum[/etc/nginx.conf].diff(300)}=0
    

二、高级趋势与预测函数(前瞻性监控)

1. 趋势函数(基于预聚合的 Trend 数据)

  • 作用:基于 Zabbix 每小时预聚合的 “趋势数据”(平均值、最大值等),适合长周期统计(如 1 周、1 个月),性能优于原始数据计算。
  • 函数列表:
    函数名 功能 示例(过去 1 周)
    trendavg 趋势平均值 trendavg(604800)(1 周平均)
    trendmax 趋势最大值 trendmax(604800,1d)(上周最大)
    trendmin 趋势最小值 trendmin(604800)(1 周最小)
    trendcount 趋势记录数 trendcount(604800)(1 周记录数)
    trendsum 趋势总和 trendsum(2592000)(30 天总和)
  • 支持类型:float、int
  • 示例:
    # 过去30天磁盘剩余空间的趋势最小值<5GB(长期预警)
    {db:vfs.fs.size[/data,free].trendmin(2592000)}<5368709120
    

2. timeleft(item_expr, threshold[, func]) – 剩余时间预测

  • 作用:基于历史趋势预测 “达到阈值的剩余时间”(秒),实现前瞻性预警(如 “磁盘 1 小时内爆满”)。
  • 语法:timeleft(监控项表达式, 阈值[, 函数])
    • 函数:avg(默认,基于平均值趋势)、max(基于最大值趋势)。
  • 支持类型:float、int(需有稳定趋势)
  • 示例:
    # 预测CPU使用率达100%的剩余时间<30秒(紧急预警)
    timeleft({web:system.cpu.util[user]}, 100)<30
    
    # 基于最大值趋势,预测磁盘使用率达95%的时间<1小时
    timeleft({db:vfs.fs.util[/data,used]}, 95, max)<3600
    

3. predict_linear(sec, threshold) – 线性趋势预测

  • 作用:基于 “过去 sec 秒的线性趋势” 预测达到阈值的时间,适合稳定增长 / 下降指标(如内存泄漏)。
  • 语法:{<实体>:<键值>.predict_linear(时间范围, 阈值)}
  • 支持类型:float、int
  • 示例:
    # 基于2小时线性趋势,预测内存使用率达100%的时间<30分钟
    {app:vm.memory.util[used].predict_linear(2h, 100)}<1800
    

三、速率与变化量函数(计数器 / 动态值监控)

1. rate(sec|#num[, mode]) – 计算计数器速率

  • 作用:针对单调递增计数器(如流量、请求数),计算每秒平均变化速率,解决计数器溢出问题。
  • 语法:{<实体>:<键值>.rate(范围[, mode])}
    • mode=1:允许负值(适用于可能减少的计数器),默认非负。
  • 支持类型:float、int(仅计数器型监控项)
  • 示例:
    # 1分钟内网卡入流量速率>10Mbps(10Mbps=1250000 B/s)
    {web:net.if.in[eth0].rate(1m)}>1250000
    
    # 最近5个值的QPS>1000(每秒请求数)
    {api:web.requests.rate(#5)}>1000
    

2. change(sec|#num) – 计算数值变化量

  • 作用:计算 “指定范围第一个值与最后一个值的差值”,反映总变化量(可正可负)。
  • 语法:{<实体>:<键值>.change(范围)}
  • 支持类型:float、int
  • 示例:
    # 10分钟内内存使用量增加>1GB(内存泄漏)
    {app:vm.memory.size[used].change(10m)}>1073741824
    
    # 最近3个值中磁盘剩余空间减少>5GB(异常占用)
    {db:vfs.fs.size[/data,free].change(#3)}<-5368709120
    

3. prev() – 获取上一个值

  • 作用:等价于last(#2),简化 “与上一个值对比” 的场景。
  • 语法:{<实体>:<键值>.prev()}
  • 示例:
    # 最新CPU负载是上一个值的2倍以上(突发增长)
    {web:system.cpu.load[avg1].last()} > {web:system.cpu.load[avg1].prev()} * 2
    

四、字符串与文本处理函数(日志 / 文本监控)

1. strlen() – 计算字符串长度

  • 作用:返回文本型监控项的字符长度,检测日志是否为空、配置是否篡改。
  • 语法:{<实体>:<键值>.strlen()}
  • 支持类型:str、text、log
  • 示例:
    # 应用日志最新内容长度=0(日志停止输出,服务可能挂死)
    {app:log.app.error.strlen()}=0
    

2. concat(str1, str2, …) – 拼接字符串

  • 作用:拼接多个字符串 / 监控值,用于组合多维度信息(如告警信息)。
  • 语法:concat(值1, 值2, …)
  • 支持类型:str、text(数值自动转为字符串)
  • 示例:
    # 告警信息拼接:"HTTP状态: down 时间: 2025-09-21"
    concat("HTTP状态: ", {web:net.tcp.service[http].last()}, " 时间: ", {web:date.last()})
    

3. regexp(str, pattern) – 正则匹配

  • 作用:检查字符串是否匹配正则,返回1(匹配)或0(不匹配),比find()更灵活。
  • 语法:regexp(字符串, “正则表达式”)
  • 支持类型:str、text
  • 示例:
    # 日志含”ERROR [0-9]{3}”(如ERROR 500) regexp({app:log.app.error.last()}, “ERROR [0-9]{3}”)=1 # IP地址格式非法(简单校验) regexp({net:device.ip.last()}, “^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$”)=0

五、时间辅助函数

today() – 获取今日 0 点时间戳

  • 作用:返回 “今天 00:00:00 的 UNIX 时间戳”,用于统计今日累计值。
  • 示例:
    # 今日网络总流量>100GB
    {web:net.if.in[eth0].sum(today(), now())}>107374182400
    

六、函数选择指南(按场景)

监控场景 推荐函数
实时告警(最新值) last()
过滤偶发波动 count()(多次触发才告警)
平滑瞬时波动 avg()
峰值 / 谷值检测 max() / min()
累计值统计(流量 / 请求) sum()、rate()(速率)
主机 / 服务离线 nodata()、icmpping+last()
配置文件篡改 last(#1)!=last(#2)、diff()
日志关键字监控 find()、regexp()、strlen()
长期趋势分析(1 周 +) 趋势函数(trendavg/trendmax等)
资源耗尽预警 timeleft()(灵活趋势)、predict_linear()(线性趋势)
通过以上函数,可覆盖从 “实时监控” 到 “前瞻性预警” 的全场景需求,结合运算符(and/or/not等)和时间单位简化(m/h/d),能配置出精准、高效的触发器。

 

6.常见问题

1.脚本/命令执行时间问题

zabbix默认限制命令或脚本执行时间不能超过
修改 服务端和客户端 Timeout选项

[root@web01 ~]$ cat /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=conf.shadow,sudo wc -l /etc/shadow|cut -d ” ” -f1
UserParameter=sleep,sleep 20

[root@zabbix ~]$ zabbix_get -s web01 -k sleep
ZBX_NOTSUPPORTED: Timeout while executing a shell script. (ZBX_NOTSUPPORTED执行 shell 脚本

解决方案

[root@zabbix ~]$ grep ‘Timeout’ /etc/zabbix/zabbix_agent2.conf
### Option: Timeout
# Spend no more than Timeout seconds on processing
# Timeout=3
### Option:PluginTimeout
# Timeout for connections with external plugins.
# PluginTimeout=

修改

 

作者 dmxsp

发表回复

您的电子邮箱地址不会被公开。