使用Prometheus和Grafana监控SSL / TLS证书到期

在本教程中,您将学习如何使用Prometheus和Grafana监视SSL / TLS证书的有效期。好吧,假设您已经了解了 SSL / TLS证书过期的含义,我们将讨论如何监控SSL / TLS证书以避免遇到此类问题。

使用Prometheus和Grafana监控SSL / TLS证书到期

请注意,在此设置中,我们使用单个节点托管Telegraf(以轮询证书统计信息),Prometheus和Grafana。

安装和设置Grafana

您可以使用下面的任何指南或任何其他指南来安装和设置Grafana。

在Debian 10上安装最新的Grafana

在CentOS 8上安装最新的Grafana

安装和设置Prometheus服务器

同样,您可以使用下面的任何指南或任何其他指南来安装和设置Prometheus

在Ubuntu 20.04上安装和设置Prometheus

在CentOS 8上安装和配置Prometheus

在Debian 10上安装Prometheus

安装和设置Telegraf

Telegraf 是一个插件驱动的服务器代理,用于从数据库,系统和IoT传感器收集和发送指标和事件。

Telegraf通过其x509_cert插件提供了有关X509证书的统计信息,可通过本地文件或网络连接进行访问。这样的统计数据可以发送到Prometheus,然后可以使用Grafana可视化。

在安装Telegraf之前,请确保已正确设置时间。 Telegraf使用UTC中主机的本地时间为数据分配时间戳。使用网络时间协议(NTP)同步主机之间的时间; 如果主机的时钟未与NTP同步,则数据上的时间戳可能不准确。

在我们的设置中,我们使用的是Debian系统,因此您可以按照以下方式安装Telegraf;

wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
apt update
apt install telegraf

配置Telegraf

Telegraf安装并运行后,对其进行配置,以使Prometheus能够从中抓取指标。

vim
# # Configuration for the Prometheus client to spawn
 [[outputs.prometheus_client]]
#   ## Address to listen on
   listen = "192.168.59.12:9273"
   metric_version = 2

接下来,将Telegraf配置为轮询SSL证书度量标准,可以是本地文件,也可以是通过网络连接。

# # Reads metrics from a SSL certificate
 [[inputs.x509_cert]]
#   ## List certificate sources
#   sources = ["/etc/ssl/certs/ssl-cert-snakeoil.pem", "tcp://example.org:443"]
   sources = ["https://kifarunix-demo.com:443"]
   insecure_skip_verify = true

您可以通过注释禁用默认输入插件:cpu,disk,diskio,内核,mem,进程,交换和系统。

保存并退出配置文件。

x509证书输入插件指标包括;

  • x509_cert
    • 标签:
      • 来源–证书来源
      • 组织
      • 组织单元
      • 国家
      • 地方性
      • 确认
      • 序列号
      • signature_algorithm
      • public_key_algorithm
      • issuer_common_name
      • issuer_serial_number
      • SAN
    • 领域:
      • 验证码(int)
      • 验证错误(字符串)
      • 到期时间(整数,秒)
      • 年龄(整数,秒)
      • 开始日期(整数,秒)
      • 结束日期(整数,秒)

重新启动Telegraf;

systemctl restart telegraf

将Telegraf Target添加到Prometheus

为了使Prometheus能够抓取Telegraf收集的SSL证书指标,请打开 prometheus.yml 配置并添加目标像;

  - job_name: 'SSL/TLS Certs'
    static_configs:
    - targets: ['192.168.59.12:9273']

请参阅下面的我的配置文件。

vim /etc/prometheus/prometheus.yml
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']

  - job_name: 'SSL/TLS Certs'
    static_configs:
    - targets: ['192.168.59.12:9273']

保存并退出文件;

重新启动Prometheus;

systemctl restart prometheus

验证Prometheus Target的状态

您可以检查Prometheus telegraf目标的状态。

另外,请检查Prometheus查询中的 x509* 指标。

使用Prometheus和Grafana监控SSL / TLS证书到期

