God dag, invånare i Habr!
Idag vill jag berätta hur vi verkligen ville övervaka postgres och ett par andra enheter i OpenShift-klustret och hur vi gjorde det.
Vid ingången hade de:
- Öppnar växel
- Helm
- Prometheus
För att arbeta med en java-applikation var allt ganska enkelt och transparent, eller för att vara mer exakt:
1) Lägger till build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Kör prometheus med konfiguration
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) Lägga till en skärm till Grafana
Allt var ganska enkelt och prosaiskt tills ögonblicket kom att övervaka de baser som finns i närheten i vårt namnområde (ja, det här är dåligt, ingen gör det här, men olika saker händer).
Hur fungerar det?
Förutom podden med postgres och prometheus själv, behöver vi ytterligare en enhet - exportör.
En exportör i ett abstrakt koncept är en agent som samlar in mätvärden från en applikation eller till och med en server. För postgres exporter är det skrivet i Go, det fungerar enligt principen att köra SQL-skript inuti databasen och sedan tar prometheus de erhållna resultaten. Detta gör att du också kan utöka den insamlade statistiken genom att lägga till din egen.
Låt oss distribuera det så här (exempel deployment.yaml, icke-bindande):
---
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
Det krävde också en tjänst och bildström
Efter utplaceringen vill vi verkligen att alla ska se varandra.
Lägg till följande del till Prometheus-konfigurationen:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
Och sedan fungerade allt, allt som återstår är att lägga till allt det här i grafanan och njuta av resultatet.
Förutom möjligheten att lägga till dina egna frågor kan du ändra inställningarna i prometheus och samla in mer riktade mätvärden.
Detta gjordes på liknande sätt för:
- kafka
- Elasticsearch
- mongo
PS All data om namn, portar och resten är hämtad från luften och innehåller ingen information.
Användbara länkar:
Källa: will.com