Zabbix运维
自编脚本实现zabbix监控域名证书过期
Zabbix Server单机性能优化
本文档使用 MrDoc 发布
-
+
home page
自编脚本实现zabbix监控域名证书过期
## 脚本实现原理 Zabbix默认是没有监控项监控添加了SSL证书的https域名的,需要自定义脚本实现 需要在被监控的linux主机上指定一个目录用来存放脚本,个人存放路径为:`/zabbix/utils/sslDateKey`,请根据情况自行修改。 个人建议把脚本和配置文件全部放到zabbix-server端进行监控。 ## 域名发现服务 (该脚本是使用python编写) 首先需要编写脚本实现域名配置文件读取和发现,脚本内容如下: ```python #!/usr/bin/env python #coding:utf-8 import os import sys import json #这个函数主要是构造出一个特定格式的字典,用于zabbix def ssl_cert_discovery(): web_list=[] web_dict={"data":None} with open("/zabbix/utils/sslDateKey/ssl_cert_domain.conf","r") as f: for sslcert in f: dict={} dict["{#DOMAINNAME}"]=sslcert.strip().split()[0] dict["{#PORT}"]=sslcert.strip().split()[1] web_list.append(dict) web_dict["data"]=web_list jsonStr = json.dumps(web_dict,indent=4) return jsonStr if __name__ == "__main__": print ssl_cert_discovery() ``` ## 证书过期检查 (该脚本通过shell编写) ``` #!/bin/bash host=$1 port=$2 end_date=`/usr/bin/openssl s_client -servername $host -host $host -port $port -showcerts </dev/null 2>/dev/null | sed -n '/BEGIN CERTIFICATE/,/END CERT/p' | /usr/bin/openssl x509 -text 2>/dev/null | sed -n 's/ *Not After : *//p'` # openssl 检验和验证SSL证书。 # -servername $host 因一台主机存在多个证书,利用SNI特性检查 # </dev/null 定向标准输入,防止交互式程序。从/dev/null 读时,直接读出0 。 # sed -n 和p 一起使用,仅显示匹配到的部分。 //,// 区间匹配。 # openssl x509 -text 解码证书信息,包含证书的有效期。 if [ -n "$end_date" ] then end_date_seconds=`date '+%s' --date "$end_date"` now_seconds=`date '+%s'` echo "($end_date_seconds-$now_seconds)/24/3600" | bc fi ``` ## 配置文件 创建一个文件名为ssl_cert_domain.conf的配置文件 然后在配置文件中添加域名加端口,每行一个 > 要求配置文件必须没有空行,按如下要求填写 域名 端口号 示例如下: ```shell [root@zabbix-server sslDateKey]# cat ssl_cert_domain.conf wiki.netimed.cn 443 www.netimed.cn 443 ``` 编写添加完毕后,需要在被控机本机的zabbix_agentd.conf配置文件中添加如下配置 ``` UserParameter=sslcert.discovery[*],/usr/bin/python /zabbix/utils/sslDateKey/sslcert_discovery.py UserParameter=sslcert.info[*],/bin/bash /zabbix/utils/sslDateKey/check-cert-expire.sh $1 $2 ``` 配置完毕后需要重启zabbix agent。 ## zabbix页面配置 先创建一个模板 ![](/media/202107/2021-07-05_111101.png) 在自动发现规则下新建规则,其中类型根据自己实际情况改动,一般为"zabbix 客户端",键值必须和本文保持一致:`sslcert.discovery` ![](/media/202107/2021-07-05_111257.png) 在监控项原型中的键值需要和本文保持一致,其他可自定义或根据实际情况修改,一般保持默认 ![](/media/202304/2023-04-12_174033_1512630.3007764758845899.png) 在触发器类型中更加自身需要填写: 表达式需要自行添加:(这里表示当过期时间不足30天时触发告警) `{Template SSL CA certificate:sslcert.info[{#DOMAINNAME},{#PORT}].last(#1)}<=30` ![](/media/202107/2021-07-05_111931.png) 全部配置完毕后,稍等一会,在zabbix的首页,点"检测"-"最新数据"-选择"zabbix server"主机,过滤应用集为"SSL Certificate",应用集在监控项中选填或查看 最后会成功显示过期天数,并会在设定值时触发告警 ![](/media/202107/2021-07-05_112913.png) ![](/media/202107/2021-07-05_112955.png)
Nathan
April 12, 2023, 5:40 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password