God dag, invÄnare av Habra!
Idag vill jag berÀtta för er hur vi verkligen ville övervaka postgres och ett par andra enheter inuti OpenShift-klustret och hur vi gjorde det.
Vi hade följande:
- Openshift
- Helm
- Prometheus
För att arbeta med Java-applikationen var allt ganska enkelt och klart, eller mer exakt:
1) LĂ€gga till i build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"2) Köra 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 visning i Grafana
Allt var ganska enkelt och klart tills vi nÄdde punkten att övervaka databaserna som finns i vÄr nÀrmiljö (ja, det Àr dÄligt, ingen gör sÄ, men sÄdant hÀnder).
Hur fungerar det?
Förutom podden med postgres och sjĂ€lva prometheus behöver vi ocksĂ„ en annan enhet â exporter.
Exporter i abstrakt mening Àr en agent som samlar in metrik frÄn applikationen eller till och med servern. För postgres exporter Àr skriven i Go och arbetar pÄ principen att köra SQL-skript mot databasen och sedan hÀmtar prometheus de erhÄllna resultaten. Detta gör det ocksÄ möjligt att utöka de insamlade metrikarna genom att lÀgga till egna.
Vi distribuerar det pÄ följande sÀtt (exempel pÄ deployment.yaml, ingen tvingande struktur):
---
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: metricsVi behövde ocksÄ en tjÀnst och en image stream för den.
Efter distributionen vill vi gÀrna att allt ska kunna se varandra.
Vi lÀgger till följande del i prometheus-konfigurationen:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187Och hÀr började allt fungera, kvar att lÀgga till allt detta i Grafana och njuta av resultatet.
Förutom möjligheten att lÀgga till egna frÄgor kan man i Prometheus Àndra instÀllningarna för att samla in mer riktade metrikdata som behövs.
PÄ liknande sÀtt gjordes följande för:
- Kafka
- Elasticsearch
- Mongo
P.S. All information om namn, portar och annat Àr pÄhittad och bÀr ingen information.
Nyttiga lÀnkar:
KĂ€lla: habr.com
