Prometheus: monitorimi HTTP përmes Blackbox eksportuesit

Pershëndetje të gjithëve. Në maj, OTUS do të nisë prakrikumi për monitorimin dhe regjistrimin, si të infrastrukturës ashtu edhe të aplikacioneve duke përdorur Zabbix, Prometheus, Grafana dhe ELK. Në këtë kuadër, tradicionalisht ndajmë materiale të dobishme për temën.

Ekspeditori Blackbox për Prometheus lejon zbatimin e monitorimit të shërbimeve të jashtme përmes HTTP, HTTPS, DNS, TCP, ICMP. Në këtë artikull, do të tregoj si të konfigurosh monitorimin HTTP/HTTPS me ndihmën e ekspeditorit Blackbox. Do ta lançojmë ekspeditorin Blackbox në Kubernetes.

Mjedisi

Na nevojitet kjo e ardhshme:

  • Kubernetes
  • Prometheus Operator

Konfigurojmë ekspeditorin blackbox

Konfigurojmë Blackbox përmes ConfigMap për konfiguro http modulin e monitorimit të shërbimeve në ueb.

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

Moduli http_2xx përdoret për të verifikuar që shërbimi në web kthen kodin e statusit HTTP 2xx. Më shumë për konfigurimin e ekspeditorit blackbox është përshkruar në dokumentacion.

Futja e ekspeditorit blackbox në Kubernetes cluster

Përshkruani Deployment dhe Shërbimi për implementimin në Kubernetes.

---
kind: Shërbim
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

Mund të vendosni eksportuesin Blackbox me komandën e mëposhtme. Hapësira emri monitorimi i përket Prometheus Operator.

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

Sigurohuni që të gjitha shërbimet janë duke funksionuar, duke përdorur komandën e mëposhtme:

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

Kontrolli i Blackbox

Mund të aksesoni ndërfaqen e uebit të eksportuesit Blackbox me port-forward:

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

Lidhuni me ndërfaqen e uebit të eksportuesit Blackbox përmes shfletuesit tuaj në adresën localhost:9115.

Prometheus: monitorimi HTTP përmes Blackbox eksportuesit

Nëse shkoni në adresën http://localhost:9115/probe?module=http_2xx&target=https://www.google.com, do të shihni rezultatin e kontrollit të URL-së së dhënë (https://www.google.com).

Prometheus: monitorimi HTTP përmes Blackbox eksportuesit

Vlera e metrikës probe_success e barabartë me 1 do të thotë kontroll i suksesshëm. Vlera 0 tregon për një gabim.

Konfigurimi i Prometheus

Pas vendosjes së eksportuesit BlackBox, e configurojmë Prometheus në 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 # Eksportuesi blackbox.

Po gjenerojmë Secret, duke përdorur komandën e mëposhtme.

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

Tregojmë additional-scrape-configs për Prometheus Operator, duke përdorur additionalScrapeConfigs.

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

Hyr në ndërfaqen e uebit të Prometheus, kontrollo metrikat dhe objektet.

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

Prometheus: monitorimi HTTP përmes Blackbox eksportuesit

Prometheus: monitorimi HTTP përmes Blackbox eksportuesit

Shikojmë metrikat dhe objektet e Blackbox.

Shtimi i rregullave për njoftime (alert)

Për të marrë njoftime nga eksportuesi Blackbox, do të shtojmë rregulla në Prometheus Operator.

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: "Prova e dështuar (instance {{ $labels.instance }})"
        description: "Prova e dĂ«shtuarn  VLERË = {{ $value }}n  ETIKETA: {{ $labels }}"
    - alert: SlowProbe
      expr: avg_over_time(probe_duration_seconds[1m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Prova e ngadalshme (instance {{ $labels.instance }})"
        description: "Prova e Blackbox mori mĂ« shumĂ« se 1s pĂ«r tĂ« pĂ«rfunduar n  VLERË = {{ $value }}n  ETIKETA: {{ $labels }}"
    - alert: HttpStatusCode
      expr: probe_http_status_code = 400
      for: 5m
      labels:
        severity: error
      annotations:
        summary: "Kodi i Statusit HTTP (instance {{ $labels.instance }})"
        description: "Kodi i statusit HTTP nuk Ă«shtĂ« 200-399 n  VLERË = {{ $value }}n  ETIKETA: {{ $labels }}"
    - alert: SslCertificateWillExpireSoon
      expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 30
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Certifikata SSL do të skadojë së shpejti (instance {{ $labels.instance }})"
        description: "Certifikata SSL skadon nĂ« 30 ditĂ« n  VLERË = {{ $value }}n  ETIKETA: {{ $labels }}"
    - alert: SslCertificateHasExpired
      expr: probe_ssl_earliest_cert_expiry - time()  1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Kërkesat e ngadalshme HTTP (instance {{ $labels.instance }})"
        description: "KĂ«rkesa HTTP mori mĂ« shumĂ« se 1s n  VLERË = {{ $value }}n  ETIKETA: {{ $labels }}"
    - alert: SlowPing
      expr: avg_over_time(probe_icmp_duration_seconds[1m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Ping i ngadalshëm (instance {{ $labels.instance }})"
        description: "Ping i Blackbox mori mĂ« shumĂ« se 1s n  VLERË = {{ $value }}n  ETIKETA: {{ $labels }}

Në ndërfaqen e përdoruesit Prometheus, shkoni te Status => Rregullat dhe gjeni rregullat e njoftimit për blackbox-exporter.

Prometheus: monitorimi HTTP përmes Blackbox eksportuesit

Konfigurimi i njoftimeve për skadimin e certifikatave SSL të Kubernetes API Server.

Le të konfigurojmë monitorimin e skadimit të certifikatave SSL të Kubernetes API Server. Ai do të dërgojë njoftime një herë në javë.

Po shtojmë modulin Blackbox eksportues për Autentifikimin e Kubernetes API Server.

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

Po shtojmë konfigurimin e scrape-it për Prometheus.

- 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 # Eksportuesi blackbox.

Aplikoni Prometheus Secret.

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

Shtoni rregullat e njoftimit.

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 certifikata do të skadojë pas tre muajsh (instance {{ $labels.instance }})"
        description: "Kubernetes API Server SSL certifikata skadon në 90 ditën  Vlera = {{ $value }}n  Etiketat: {{ $labels }}"

Linqe të dobishme

Monitorimi dhe regjistrimi në Docker

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster