Guten Tag, liebe Habr-Bewohner!
Heute möchte ich Ihnen erzählen, wie wir dringend PostgreSQL und einige weitere Entitäten im OpenShift-Cluster überwachen wollten und wie wir das umgesetzt haben.
Wir hatten Folgendes:
- OpenShift
- Helm
- Prometheus
Für die Arbeit mit der Java-Anwendung war alles ziemlich einfach und klar, genauer gesagt:
1) Hinzufügen zur build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"2) Starten von Prometheus mit Konfiguration
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'3) Hinzufügen der Anzeige in Grafana
Alles war ziemlich einfach und alltäglich, bis der Zeitpunkt kam, an dem wir die Datenbanken überwachen mussten, die sich in unserem Namespace befanden (ja, das ist schlecht, so macht es niemand, aber es gibt unterschiedliche Situationen).
Wie funktioniert das?
Neben dem Pod mit PostgreSQL und Prometheus benötigen wir noch eine weitere Entität - den Exporter.
Ein Exporter ist im abstrahierten Sinne ein Agent, der Metriken von der Anwendung oder sogar Server. Der PostgreSQL-Exporter ist in Go geschrieben, funktioniert nach dem Prinzip der Ausführung von SQL-Skripten auf der Datenbank und der anschließenden Abholung der Ergebnisse durch Prometheus. Dies ermöglicht auch die Erweiterung der gesammelten Metriken durch eigene.
Wir deployen ihn so (Beispiel deployment.yaml, unverbindlich):
---
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: metricsAußerdem benötigten wir einen Service und einen ImageStream.
Nach dem Deployment wollen wir natürlich, dass sich alle gegenseitig sehen.
Fügen Sie dem Prometheus-Konfigurationsstück Folgendes hinzu:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187Und hier hat alles funktioniert, es bleibt nur noch, all das in Grafana hinzuzufügen und das Ergebnis zu genießen.
Neben der Möglichkeit, eigene Anfragen hinzuzufügen, kann man in Prometheus die Einstellungen ändern, um gezielt die benötigten Metriken zu sammeln.
Auf die gleiche Weise wurde es gemacht für:
- Kafka
- Elasticsearch
- Mongo
P.S. Alle Daten zu Namen, Ports und anderem sind erfunden und enthalten keine Informationen.
Nützliche Links:
Quelle: habr.com
