Prometheus: HTTP monitorinqi Blackbox ixracatçı vasitəsilə

Salam hər kəs. May ayında OTUS monitorinq və loglaşma praktikumunu başlayır, həm infrastruktur, həm də tətbiqlərin Zabbix, Prometheus, Grafana və ELK ilə nəzarət edilməsi üçün. Bu səbəbdən, adətən, mövzu üzrə faydalı materialları paylaşırıq.

Blackbox ixracatçısı Prometheus üçün xarici xidmətlərin HTTP, HTTPS, DNS, TCP, ICMP vasitəsilə monitorinqini həyata keçirmək imkanı verir. Bu məqalədə sizə Blackbox ixracatçısı ilə HTTP/HTTPS monitorinqini necə qurmağı göstərəcəyəm. Blackbox ixracatçısını Kubernetes-də işlədəcəyik.

Mühit

Bizə aşağıdakı şeylər lazım olacaq:

  • Kubernetes
  • Prometheus Operator

Blackbox ixracatçısının konfiqurasiyası

Blackbox-ı ConfigMap üzərindən konfiqurasiya edirik http veb xidmətlərin monitorinqi üçün modul.

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-blackbox-exporter
  labels:
    app: prometheus-blackbox-exporter
data:
  blackbox.yaml: |
    modules:
      http_2xx:
        http:
          no_follow_redirects: false
          preferred_ip_protocol: ip4
          valid_http_versions:
          - HTTP/1.1
          - HTTP/2
          valid_status_codes: []
        prober: http
        timeout: 5s

Modul http_2xx veb xidmətin HTTP 2xx status kodunu qaytardığını yoxlamaq üçün istifadə olunur. Blackbox ixracatçısının konfiqurasiyası haqqında daha ətraflı məlumat sənəd.

Kubernetes klasterində blackbox ixracatçısının yerləşdirilməsi

Təsvir edin DeploymentService Kubernetes-də yerləşdirmək üçün.

---
kind: Service
apiVersion: v1
metadata:
  name: prometheus-blackbox-exporter
  labels:
    app: prometheus-blackbox-exporter
spec:
  type: ClusterIP
  ports:
    - name: http
      port: 9115
      protocol: TCP
  selector:
    app: prometheus-blackbox-exporter

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-blackbox-exporter
  labels:
    app: prometheus-blackbox-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus-blackbox-exporter
  template:
    metadata:
      labels:
        app: prometheus-blackbox-exporter
    spec:
      restartPolicy: Always
      containers:
        - name: blackbox-exporter
          image: "prom/blackbox-exporter:v0.15.1"
          imagePullPolicy: IfNotPresent
          securityContext:
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            runAsUser: 1000
          args:
            - "--config.file=/config/blackbox.yaml"
          resources:
            {}
          ports:
            - containerPort: 9115
              name: http
          livenessProbe:
            httpGet:
              path: /health
              port: http
          readinessProbe:
            httpGet:
              path: /health
              port: http
          volumeMounts:
            - mountPath: /config
              name: config
        - name: configmap-reload
          image: "jimmidyson/configmap-reload:v0.2.2"
          imagePullPolicy: "IfNotPresent"
          securityContext:
            runAsNonRoot: true
            runAsUser: 65534
          args:
            - --volume-dir=/etc/config
            - --webhook-url=http://localhost:9115/-/reload
          resources:
            {}
          volumeMounts:
            - mountPath: /etc/config
              name: config
              readOnly: true
      volumes:
        - name: config
          configMap:
            name: prometheus-blackbox-exporter

Blackbox ixracatçısını aşağıdakı əmrlə yerləşdirmək olar. Ad məkan monitoring Prometheus Operator-a aiddir.

kubectl --namespace=monitoring apply -f blackbox-exporter.yaml

Bütün xidmətlərin başladığını yoxlayın, aşağıdakı əmrdən istifadə edin:

kubectl --namespace=monitoring get all --selector=app=prometheus-blackbox-exporter