运行 x509_cert_expiry 查询并过滤掉一些指标。这是我们使用的到期查询, x509_cert_expiry{san!=""},它会过滤掉任何不包含的指标 san 价值。

使用Prometheus和Grafana监控SSL / TLS证书到期

将Prometheus与Grafana集成以进行监控

现在,您可以通过将Prometheus数据源添加到Grafana中来将Prometheus与Grafana集成。检查下面的链接;

将Prometheus与Grafana集成以进行监控

数据源,一旦添加了Prometheus数据源。

使用Prometheus和Grafana监控SSL / TLS证书到期

使用Prometheus和Grafana监控SSL / TLS证书到期

将Prometheus与Grafana集成后,您现在可以继续配置Prometheus,以轮询服务器证书指标并将其发送给Grafana进行可视化。

创建SSL证书过期仪表板。

在左侧菜单面板上,点击 +(加号)>仪表板>添加空白面板

样本模拟仪表板;

使用Prometheus和Grafana监控SSL / TLS证书到期

完成设置后,保存仪表盘。

使用Prometheus和Grafana监控SSL / TLS证书到期

这是上面我的仪表板的示例JSON文件;

{
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": "-- Grafana --",
        "enable": true,
        "hide": true,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "Annotations & Alerts",
        "type": "dashboard"
      }
    ]
  },
  "editable": true,
  "gnetId": null,
  "graphTooltip": 0,
  "id": 2,
  "links": [],
  "panels": [
    {
      "datasource": null,
      "description": "",
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "custom": {
            "align": "left",
            "filterable": false
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          }
        },
        "overrides": [
          {
            "matcher": {
              "id": "byName",
              "options": "Value #A"
            },
            "properties": [
              {
                "id": "unit",
                "value": "dtdurations"
              },
              {
                "id": "decimals",
                "value": 2
              },
              {
                "id": "custom.displayMode",
                "value": "color-background"
              },
              {
                "id": "displayName",
                "value": "Expiry Date"
              },
              {
                "id": "thresholds",
                "value": {
                  "mode": "absolute",
                  "steps": [
                    {
                      "color": "red",
                      "value": null
                    },
                    {
                      "color": "semi-dark-orange",
                      "value": 864000
                    },
                    {
                      "color": "green",
                      "value": 2592000
                    }
                  ]
                }
              }
            ]
          }
        ]
      },
      "gridPos": {
        "h": 5,
        "w": 11,
        "x": 0,
        "y": 0
      },
      "id": 2,
      "options": {
        "frameIndex": 1,
        "showHeader": true
      },
      "pluginVersion": "7.5.2",
      "targets": [
        {
          "exemplar": true,
          "expr": "x509_cert_expiry{san!=""}",
          "format": "table",
          "instant": true,
          "interval": "",
          "legendFormat": "",
          "refId": "A"
        }
      ],
      "title": "SSL/TLS Certificate Expiry Status",
      "transformations": [
        {
          "id": "merge",
          "options": {}
        },
        {
          "id": "organize",
          "options": {
            "excludeByName": {
              "__name__": true,
              "common_name": false,
              "host": true,
              "instance": true,
              "issuer_common_name": true,
              "job": true,
              "public_key_algorithm": true,
              "san": true,
              "serial_number": true,
              "signature_algorithm": true,
              "verification": true,
              "verification_error": true
            },
            "indexByName": {},
            "renameByName": {}
          }
        }
      ],
      "type": "table"
    }
  ],
  "schemaVersion": 27,
  "style": "dark",
  "tags": [],
  "templating": {
    "list": []
  },
  "time": {
    "from": "now-6h",
    "to": "now"
  },
  "timepicker": {},
  "timezone": "",
  "title": "SSL/TLS Certificate Expiry Status",
  "uid": "nRouqJ_Gk",
  "version": 1
}

这就是您可以使用Prometheus和Grafana轻松监视SSL / TLS证书到期的方法。

对于任何改进,请在评论部分中放置。

Sidebar