Prometheus ve Grafana ile SSL/TLS Sertifikasının Geçerliliğini Takip Edin

Bu eğitimde Prometheus ve Grafana ile SSL/TLS sertifikasının geçerlilik süresinin nasıl izleneceğini öğreneceksiniz.  Süresi dolmuş bir SSL/TLS sertifikasının sonuçlarının zaten farkında olduğunuzu varsayarak, bu tür sorunlarla karşılaşmamak için SSL/TLS sertifikalarının nasıl izleneceğini tartışacağız.

Prometheus ve Grafana ile SSL/TLS Sertifikasının Geçerliliğini İzleme

Bu kurulumda Telegraf (sertifika istatistiklerini sorgulamak için), Prometheus ve Grafana’yı barındıran tek bir düğüm kullandığımızı unutmayın.

Grafana’yı kurun ve ayarlayın

Kurulumun önceden yapılmış olması gerekir

 

Prometheus Sunucusunu Kurun ve Ayarlayın

Kurulumun önceden yapılmış olması gerekir

 

Telegraf’ı yükleyin ve kurun

Telegraf, veritabanlarından, sistemlerden ve IoT sensörlerinden ölçümleri ve olayları toplamak ve göndermek için kullanılan eklenti odaklı bir sunucu aracısıdır.

 

Telegraf, yerel dosya veya ağ bağlantısı üzerinden erişilebilen X509 sertifikasına ilişkin istatistikler sağlayan x509_cert eklentisi aracılığıyla.  Bu tür istatistikler Prometheus’a gönderilebilir ve burada Grafana kullanılarak görselleştirilebilir.

Telegraf’ı kurmadan önce saatin doğru ayarlandığından emin olun.  Telegraf, verilere zaman damgaları atamak için bir ana bilgisayarın UTC’deki yerel saatini kullanır.  Ana bilgisayarlar arasında zamanı senkronize etmek için Ağ Zaman Protokolünü (NTP) kullanın;  ana bilgisayarların saatleri NTP ile senkronize değilse verilerdeki zaman damgaları hatalı olabilir.

Kurulumumuzda Debian sistemi kullanıyoruz, dolayısıyla Telegraf’ı aşağıdaki gibi kurabilirsiniz;

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’ı Yapılandırma

Telegraf kurulup çalıştırıldığında, Prometheus’un ondan metrikleri çıkarmasını sağlayacak şekilde yapılandırın;

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

Ardından Telegraf’ı, yerel dosyadan veya ağ bağlantısından SSL sertifikası ölçümlerini yoklayacak şekilde yapılandırın.

# # 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

Varsayılan giriş eklentilerini devre dışı bırakabilirsiniz: cpu, disk, diskio, çekirdek, mem, işlemler, takas ve sistem, yorum yaparak.

Yapılandırma dosyasını kaydedin ve çıkın.

x509 sertifikası giriş eklentisi ölçümleri şunları içerir;

  • x509_cert
    • tags:
      • source – source of the certificate
      • organization
      • organizational_unit
      • country
      • province
      • locality
      • verification
      • serial_number
      • signature_algorithm
      • public_key_algorithm
      • issuer_common_name
      • issuer_serial_number
      • san
    • fields:
      • verification_code (int)
      • verification_error (string)
      • expiry (int, seconds)
      • age (int, seconds)
      • startdate (int, seconds)
      • enddate (int, seconds)

Telegraf’ı yeniden başlatın;

systemctl restart telegraf

Prometheus’a Telegraf Hedefi Ekle

Prometheus’un Telegraf tarafından toplanan SSL sertifika metriklerini kazıyabilmesi için prometheus.yml yapılandırmasını açın ve hedefi şu şekilde ekleyin;

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

Aşağıdaki yapılandırma dosyama bakın.

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']

Dosyayı kaydedin ve çıkın;

Prometheus’u yeniden başlatın;

systemctl restart prometheus

Prometheus Hedefinin durumunu doğrulayın

Prometheus telgraf hedefinin durumunu kontrol edebilirsiniz;

Ayrıca x509* ölçümleri için Prometheus sorgularını kontrol edin.

x509_cert_expiry sorgusunu çalıştırma ve bazı ölçümleri filtreleme.  Bu, san değeri içermeyen tüm ölçümleri filtreleyen, kullandığımız x509_cert_expiry{san!=””} süre sonu sorgusudur.

İzleme İçin Prometheus’u Grafana ile Entegre Edin

Artık Prometheus veri kaynağını Grafana’ya ekleyerek Prometheus’u Grafana ile entegre edebilirsiniz.  Aşağıdaki bağlantıyı kontrol edin;

İzleme İçin Prometheus’u Grafana ile Entegre Edin

Veri kaynakları, Prometheus veri kaynağını ekledikten sonra.

Using Prometheus and Grafana to Monitor SSL/TLS Certificate Expiry

Prometheus’u Grafana ile entegre ettikten sonra artık Prometheus’u sunucularınızın sertifika ölçümlerini yoklayacak ve bunları görselleştirme için Grafana’ya gönderecek şekilde yapılandırmaya devam edebilirsiniz.

SSL Sertifikası Sona Erme Kontrol Paneli oluşturun.

Sol menü panelinde + (artı işareti) > Kontrol Paneli > Boş panel ekle’ye tıklayın.

Örnek  Kontrol Paneli;

Ayarlama işlemini tamamladıktan sonra kontrol panelini kaydedin.

Yukarıdaki kontrol panelimin örnek JSON dosyasını burada bulabilirsiniz;

{
  "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
}

 

Yazının orijinalini burada bulabilirsiniz.