Përshëndetje të gjitha anëtarëve të Habra!
Sot dëshiroj të flas me ju se si e dëshironim të monitoronim postgres dhe disa entitete të tjera brenda klasterit OpenShift dhe si ia dolëm.
Më erdhi si input:
- Openshift
- Helm
- Prometheus
Për të punuar me aplikacionin java, gjithçka ishte mjaft e thjeshtë dhe e qartë, dhe nëse të jemi më të saktë:
1) Shtimi në build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"2) Ngritja e prometheus me konfigurimin
- job_name: 'job-name'
metrics_path: 'http://actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'3) Shtimi i shfaqjes në Grafana
Gjithçka ishte mjaft e thjeshtë dhe e zakonshme deri në momentin që duhej të monitoronim bazat, që ndodheshin afër nesh në namespace (po, kjo është e keqe, askush nuk bën kështu, por ndodhin gjëra të ndryshme).
Si funksionon kjo?
Përveç pod-it me postgres dhe vetë prometheus, na nevojitet edhe një entitet tjetër — exporter.
Exporteri në kuptim të përgjithshëm është një agjent, i cili mbledh metrikat nga aplikacioni ose madje сервера. Për postgres exporter është shkruar në Go, punon sipas parimit të ekzekutimit të skemave SQL në bazë dhe më pas rezultatet e marra i merr prometheus. Kjo gjithashtu lejon zgjerimin e metrikave të mbledhura, duke shtuar të tuat.
E deploy-ojmë në këtë mënyrë (shembuj të deployment.yaml, pa detyrime):
---
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: metricsNa nevojitet gjithashtu një shërbim dhe image stream për të.
Pas deploy-it, dëshirojmë shumë që të gjithë të shohin njëri-tjetrin.
Shtojmë këtë pjesë në konfigurimin e prometheus:
- job_name: 'postgres_exporter'
metrics_path: 'http://metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187Dhe këtu gjithçka funksionoi, mbetet të shtojmë të gjitha këto në Grafana dhe të shijojmë rezultatin.
Përveç mundësisë për të shtuar kërkesat tuaja, në prometheus mund të ndryshoni parametrat, duke mbledhur metrika më të targetuara që janë të nevojshme.
Në mënyrë të ngjashme është bërë për:
- Kafka
- Elasticsearch
- Mongo
P.S. Të gjitha të dhënat në lidhje me emrat, portat dhe të tjera janë marrë nga fantazia dhe nuk kanë asnjë informacion të vlefshëm.
Linqe të dobishme:
Burimi: habr.com
