Goedendag, inwoners van Habr!
Vandaag wil ik je vertellen hoe we postgres en een paar andere entiteiten binnen het OpenShift-cluster echt wilden monitoren en hoe we dat hebben gedaan.
Bij de ingang hadden ze:
- OpenShift
- Stuurstand
- Prometheus
Om met een Java-applicatie te werken was alles vrij eenvoudig en transparant, of om preciezer te zijn:
1) Toevoegen aan build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Voer prometheus uit met configuratie
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) Een beeldscherm toevoegen aan Grafana
Alles was vrij eenvoudig en prozaïsch totdat het moment aanbrak om de bases te monitoren die zich in de buurt van onze naamruimte bevinden (ja, dit is slecht, niemand doet dit, maar er gebeuren verschillende dingen).
Hoe werkt het?
Naast de pod met postgres en prometheus zelf hebben we nog een entiteit nodig: exporteur.
Een exporteur in een abstract concept is een agent die statistieken verzamelt van een applicatie of zelfs een server. Voor Postgres Exporter is het geschreven in Go, het werkt volgens het principe van het uitvoeren van SQL-scripts in de database en vervolgens neemt Prometheus de verkregen resultaten. Hierdoor kunt u de verzamelde statistieken ook uitbreiden door uw eigen statistieken toe te voegen.
Laten we het als volgt implementeren (bijvoorbeeld deployment.yaml, niet-bindend):
---
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
Er was ook een service en beeldstream voor nodig
Na de inzet willen we heel graag dat iedereen elkaar ziet.
Voeg het volgende stuk toe aan de Prometheus-configuratie:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
En toen werkte alles, het enige dat overblijft is al dit spul aan de grafana toevoegen en van het resultaat genieten.
Naast de mogelijkheid om uw eigen zoekopdrachten toe te voegen, kunt u de instellingen in prometheus wijzigen, waardoor u meer gerichte statistieken verzamelt.
Dit gebeurde op soortgelijke wijze voor:
- Kafka
- Elasticsearch
- Mongo
PS Alle gegevens over namen, havens en de rest worden uit de lucht gehaald en bevatten geen enkele informatie.
Nuttige links:
Bron: www.habr.com