博客/社区

我们如何通过与Grafana和Prometheus设置警报来消除“证书过期”中的服务中断

2020年11月25日5分钟

在Grafanabob电竞频道实验室,我们很幸运能与世界各地的许多合作伙伴合作。从这些合作关系中,我们从一些聪明的用例中获得了很大的灵感,这些用例告诉我们如何使用Grafana和Prometheus对服务监控和可用性产生很大的影响。我们偶然发现了我们的合作伙伴OpenAdvice为他们的客户群提出的这个用例,我们认为这太好了,不能保密!说再见吧,花无尽的时间调试一个关键指标缺失的服务可用性问题,几个小时后才发现这都是由于一个端点上的证书过期造成的——最糟糕的是,发现这可以很容易地避免!我们很高兴向您介绍Malte,告诉您如何为自己实现这个解决方案!


嗨!我叫马尔特,我是OpenAdvice在德国。我们为客户提供开源以及商业监控解决方案。bob彩票中奖计划在这两种情况下,我们都使用Grafana作为仪表板,因此与Grafana实验室合作为DACH区域提供Grafana Enterprise是一个合乎逻辑的步骤。bob电竞频道

大多数客户都有一个共同点:在某个时刻,过期的证书会导致问题。理论上,他们不应该这样做;确切的过期日期是已知的,更新的过程也是已知的。但是问题仍然存在!

在这篇博客文章中,我们提出了一个简单而有效的解决方案:用普罗米修斯想象一下Grafana的特性新的表可视化在Grafana 7。

这就是它的外观,您的所有证书一目了然:证书到期前的剩余时间、HTTP响应消息和连接指标。

导出和抓取指标

幸运的是有一个存在黑箱出口国我们可以使用它,它提供了我们收集数据所需的一切,所以它是一个“低代码”实现。我们只需要注意配置,幸运的是,我们不需要构建自己的导出器!

blackbox导出器用于监视HTTP(S)页面。通过监视[host:port]组合,我们可以获取SSL证书信息,并从中自动捕获到期日期,并使用' probe_ssl_早期est_cert_expiry '指标计算剩余时间。

黑匣子导出器的配置非常简单,由两个配置组成:

  1. blackbox.yml简单地配置以下模块来导出度量。
模块说明:http_2xx: prober: HTTP HTTP: preferred_ip_protocol: "ip4" tls_config: insecure_skip_verify: true
  1. 然后更新你的普罗米修斯服务器抓取目标,为黑匣子出口商添加一个抓取工作prometheus.yml并收集度量。
—job_name: 'blackbox' metrics_path: /probe params: module: [http_2xx] static_configs:—targets:—https://websrv01.openadvice.de - https://www.openadvice.de - https://oa-win2016-oa.int.openadvice.de - https://portal.openadvice.de - https://xwiki.int.openadvice.de relabel_configs:—source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement::9115 # Blackbox出口商抓取地址

您可以在这些配置中看到,我们正在从许多HTTPS端点及其相关证书中获取指标。随着服务的增长,添加更多的目标和监控更多的url非常简单,这可以在您的供应管道中实现自动化!

把它们都放在一个面板上

现在我们有了我们的度量标准,我们可以在Grafana中快速地可视化它。我们在Grafana 7中创建了一个新的表格面板,在一个面板中显示所有相关的指标。

我们将解释每一个步骤,但我们也上传了一个带有这个表的仪表板,作为开源Grafana仪表板回购的示例:仪表盘ID: 13230.请随意导入、探索和修改它,使其成为您自己的!

普罗米修斯的几个问题……

在本例中,我们保持了简单的查询。

剩余时间:

probe_ssl_earliest_cert_expiry-time ()

HTTP状态码:

probe_http_status_code

所有HTTP持续时间查询:

probe_http_duration_seconds{阶段= "解决"}

probe_http_duration_seconds{阶段= "连接"}

probe_http_duration_seconds{阶段= " tls "}

probe_http_duration_seconds{阶段= "处理"}

probe_http_duration_seconds{阶段= "转移"}

一两次转变……

我们还利用了Grafana 7的新“Transform”特性:使用外连接在“instance”字段上,将所有查询的结果显示在一行上。

组织领域Transform还用于筛选面板中显示的列。

一些系列重写了……

表格可视化中我们最喜欢的新特性之一是每列的“单元格显示模式”选项。我们为“证书过期”和“HTTP代码”列选择了明亮的背景色。连接性能列中的“LCD Gauge”提供了清晰度,但也有很酷的复古外观。:)

报警

在上面的小节中,我们为我们的HTTPS连接构建了一个闪亮的表面板。它在视觉上很有冲击力,但由于我们并不总是查看仪表板,所以当证书即将过期时,我们仍然需要一个通知。为此,我们在Prometheus配置文件中定义了以下警告:

—name: ssl_expiry rules:—alert: Ssl Cert Will Expire in 30 days expr: probe_ssl_earest_cert_expiry - time() < 86400 * 30 for: 5m labels: severity: warning注解:summary: " Ssl certificate Will Expire soon on (instance {{$labels. exe) "实例}})"描述:"SSL证书30天后到期\n VALUE = {{$ VALUE}}\n LABELS: {{$ LABELS}}"

当然,你可以很容易地修改警报到另一个天数;你只需要调整表达式行的结尾,例如,10天:

Expr: probe_ssl_attempest_cert_expiry - time() < 86400 * 10

不要忘记相应地调整警报名称和描述。:)在不利的情况下,发送一个警告通知,证书已经过期。看到Alertmanager配置有关频道的列表,您可以发送警报和通知!

Expr: probe_ssl_attempest_cert_expiry - time() < 0

结论

监视与Prometheus和Grafana的证书和连接对于任何通过HTTPS提供服务的人来说都是必须的。

在早期的Grafana版本中也可以做类似的事情,但是现在有了Grafana 7的特性,我们可以把所有东西都放在一个紧凑的表中,而不会在视觉上使仪表板超载,而且证书/连接问题一眼就能看出来!

关于这篇博客文章的任何问题,进一步的想法,或者如果您在集成方面需要帮助,请随时联系我们:

OpenAdvice网站

LinkedIn上的OpenAdvice

技术联系人@OpenAdvice:马尔特•格林

销售联系人@OpenAdvice:珍妮特福斯特