Prometheus: بلیک باکس برآمد کنندہ کے ذریعے HTTP نگرانی

سب کو سلام. مئی میں OTUS کا آغاز ہوتا ہے۔ نگرانی اور لاگنگ پر ورکشاپZabbix، Prometheus، Grafana اور ELK کا استعمال کرتے ہوئے انفراسٹرکچر اور ایپلیکیشنز دونوں۔ اس سلسلے میں، ہم روایتی طور پر اس موضوع پر مفید مواد شیئر کرتے ہیں۔

بلیک باکس برآمد کنندہ for Prometheus آپ کو HTTP، HTTPS، DNS، TCP، ICMP کے ذریعے بیرونی خدمات کی نگرانی کو نافذ کرنے کی اجازت دیتا ہے۔ اس آرٹیکل میں، میں آپ کو دکھاؤں گا کہ بلیک باکس ایکسپورٹر کا استعمال کرتے ہوئے HTTP/HTTPS مانیٹرنگ کیسے ترتیب دی جائے۔ ہم بلیک باکس برآمد کنندہ کوبرنیٹس میں شروع کریں گے۔

ماحولیات

ہمیں مندرجہ ذیل کی ضرورت ہوگی:

  • Kubernetes
  • پرومیتھیس آپریٹر

ایکسپورٹر بلیک باکس کنفیگریشن

بلیک باکس کے ذریعے ترتیب دینا ConfigMap ترتیبات کے لیے http ویب سروسز مانیٹرنگ ماڈیول۔

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

ماڈیول http_2xx یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ ویب سروس HTTP 2xx اسٹیٹس کوڈ واپس کرتی ہے۔ بلیک باکس ایکسپورٹر کنفیگریشن میں مزید تفصیل سے بیان کیا گیا ہے۔ دستاویزات.

بلیک باکس ایکسپورٹر کو Kubernetes کلسٹر میں تعینات کرنا

بیان کریں۔ Deployment и Service Kubernetes میں تعیناتی کے لیے۔

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

بلیک باکس ایکسپورٹر کو درج ذیل کمانڈ کا استعمال کرتے ہوئے تعینات کیا جا سکتا ہے۔ نام کی جگہ monitoring Prometheus آپریٹر سے مراد

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

یقینی بنائیں کہ تمام خدمات درج ذیل کمانڈ کا استعمال کرتے ہوئے چل رہی ہیں:

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

بلیک باکس چیک

آپ استعمال کر کے بلیک باکس ایکسپورٹر ویب انٹرفیس تک رسائی حاصل کر سکتے ہیں۔ port-forward:

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

پر ایک ویب براؤزر کے ذریعے بلیک باکس ایکسپورٹر ویب انٹرفیس سے جڑیں۔ localhost: 9115.

Prometheus: بلیک باکس برآمد کنندہ کے ذریعے HTTP نگرانی

اگر آپ ایڈریس پر جائیں۔ http://localhost:9115/probe?module=http_2xx&target=https://www.google.com، آپ کو مخصوص URL کی جانچ پڑتال کا نتیجہ نظر آئے گا (https://www.google.com).

Prometheus: بلیک باکس برآمد کنندہ کے ذریعے HTTP نگرانی

میٹرک قدر probe_success 1 کے برابر کا مطلب ہے کامیاب چیک۔ 0 کی قدر غلطی کی نشاندہی کرتی ہے۔

پرومیتھیس کا قیام

بلیک باکس برآمد کنندہ کو تعینات کرنے کے بعد، ہم پرومیتھیس کو ترتیب دیتے ہیں۔ 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 # The blackbox exporter.

ہم پیدا کرتے ہیں۔ 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

اشارہ کرنا additional-scrape-configs Prometheus آپریٹر کا استعمال کرتے ہوئے additionalScrapeConfigs.

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

ہم Prometheus ویب انٹرفیس پر جاتے ہیں اور میٹرکس اور اہداف کو چیک کرتے ہیں۔

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

