Monitorizarea postgresului în cadrul Openshift

O zi bună, locuitori din Habr!

Astăzi vreau să vă spun cum ne-am dorit cu adevărat să monitorizăm postgres și alte câteva entități din clusterul OpenShift și cum am făcut-o.

La intrare aveau:

  • OpenShift
  • Cârmă
  • Prometeu


Pentru a lucra cu o aplicație java, totul a fost destul de simplu și transparent, sau pentru a fi mai precis:

1) Adăugarea la build.gradle

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

2) Rulați 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 unui afișaj la Grafana

Totul a fost destul de simplu și prozaic până a venit momentul să monitorizăm bazele care se află în apropiere în spațiul nostru de nume (da, asta e rău, nimeni nu face asta, dar se întâmplă lucruri diferite).

Cum functioneazã?

Pe lângă podul cu postgres și prometheus în sine, avem nevoie de încă o entitate - exportator.

Un exportator într-un concept abstract este un agent care colectează valori de la o aplicație sau chiar de la un server. Pentru postgres exporter, este scris în Go, funcționează pe principiul rulării scripturilor SQL în interiorul bazei de date și apoi prometheus preia rezultatele obținute. Acest lucru vă permite, de asemenea, să extindeți valorile colectate prin adăugarea propriei valori.

Să o implementăm astfel (exemplu deployment.yaml, fără caracter obligatoriu):


---
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, a necesitat un serviciu și un flux de imagini

După implementare, ne dorim foarte mult ca toată lumea să se vadă.

Adăugați următoarea piesă la configurația Prometheus:

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

Și apoi totul a funcționat, tot ce rămâne este să adaugi toate aceste lucruri la grafana și să te bucuri de rezultat.

Pe lângă posibilitatea de a adăuga propriile interogări, puteți modifica setările în prometheus, colectând mai multe valori direcționate.

Acest lucru a fost făcut într-un mod similar pentru:

  • Kafka
  • Elasticsearch
  • mongo

PS Toate datele despre nume, porturi și restul sunt preluate din aer și nu conțin nicio informație.

Link-uri utile:
Lista diverșilor exportatori

Sursa: www.habr.com

Adauga un comentariu