Blackbox yoxlaması

Blackbox ixracatçısının veb interfeysinə daxil ola bilərsiniz port-forward:

kubectl --namespace=monitoring port-forward svc/prometheus-blackbox-exporter 9115:9115

Blackbox ixracatçısının veb interfeysinə veb brauzer vasitəsilə qoşulun localhost:9115.

Prometheus: HTTP monitorinqi Blackbox ixracatçı vasitəsilə

Əgər http://localhost:9115/probe?module=http_2xx&target=https://www.google.comünvanına keçsəniz, müəyyən edilmiş URL-nin yoxlama nəticələrini görəcəksiniz (https://www.google.com).

Prometheus: HTTP monitorinqi Blackbox ixracatçı vasitəsilə

Metrikanın mənası probe_success 1 dəyəri uğurlu yoxlamanı bildirir. 0 dəyəri isə xətanı göstərir.

Prometheus-un konfiqurasiyası

BlackBox ixracçısını yerləşdirdikdən sonra, Prometheus-u aşağıdakılarda konfiqurasiya edirik prometheus-additional.yaml.

- job_name: 'kube-api-blackbox'
  scrape_interval: 1w
  metrics_path: /probe
  params:
    module: [http_2xx]
  static_configs:
   - targets:
      - https://www.google.com
      - http://www.example.com
      - https://prometheus.io
  relabel_configs:
   - source_labels: [__address__]
     target_label: __param_target
   - source_labels: [__param_target]
     target_label: instance
   - target_label: __address__
     replacement: prometheus-blackbox-exporter:9115 # Blackbox ixracçısı.

İstehsal edirik Gizli, aşağıdakı əmrdən istifadə edərək.

PROMETHEUS_ADD_CONFIG=$(cat prometheus-additional.yaml | base64)
cat << EOF | kubectl --namespace=monitoring apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: additional-scrape-configs
type: Opaque
data:
  prometheus-additional.yaml: $PROMETHEUS_ADD_CONFIG
EOF

Göstəririk additional-scrape-configs Prometheus Operator üçün, istifadə edərək additionalScrapeConfigs.

kubectl --namespace=monitoring edit prometheuses k8s
...
spec:
  additionalScrapeConfigs:
    key: prometheus-additional.yaml
    name: additional-scrape-configs

Prometheus-un veb interfeysinə daxil olun, metrikaları və hədəfləri yoxlayın.

kubectl --namespace=monitoring port-forward svc/prometheus-k8s 9090:9090

Prometheus: HTTP monitorinqi Blackbox ixracatçı vasitəsilə

Prometheus: HTTP monitorinqi Blackbox ixracatçı vasitəsilə

Blackbox metrikalarını və hədəflərini görürük.

Bildirişlər (alert) üçün qaydaların əlavə edilməsi

Blackbox ixracçısından bildirişlər almaq üçün Prometheus Operator-a qaydalar əlavə edək.

kubectl --namespace=monitoring edit prometheusrules prometheus-k8s-rules
...
  - name: blackbox-exporter
    rules:
    - alert: ProbeFailed
      expr: probe_success == 0
      for: 5m
      labels:
        severity: error
      annotations:
        summary: "Yoxlama uğursuz oldu (instance {{ $labels.instance }})"
        description: "Yoxlama uğursuz oldu
  DƏYƏR = {{ $value }}
  ETİKETLƏR: {{ $labels }}"
    - alert: SlowProbe
      expr: avg_over_time(probe_duration_seconds[1m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Yavaş yoxlama (instance {{ $labels.instance }})"
        description: "Blackbox yoxlaması 1 s-dən çox vaxt götürdü
  DƏYƏR = {{ $value }}
  ETİKETLƏR: {{ $labels }}"
    - alert: HttpStatusCode
      expr: probe_http_status_code = 400
      for: 5m
      labels:
        severity: error
      annotations:
        summary: "HTTP Status Kodu (instance {{ $labels.instance }})"
        description: "HTTP status kodu 200-399 deyil
  DƏYƏR = {{ $value }}
  ETİKETLƏR: {{ $labels }}"
    - alert: SslCertificateWillExpireSoon
      expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 30
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "SSL sertifikatı tezliklə etibarsız olacaq (instance {{ $labels.instance }})"
        description: "SSL sertifikatı 30 gündən sonra etibarsız olur
  DƏYƏR = {{ $value }}
  ETİKETLƏR: {{ $labels }}"
    - alert: SslCertificateHasExpired
      expr: probe_ssl_earliest_cert_expiry - time()  1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "HTTP yavaş istəkləri (instance {{ $labels.instance }})"
        description: "HTTP istəyi 1 s-dən çox vaxt götürdü
  DƏYƏR = {{ $value }}
  ETİKETLƏR: {{ $labels }}"
    - alert: SlowPing
      expr: avg_over_time(probe_icmp_duration_seconds[1m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Yavaş ping (instance {{ $labels.instance }})"
        description: "Blackbox ping 1 s-dən çox vaxt götürdü
  DƏYƏR = {{ $value }}
  ETİKETLƏR: {{ $labels }}"

Prometheus-un veb interfeysində Status => Qaydalar bölməsinə keçin və blackbox-exporter üçün bildiriş qaydalarını tapın.

Prometheus: HTTP monitorinqi Blackbox ixracatçı vasitəsilə

Kubernetes API Server üçün SSL sertifikatlarının müddətinin bitməsi bildirişlərini konfiqurasiya edin

Gəlin Kubernetes API Server SSL sertifikatlarının müddətinin bitməsi üçün monitorinq quraq. O, həftədə bir dəfə bildiriş göndərəcək.

Kubernetes API Server Authentication üçün Blackbox eksportedini əlavə edirik.

kubectl --namespace=monitoring edit configmap prometheus-blackbox-exporter
...
      kube-api:
        http:
          method: GET
          no_follow_redirects: false
          preferred_ip_protocol: ip4
          tls_config:
            insecure_skip_verify: false
            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
          valid_http_versions:
          - HTTP/1.1
          - HTTP/2
          valid_status_codes: []
        prober: http
        timeout: 5s

Prometheus üçün scrape konfiqurasiyasını əlavə edirik.

- job_name: 'kube-api-blackbox'
  metrics_path: /probe
  params:
    module: [kube-api]
  static_configs:
   - targets:
      - https://kubernetes.default.svc/api
  relabel_configs:
   - source_labels: [__address__]
     target_label: __param_target
   - source_labels: [__param_target]
     target_label: instance
   - target_label: __address__
     replacement: prometheus-blackbox-exporter:9115 # Blackbox exporteri.

Prometheus Secret tətbiq edirik.

PROMETHEUS_ADD_CONFIG=$(cat prometheus-additional.yaml | base64)
cat << EOF | kubectl --namespace=monitoring apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: additional-scrape-configs
type: Opaque
data:
  prometheus-additional.yaml: $PROMETHEUS_ADD_CONFIG
EOF

Bildiriş qaydalarını əlavə edirik.

kubectl --namespace=monitoring edit prometheusrules prometheus-k8s-rules
...
  - name: k8s-api-server-cert-expiry
    rules:
    - alert: K8sAPIServerSSLCertExpiringAfterThreeMonths
      expr: probe_ssl_earliest_cert_expiry{job="kube-api-blackbox"} - time() < 86400 * 90 
      for: 1w
      labels:
        severity: warning
      annotations:
        summary: "Kubernetes API Server SSL sertifikatı üç ay sonra müddəti başa çatacaq (instance {{ $labels.instance }})"
        description: "Kubernetes API Server SSL sertifikatı 90 gün ərzində başa çatacaqn  DƏYƏR = {{ $value }}n  ETİKETLƏR: {{ $labels }}"

Faydalı bağlantılar

Docker-da monitorinq və loqlaşdırma

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster