Overvågning af postgres inde i Openshift

Goddag, beboere i Habr!

I dag vil jeg fortælle dig, hvordan vi virkelig ønskede at overvåge postgres og et par andre entiteter inde i OpenShift-klyngen, og hvordan vi gjorde det.

Ved indgangen havde de:

  • Åbner skift
  • Helm
  • Prometheus


For at arbejde med en java-applikation var alt ganske enkelt og gennemsigtigt, eller for at være mere præcis:

1) Tilføjelse til build.gradle

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

2) Kør 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 en skærm til Grafana

Alt var ret simpelt og prosaisk, indtil øjeblikket kom til at overvåge de baser, der er placeret i nærheden i vores navneområde (ja, det er dårligt, ingen gør dette, men der sker forskellige ting).

Hvordan virker det?

Ud over poden med selve postgres og prometheus, har vi brug for endnu en enhed - eksportør.

En eksportør i et abstrakt koncept er en agent, der indsamler metrics fra en applikation eller endda en server. For postgres-eksportører er det skrevet i Go, det fungerer efter princippet om at køre SQL-scripts inde i databasen og derefter tager prometheus de opnåede resultater. Dette giver dig også mulighed for at udvide de indsamlede metrics ved at tilføje dine egne.

Lad os implementere det sådan her (eksempel 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

Det krævede også en service og imagestream

Efter udsendelsen ønsker vi virkelig, at alle skal se hinanden.

Tilføj følgende 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 så virkede alt, det eneste, der er tilbage, er at tilføje alle disse ting til grafanaen og nyde resultatet.

Ud over muligheden for at tilføje dine egne forespørgsler, kan du ændre indstillingerne i prometheus og indsamle mere målrettede metrics.

Dette blev gjort på lignende måde for:

  • Kafka
  • Elasticsearch
  • Mongo

P.S. Alle data om navne, havne og resten er taget fra luften og indeholder ingen information.

Nyttige links:
Liste over forskellige eksportører

Kilde: www.habr.com

Tilføj en kommentar