Dobar dan, stanovnici Habra!
Danas želim da vam ispričam kako smo želeli da nadgledamo Postgres i još nekoliko entiteta unutar OpenShift klastera i kako smo to uradili.
Na ulazu smo imali:
- OpenShift
- Helm
- Prometheus
Za rad sa Java aplikacijom sve je bilo prilično jednostavno i jasno, a ako budem precizniji:
1) Dodavanje u build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"2) Pokretanje Prometheusa sa konfiguracijom
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'3) Dodavanje prikaza u Grafanu
Sve je bilo prilično jednostavno i prozaično sve do trenutka kada smo trebali nadgledati baze koje se nalaze pored nas u namespace-u (da, to nije u redu, niko to ne radi, ali dešava se).
Kako to funkcioniše?
Pored poda sa Postgresom i samog Prometheusa potrebna nam je još jedna jedinica — exporter.
Exporter u apstraktnom smislu je agent koji prikuplja metrike iz aplikacije ili čak poslužitelja. Za Postgres, exporter je napisan na Go-u, funkcioniše na principu izvršavanja SQL skripti na bazi i zatim prikupljene rezultate preuzima Prometheus. Ovo takođe omogućava proširivanje prikupljenih metrika dodavanjem vlastitih.
Deployamo ga na sledeći način (primer deployment.yaml, bez obaveza):
---
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: metricsTakođe nam je potreban servis i imidž stream.
Nakon deployanja, zaista želimo da svi mogu da se vide međusobno.
Dodajemo u Prometheusu ovakav deo konfiguracije:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187I tu je sve proradilo, preostalo je da se sve to doda u Grafanu i uživamo u rezultatu.
Osim mogućnosti dodavanja vlastitih upita, u prometheus se može mijenjati postavka, prikupljajući potrebne metrike više ciljano.
Na sličan način učinjeno je za:
- Kafka
- Elasticsearch
- Mongo
P.S. Svi podaci o imenima, portovima i ostalom su izmišljeni i ne predstavljaju nikakve informacije.
Korisne veze:
Izvor: habr.com
