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: metricsDe 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:
Sursa: habr.com
