Overvågning af Postgres indenfor Openshift

Godmorgen, Habr-beboere!

I dag vil jeg fortælle jer, hvordan vi ønskede at overvåge Postgres og et par andre enheder inden for OpenShift-klyngen, og hvordan vi gjorde det.

Vi havde ved indgangen:

  • Openshift
  • Helm
  • Prometheus


Til arbejdet med Java-applikationen var alt ret enkelt og klart, for at være præcis:

1) Tilføjelse i build.gradle

 implementation "io.micrometer:micrometer-registry-prometheus"

2) Kørsel af Prometheus med konfiguration

 - job_name: 'job-name'
    metrics_path: 'actuator/prometheus'
    scrape_interval: 5s
    kubernetes_sd_configs:
    - role: pod
      namespaces:
        names:
          - 'name'

3) Tilføjelse af visning i Grafana

Det var ret enkelt og ligetil, indtil vi nåede til at overvåge databaser, som vi havde nært i namespace (ja, det er dårligt, ingen gør sådan, men der kan ske forskellige ting).

Hvordan fungerer det?

Udover pod'en med Postgres og selve Prometheus har vi brug for endnu en enhed — en exporter.

En exporter er i abstrakt forstand en agent, der indsamler målinger fra applikationen eller endda server. For Postgres exporter er skrevet i Go, og den fungerer ved at køre SQL-scripts på databasen og derefter hente de opnåede resultater til Prometheus. Dette gør det også muligt at udvide de indsamlede målinger ved at tilføje egne.

Vi deployer den på denne måde (eksempel på deployment.yaml, ikke bindende):


---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres-exporter
  labels:
    app: {{ .Values.name }}
    monitoring: prometheus
spec:
  serviceName: {{ .Values.name }}
  replicas: 1
  revisionHistoryLimit: 5
  template:
    metadata:
      labels:
        app: postgres-exporter
        monitoring: prometheus
    spec:
      containers:
      - env:
        - name: DATA_SOURCE_URI
          value: postgresdb:5432/pstgr?sslmode=disable
        - name: DATA_SOURCE_USER
          value: postgres
        - name: DATA_SOURCE_PASS
          value: postgres
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        livenessProbe:
          tcpSocket:
            port: metrics
          initialDelaySeconds: 30
          periodSeconds: 30
        readinessProbe:
          tcpSocket:
            port: metrics
          initialDelaySeconds: 10
          periodSeconds: 30
        image: exporter
        name: postgres-exporter
        ports:
        - containerPort: 9187
          name: metrics

Derudover har vi brug for en service og et image stream

Efter deployment ønsker vi meget, at alle kan se hinanden.

Vi tilføjer et sådant stykke til Prometheus-konfigurationen:

  - job_name: 'postgres_exporter'
    metrics_path: 'metrics'
    scrape_interval: 5s
    dns_sd_configs:
    - names:
      - 'postgres-exporter'
      type: 'A'
      port: 9187

Og her begyndte alt at fungere, nu mangler vi bare at tilføje alt dette til Grafana og nyde resultatet.

Udover muligheden for at tilføje dine egne forespørgsler kan man i prometheus ændre indstillingerne for mere målrettet at indsamle nødvendige metrikker.

På samme måde blev der lavet til:

  • Kafka
  • Elasticsearch
  • Mongo

P.S. Alle data om navne, porte og lignende er opfundet og bærer ikke nogen information.

Nyttige links:
Liste over forskellige eksportører

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster