Guten Tag, Bewohner von Habr!
Heute möchte ich Ihnen erzählen, wie sehr wir an der Überwachung von Postgres und einigen weiteren Entitäten innerhalb des OpenShift-Clusters interessiert waren und wie wir das umgesetzt haben.
Wir hatten Folgendes:
- Openshift
- Helm
- Prometheus
Für die Arbeit mit der Java-Anwendung war alles recht einfach und transparent, um genauer zu sein:
1) Hinzufügen zu build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"2) Start von Prometheus mit der 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
Das war alles recht einfach und prosaisch, bis der Moment kam, in dem wir die Datenbanken überwachen mussten, die sich in unserer Nähe im Namespace befinden (ja, das ist schlecht, so macht man das nicht, aber es kommt vor).
Wie funktioniert das?
Neben dem Pod mit Postgres und Prometheus benötigen wir noch eine weitere Entität — den Exporter.
Ein Exporter ist im abstrakten Sinn ein Agent, der Metriken aus der Anwendung sammelt oder sogar Server. Der Postgres-Exporter ist in Go geschrieben, funktioniert nach dem Prinzip, SQL-Skripte auf der Datenbank auszuführen, und übergibt die erhaltenen Ergebnisse an Prometheus. Dies ermöglicht auch die Erweiterung der gesammelten Metriken durch Hinzufügen eigener.
Wir setzen es wie folgt ein (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ötigen wir dafür einen Service und einen Image Stream.
Nach dem Deployment wünschen wir uns sehr, dass alle sich sehen können.
Wir fügen der Prometheus-Konfiguration diesen Abschnitt hinzu:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187Und hier funktioniert alles, jetzt bleibt nur noch, das Ganze 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 notwendigen Metriken zu sammeln.
Auf die gleiche Weise wurde dies für folgender gemacht:
- Kafka
- Elasticsearch
- Mongo
P.S. Alle Daten zu Namen, Ports und anderem sind willkürlich gewählt und haben keine informativen Eigenschaften.
Nützliche Links:
Quelle: habr.com