Prometheus: بلیک باکس برآمد کنندہ کے ذریعے HTTP نگرانی

Prometheus: بلیک باکس برآمد کنندہ کے ذریعے HTTP نگرانی

ہم بلیک باکس کے میٹرکس اور اہداف دیکھتے ہیں۔

اطلاعات کے لیے قواعد شامل کرنا (انتباہ)

بلیک باکس برآمد کنندہ سے اطلاعات موصول کرنے کے لیے، ہم 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: "Probe failed (instance {{ $labels.instance }})"
        description: "Probe failedn  VALUE = {{ $value }}n  LABELS: {{ $labels }}"
    - alert: SlowProbe
      expr: avg_over_time(probe_duration_seconds[1m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Slow probe (instance {{ $labels.instance }})"
        description: "Blackbox probe took more than 1s to completen  VALUE = {{ $value }}n  LABELS: {{ $labels }}"
    - alert: HttpStatusCode
      expr: probe_http_status_code <= 199 OR probe_http_status_code >= 400
      for: 5m
      labels:
        severity: error
      annotations:
        summary: "HTTP Status Code (instance {{ $labels.instance }})"
        description: "HTTP status code is not 200-399n  VALUE = {{ $value }}n  LABELS: {{ $labels }}"
    - alert: SslCertificateWillExpireSoon
      expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 30
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "SSL certificate will expire soon (instance {{ $labels.instance }})"
        description: "SSL certificate expires in 30 daysn  VALUE = {{ $value }}n  LABELS: {{ $labels }}"
    - alert: SslCertificateHasExpired
      expr: probe_ssl_earliest_cert_expiry - time()  <= 0
      for: 5m
      labels:
        severity: error
      annotations:
        summary: "SSL certificate has expired (instance {{ $labels.instance }})"
        description: "SSL certificate has expired alreadyn  VALUE = {{ $value }}n  LABELS: {{ $labels }}"
    - alert: HttpSlowRequests
      expr: avg_over_time(probe_http_duration_seconds[1m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "HTTP slow requests (instance {{ $labels.instance }})"
        description: "HTTP request took more than 1sn  VALUE = {{ $value }}n  LABELS: {{ $labels }}"
    - alert: SlowPing
      expr: avg_over_time(probe_icmp_duration_seconds[1m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Slow ping (instance {{ $labels.instance }})"
        description: "Blackbox ping took more than 1sn  VALUE = {{ $value }}n  LABELS: {{ $labels }}"

Prometheus ویب انٹرفیس میں، Status => Rules پر جائیں اور بلیک باکس ایکسپورٹر کے لیے الرٹ رولز تلاش کریں۔

Prometheus: بلیک باکس برآمد کنندہ کے ذریعے HTTP نگرانی

Kubernetes API سرور SSL سرٹیفکیٹ کی میعاد ختم ہونے کی اطلاعات کو ترتیب دینا

آئیے Kubernetes API سرور SSL سرٹیفکیٹ کی میعاد ختم ہونے کی نگرانی کو ترتیب دیں۔ یہ ہفتے میں ایک بار اطلاعات بھیجے گا۔

Kubernetes API سرور کی توثیق کے لیے بلیک باکس ایکسپورٹر ماڈیول شامل کرنا۔

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

پرومیتھیس سکریپ کنفیگریشن شامل کرنا

- 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 # The blackbox exporter.

پرومیتھیس سیکرٹ کا استعمال

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

الرٹ کے قواعد شامل کرنا

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 certificate will expire after three months (instance {{ $labels.instance }})"
        description: "Kubernetes API Server SSL certificate expires in 90 daysn  VALUE = {{ $value }}n  LABELS: {{ $labels }}"

کارآمد ویب سائٹس

ڈوکر میں نگرانی اور لاگ ان کرنا

ماخذ: www.habr.com