Goddag, beboere i Habr!
I dag vil jeg fortælle dig, hvordan vi virkelig ønskede at overvåge postgres og et par andre entiteter inde i OpenShift-klyngen, og hvordan vi gjorde det.
Ved indgangen havde de:
- Åbner skift
- Helm
- Prometheus
For at arbejde med en java-applikation var alt ganske enkelt og gennemsigtigt, eller for at være mere præcis:
1) Tilføjelse til 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) Tilføjelse af en skærm til Grafana
Alt var ret simpelt og prosaisk, indtil øjeblikket kom til at overvåge de baser, der er placeret i nærheden i vores navneområde (ja, det er dårligt, ingen gør dette, men der sker forskellige ting).
Hvordan virker det?
Ud over poden med selve postgres og prometheus, har vi brug for endnu en enhed - eksportør.
En eksportør i et abstrakt koncept er en agent, der indsamler metrics fra en applikation eller endda en server. For postgres-eksportører er det skrevet i Go, det fungerer efter princippet om at køre SQL-scripts inde i databasen og derefter tager prometheus de opnåede resultater. Dette giver dig også mulighed for at udvide de indsamlede metrics ved at tilføje dine egne.
Lad os implementere det sådan her (eksempel deployment.yaml, ikke-bindende):
---
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ævede også en service og imagestream
Efter udsendelsen ønsker vi virkelig, at alle skal se hinanden.
Tilføj følgende stykke til Prometheus-konfigurationen:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
Og så virkede alt, det eneste, der er tilbage, er at tilføje alle disse ting til grafanaen og nyde resultatet.
Ud over muligheden for at tilføje dine egne forespørgsler, kan du ændre indstillingerne i prometheus og indsamle mere målrettede metrics.
Dette blev gjort på lignende måde for:
- Kafka
- Elasticsearch
- Mongo
P.S. Alle data om navne, havne og resten er taget fra luften og indeholder ingen information.
Nyttige links:
Kilde: www.habr.com