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