如何在Zabbix中追踪日期?证书到期监控方案求助
监控证书到期日期的可行方案
核心思路:统一用Epoch时间做对比
Zabbix的now()返回的是Unix时间戳(Epoch),所以把证书到期时间和当前时间都转成Epoch后做差值计算,是最能避免日期格式解析坑的方案。
1. 提取证书到期时间为Epoch值(推荐)
- 写Shell脚本提取证书到期时间并转成时间戳,以PEM格式证书为例:
#!/bin/bash CERT_PATH=$1 openssl x509 -in "$CERT_PATH" -noout -enddate | cut -d= -f2 | date +%s
- 在Zabbix Agent的
zabbix_agentd.conf中添加自定义参数:
UserParameter=cert.expiry[*],/path/to/your/script.sh $1
- 创建Item:类型选「Zabbix agent(主动式)」或「被动式」,键值填
cert.expiry[/path/to/app_cert.pem],Item会直接返回证书到期的Epoch时间。
2. 编写Trigger告警表达式
直接通过到期时间与当前时间的差值判断,比如提前30天触发告警:
{your_host:cert.expiry[/path/to/app_cert.pem].last()} - now() < 86400*30
注:86400是一天的秒数,30代表30天,可根据需求调整阈值。
3. 若已存储日期字符串格式的Item
如果Item存的是2024-12-31 23:59:59这类日期字符串,用strptime()转成Epoch再对比:
strptime({your_host:cert.expiry.date.last()}, "%Y-%m-%d %H:%M:%S") - now() < 86400*30
注意:格式串必须和Item中的日期格式完全匹配,比如日期是Dec 31 23:59:59 2024 GMT,格式串要写成"%b %d %H:%M:%S %Y %Z",否则会解析失败。
4. 批量监控证书(低级别发现LLD)
如果要监控大量证书,用Zabbix的低级别发现自动生成Item:
- 写脚本遍历证书目录,输出JSON格式结果:
#!/bin/bash CERT_DIR="/path/to/certs" echo '{"data":[' FIRST=1 for cert in "$CERT_DIR"/*.pem; do if [ $FIRST -ne 1 ]; then echo ','; fi FIRST=0 echo -n '{"{#CERTNAME}":"'$(basename "$cert")'","{#CERTPATH}":"'$cert'"}' done echo ']}'
- 创建LLD规则,键值用自定义的UserParameter(比如
cert.discovery),再基于LLD宏批量创建到期时间Item,关联通用Trigger模板实现批量监控。
内容的提问来源于stack exchange,提问作者Alex1__1
相关产品推荐
相关产品推荐

