最近发现个可以将证书有效期可视化展示的 Grafana Dashboard, 体验了一下还不错。配置简单,聚合了多个站点证书有效期,序列号,签发者等信息,一目明了,水篇博客分享给大家。
SSL Exporter
众所周知,Prometheus 和 Grafana 是没法直接获取证书信息的,需要结合一些 Exporter 将信息转换成数据指标给到 Prometheus 后,再通过 PromQL 查询,最在 Grafana 报表中展示。这里就需要用到大佬开发的 ssl_exporter。
ssl-exporter
可以从多个渠道获取SSL证书:
- TCP: 自动嗅探是什么协议,然后获取证书。看了一下源码,支持
smtp
ftp
,imap
,postgres
,pop3
。 - HTTPS:这就是HTTPS站点的证书了。
- FILE: 从
ssl-exporter
本地的文件中获取证书。 - HTTP FILE:通过一个 url 获取证书文件。
- k8s:从k8s
kubernetes.io/tls
类型的secrets
中获取证书。 - KubeConfig:从指定的 kubeconfig 文件中获取证书。
获取 SSL 证书后,会将其转换成具体的指标(具体看官方README)。
同时项目中也提供了仪表盘配置,导入 Grafana 就可以使用。
下面介绍一下具体操作。
配置
直接使用docker-compose
快速启动。
- 文件
docker-compose.yml
services:
ssl-exporter:
image: 'ribbybibby/ssl-exporter:latest'
container_name: ssl-exporter
restart: always
prometheus:
image: 'prom/prometheus:latest'
restart: always
container_name: prometheus
ports:
- '19090:9090'
volumes:
- './prometheus.yml:/etc/prometheus/prometheus.yml'
- './promwal:/prometheus'
grafana:
image: grafana/grafana:latest
container_name: grafana
volumes:
- './grafana/data:/var/lib/grafana'
ports:
- '3000:3000'
restart: always
文件
./prometheus.yml
这里示例了
https
和tcp
的模式,改下targets
中的域名:端口
就好了,如下我写了一些示例站点。如果需要从 k8s等其他的服务中获取证书,可按照官方文档示例配置。
scrape_configs:
- job_name: "https"
metrics_path: /probe
params:
module: ["https"] # <-----
static_configs:
- targets:
- razeen.me:443
- bing.com:443
- expired.badssl.com:443
- revoked.badssl.com:443
- untrusted-root.badssl.com:443
- self-signed.badssl.com:443
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: ssl-exporter:9219
- job_name: "startssl"
metrics_path: /probe
static_configs:
- targets:
- smtp.qq.com:587
- smtp.office365.com:587
- smtp.163.com:587
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: ssl-exporter:9219 # SSL exporter.
docker-compose up -d
启动后,稍等会,就可以在prometheus
Status > Targets
中看到都UP
了。
访问 Grafana,初始化的用户名密码都是admin
。 第一次登陆会引导更新密码。
- 在
Connections > Add new connection
中搜索的prometheus
, 点击添加; - 输入
Name
和URL
, 我们都在一个 docker 网络内,直接用标签加端口就能连接了, 即http://prometheus:9090
接下来导入仪表盘就好了。
- 到
Dashboards
中导入,选择Import a dashboard
- 复制 dashboard.json 粘贴并
Load
, 然后在Import
到这里就可以看到博客开头的那个仪表盘了。
总结
通过这个仪表盘,将站点的证书信息方便的进行聚合展示,如果出现了到期,一眼就能看到。同时,如果有需要的话,可以通过到期时间的指标来设置告警规则,做到证书的到期通知。
但,也有一些不足,我加了一些已经吊销的证书,和自签发的站点,这里没法去区别出来,不能依靠其做很专业的监控。要专业的管理与监控可以试试 CertCloud。