acme-companion证书监控:Prometheus指标与Grafana可视化
你是否曾因SSL证书过期导致服务中断?acme-companion作为nginx-proxy的自动化证书管理工具,虽能自动管理证书生命周期,但缺乏直观的监控手段可能导致潜在风险。本文将介绍如何通过Prometheus指标与Grafana可视化构建完整的证书监控体系,实现证书状态实时监控、过期预警及历史趋势分析。
监控必要性与挑战
SSL证书过期会直接导致用户访问中断、搜索引擎降权等严重后果。acme-companion默认提供证书自动续期功能,但在实际运维中仍面临以下挑战:
- 续期失败无主动通知机制
- 证书状态需通过命令行手动查询
- 缺乏历史趋势分析能力
通过Prometheus与Grafana构建监控系统,可实现证书生命周期全流程可视化管理,提前识别潜在风险。
系统架构与组件
acme-companion证书监控系统由三大核心组件构成:
- 数据采集层:通过自定义脚本提取acme-companion证书状态数据
- 存储分析层:Prometheus负责时序数据存储与指标计算
- 可视化层:Grafana提供多维度数据展示与告警配置
核心组件说明
- acme-companion:项目主页,自动管理SSL证书生命周期
- Prometheus:开源时序数据库,专注于指标收集与存储
- Grafana:开源可视化平台,支持丰富的图表类型与告警规则
实施步骤
1. 证书状态指标暴露
acme-companion未原生支持Prometheus指标输出,需通过自定义脚本实现指标提取。创建cert_status_exporter.sh脚本定期采集证书状态:
#!/bin/bash
# 证书过期时间检查脚本示例
CERTS_DIR="/etc/nginx/certs"
for cert in $(find $CERTS_DIR -name "*.crt"); do
DOMAIN=$(basename $cert .crt)
EXPIRY_DATE=$(openssl x509 -in $cert -noout -enddate | cut -d= -f2)
EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)
EXPIRES_IN_SECONDS=$((EXPIRY_TIMESTAMP - CURRENT_TIMESTAMP))
echo "ssl_cert_expiry_seconds{domain=\"$DOMAIN\"} $EXPIRES_IN_SECONDS"
done
2. Prometheus配置
创建Prometheus配置文件prometheus.yml,添加证书指标采集任务:
scrape_configs:
- job_name: 'acme-certificates'
static_configs:
- targets: ['localhost:9100'] # Node Exporter地址
metrics_path: '/metrics'
params:
module: ['acme_cert']
3. Grafana可视化配置
启动Grafana容器并配置数据源:
$ docker run --detach \
--name grafana \
--env "VIRTUAL_HOST=grafana.yourdomain.tld" \
--env "VIRTUAL_PORT=3000" \
--env "LETSENCRYPT_HOST=grafana.yourdomain.tld" \
grafana/grafana
导入证书监控仪表板模板,关键指标包括:
- 证书剩余有效期(天)
- 证书续期成功率
- 域名证书分布统计
关键监控指标
证书状态指标
| 指标名称 | 类型 | 描述 |
|---|---|---|
| ssl_cert_expiry_days | Gauge | 证书剩余有效天数 |
| ssl_cert_renewal_success | Counter | 证书续期成功次数 |
| ssl_cert_renewal_failure | Counter | 证书续期失败次数 |
告警阈值建议
- 严重告警:证书剩余有效期 < 7天
- 警告告警:证书剩余有效期 < 30天
- 信息告警:续期失败次数 > 3次
高级配置与最佳实践
多环境监控
对于包含开发、测试、生产的多环境部署,建议通过Prometheus标签实现环境隔离:
scrape_configs:
- job_name: 'acme-certificates'
static_configs:
- targets: ['prod-acme:9100']
labels:
environment: 'production'
- targets: ['test-acme:9100']
labels:
environment: 'testing'
数据持久化
确保Prometheus与Grafana数据持久化存储,避免监控数据丢失:
# Prometheus数据持久化示例
docker run -d \
-v /path/to/prometheus/data:/prometheus \
prom/prometheus
总结与展望
通过本文介绍的方法,可构建完整的acme-companion证书监控体系,实现从被动运维到主动监控的转变。关键价值点包括:
- 提前识别证书过期风险
- 减少人工巡检成本
- 建立证书生命周期可观测性
未来可进一步扩展监控能力:
- 集成企业微信/钉钉告警通知
- 开发acme-companion原生Prometheus exporter
- 构建证书健康评分系统
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




