Goedenmiddag, bewoners van Habra!
Vandaag wil ik jullie vertellen hoe we graag PostgreSQL en nog een paar entiteiten binnen de OpenShift-cluster wilden monitoren en hoe we dat hebben gedaan.
We hadden het volgende:
- OpenShift
- Helm
- Prometheus
Voor het werken met de Java-applicatie was alles vrij eenvoudig en transparant, om precies te zijn:
1) Toevoegen aan build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"2) Start Prometheus met configuratie
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'3) Toevoegen van weergave in Grafana
Het was allemaal vrij eenvoudig en rechttoe rechtaan totdat het moment aanbrak waarop we de databases die zich bij ons in de namespace bevinden wilden monitoren (ja, dat is slecht, dat doet niemand, maar soms gebeurt het).
Hoe werkt dit?
Naast de pod met PostgreSQL en Prometheus hebben we nog een andere entiteit nodig — de exporter.
De exporter is in abstracte zin een agent die metrics verzamelt van de applicatie of zelfs de server. De PostgreSQL-exporter is geschreven in Go, werkt op basis van het uitvoeren van SQL-scripts op de database en haalt vervolgens de verkregen resultaten binnen bij Prometheus. Dit stelt ons ook in staat om de verzamelde metrics uit te breiden door onze eigen toe te voegen.
We deployen het als volgt (voorbeeld deployment.yaml, zonder verplichtingen):
---
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: metricsWe hebben ook een service en image stream nodig voor hem.
Na de deployment willen we heel graag dat alles elkaar ziet.
We voegen het volgende stukje toe aan de Prometheus-config:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187En hier begon alles te werken, het enige dat overbleef was om al dit goed in Grafana toe te voegen en van het resultaat te genieten.
Naast de mogelijkheid om je eigen verzoeken toe te voegen, kun je in Prometheus de instellingen wijzigen om gerichter de benodigde metrics te verzamelen.
Op dezelfde manier is het gedaan voor:
- Kafka
- Elasticsearch
- Mongo
P.S. Alle gegevens over namen, poorten en andere zaken zijn uit de lucht gegrepen en bevatten geen informatie.
Nuttige links:
Bron: habr.com
