Monitorizarea postgres în Openshift

Bună ziua, cetățeni ai Habr!

Astăzi vreau să vă povestesc cum ne-am dorit foarte mult să monitorizăm postgres și alte câteva entități din cadrul clusterei OpenShift și cum am reușit să facem asta.

Am avut la intrare:

  • Openshift
  • Helm
  • Prometheus


Pentru a lucra cu aplicația Java, totul a fost destul de simplu și transparent, iar dacă să fiu mai precis, atunci:

1) Adăugarea în build.gradle

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

2) Pornirea Prometheus cu configurația

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

3) Adăugarea vizualizării în Grafana

Totul a fost destul de simplu și previzibil până când a venit momentul să monitorizăm bazele de date care se află aproape de noi în namespace (da, e rău, nimeni nu face asta, dar se întâmplă diverse).

Cum funcționează acest lucru?

Pe lângă pod-ul cu postgres și, în mod evident, Prometheus, avem nevoie de o altă entitate – exporter.

Exporterul este, în termeni generali, un agent care colectează metrici de la aplicație sau chiar server. Exporterul pentru postgres este scris în Go, funcționează pe principiul rulării scripturilor SQL pe bază și apoi rezultatele obținute sunt preluate de Prometheus. Acest lucru permite, de asemenea, extinderea metricelor colectate prin adăugarea celor proprii.

Îl depunem în acest mod (exemplu deployment.yaml, fără nicio obligație):


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

De asemenea, am avut nevoie de un serviciu și de un imagestream pentru acesta.

După desfășurarea noastră, ne dorim foarte mult ca toate să se vadă reciproc.

Adăugăm în configurația lui Prometheus acest fragment:

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

Și aici totul a început să funcționeze, rămâne să adăugăm toate acestea în Grafana și să ne bucurăm de rezultat.

Pe lângă posibilitatea de a adăuga propriile cereri, în prometheus se pot modifica setările pentru a colecta metrici mai țintite.

În mod similar a fost realizat pentru:

  • Kafka
  • Elasticsearch
  • Mongo

P.S. Toate datele referitoare la nume, porturi și alte informații au fost inventate și nu conțin nicio relevanță.

Linkuri utile:
Lista diferitelor exportatori

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster