Övervakning av postgres inuti Openshift

God dag, invÄnare av Habra!

Idag vill jag berÀtta för er hur vi verkligen ville övervaka postgres och ett par andra enheter inuti OpenShift-klustret och hur vi gjorde det.

Vi hade följande:

  • Openshift
  • Helm
  • Prometheus


För att arbeta med Java-applikationen var allt ganska enkelt och klart, eller mer exakt:

1) LĂ€gga till i build.gradle

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

2) Köra 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 visning i Grafana

Allt var ganska enkelt och klart tills vi nÄdde punkten att övervaka databaserna som finns i vÄr nÀrmiljö (ja, det Àr dÄligt, ingen gör sÄ, men sÄdant hÀnder).

Hur fungerar det?

Förutom podden med postgres och sjĂ€lva prometheus behöver vi ocksĂ„ en annan enhet — exporter.

Exporter i abstrakt mening Àr en agent som samlar in metrik frÄn applikationen eller till och med servern. För postgres exporter Àr skriven i Go och arbetar pÄ principen att köra SQL-skript mot databasen och sedan hÀmtar prometheus de erhÄllna resultaten. Detta gör det ocksÄ möjligt att utöka de insamlade metrikarna genom att lÀgga till egna.

Vi distribuerar det pÄ följande sÀtt (exempel pÄ deployment.yaml, ingen tvingande struktur):


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

Vi behövde ocksÄ en tjÀnst och en image stream för den.

Efter distributionen vill vi gÀrna att allt ska kunna se varandra.

Vi lÀgger till följande del i prometheus-konfigurationen:

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

Och hÀr började allt fungera, kvar att lÀgga till allt detta i Grafana och njuta av resultatet.

Förutom möjligheten att lÀgga till egna frÄgor kan man i Prometheus Àndra instÀllningarna för att samla in mer riktade metrikdata som behövs.

PÄ liknande sÀtt gjordes följande för:

  • Kafka
  • Elasticsearch
  • Mongo

P.S. All information om namn, portar och annat Àr pÄhittad och bÀr ingen information.

Nyttiga lÀnkar:
Lista över olika exporters

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster