Dzień dobry mieszkańcy Habr!
Dzisiaj chcę Wam opowiedzieć, jak naprawdę chcieliśmy monitorować Postgres i kilka innych podmiotów w klastrze OpenShift i jak to zrobiliśmy.
Na wejściu mieli:
- Otwiera się
- Ster
- Prometheus
Aby pracować z aplikacją Java, wszystko było dość proste i przejrzyste, a ściślej:
1) Dodanie do build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Uruchom Prometheusa z konfiguracją
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) Dodanie wyświetlacza do Grafany
Wszystko było dość proste i prozaiczne, aż przyszedł moment monitorowania baz, które znajdują się w pobliżu naszej przestrzeni nazw (tak, to jest złe, nikt tego nie robi, ale różne rzeczy się dzieją).
Jak to działa?
Oprócz poda z postgresem i samym prometheusem potrzebujemy jeszcze jednego podmiotu - eksportera.
Eksporter w abstrakcyjnym ujęciu to agent zbierający metryki z aplikacji lub nawet serwera. Dla eksportera postgres jest on napisany w Go, działa na zasadzie uruchamiania skryptów SQL wewnątrz bazy danych, a następnie Prometheus pobiera uzyskane wyniki. Pozwala to również na rozszerzenie zebranych metryk poprzez dodanie własnych.
Wdróżmy to w ten sposób (przykład Deployment.yaml, niewiążący):
---
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
Wymagało to również usługi i strumienia obrazów
Po wdrożeniu naprawdę chcemy, żeby wszyscy się widzieli.
Dodaj następujący element do konfiguracji Prometheusa:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
I wtedy wszystko zadziałało, pozostało tylko dodać to wszystko do grafany i cieszyć się efektem.
Oprócz możliwości dodawania własnych zapytań, możesz zmieniać ustawienia w Prometheusie, zbierając bardziej ukierunkowane metryki.
Zrobiono to w podobny sposób dla:
- Kafka
- Elasticsearch
- Mongo
PS Wszystkie dane o nazwach, portach i reszcie są pobierane z powietrza i nie zawierają żadnych informacji.
Przydatne linki:
Źródło: www.habr.com