Övervakning av postgres inuti Openshift

God dag, invånare i Habr!

Idag vill jag berätta hur vi verkligen ville övervaka postgres och ett par andra enheter i OpenShift-klustret och hur vi gjorde det.

Vid ingången hade de:

  • Öppnar växel
  • Helm
  • Prometheus


För att arbeta med en java-applikation var allt ganska enkelt och transparent, eller för att vara mer exakt:

1) Lägger till 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) Lägga till en skärm till Grafana

Allt var ganska enkelt och prosaiskt tills ögonblicket kom att övervaka de baser som finns i närheten i vårt namnområde (ja, det här är dåligt, ingen gör det här, men olika saker händer).

Hur fungerar det?

Förutom podden med postgres och prometheus själv, behöver vi ytterligare en enhet - exportör.

En exportör i ett abstrakt koncept är en agent som samlar in mätvärden från en applikation eller till och med en server. För postgres exporter är det skrivet i Go, det fungerar enligt principen att köra SQL-skript inuti databasen och sedan tar prometheus de erhållna resultaten. Detta gör att du också kan utöka den insamlade statistiken genom att lägga till din egen.

Låt oss distribuera det så här (exempel deployment.yaml, icke-bindande):


---
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ävde också en tjänst och bildström

Efter utplaceringen vill vi verkligen att alla ska se varandra.

Lägg till följande del till Prometheus-konfigurationen:

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

Och sedan fungerade allt, allt som återstår är att lägga till allt det här i grafanan och njuta av resultatet.

Förutom möjligheten att lägga till dina egna frågor kan du ändra inställningarna i prometheus och samla in mer riktade mätvärden.

Detta gjordes på liknande sätt för:

  • kafka
  • Elasticsearch
  • mongo

PS All data om namn, portar och resten är hämtad från luften och innehåller ingen information.

Användbara länkar:
Lista över olika exportörer

Källa: will.com

Lägg en kommentar