Guten Tag, Bewohner von Habr!
Heute möchte ich Ihnen erzählen, wie wir Postgres und einige andere Entitäten innerhalb des OpenShift-Clusters wirklich überwachen wollten und wie wir das gemacht haben.
Am Eingang hatten sie:
- Eröffnungsschicht
- Helm
- Prometheus
Um mit einer Java-Anwendung zu arbeiten, war alles ganz einfach und transparent, oder genauer gesagt:
1) Hinzufügen zu build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Führen Sie prometheus mit der Konfiguration aus
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) Hinzufügen einer Anzeige zu Grafana
Alles war ganz einfach und prosaisch, bis der Moment kam, die Stützpunkte zu überwachen, die sich in der Nähe unseres Namensraums befinden (ja, das ist schlecht, niemand macht das, aber es passieren verschiedene Dinge).
Wie funktioniert es?
Zusätzlich zum Pod mit Postgres und Prometheus selbst benötigen wir eine weitere Entität – den Exporter.
Ein Exporter in einem abstrakten Konzept ist ein Agent, der Metriken von einer Anwendung oder sogar einem Server sammelt. Der Postgres-Exporter ist in Go geschrieben, er funktioniert nach dem Prinzip, SQL-Skripte in der Datenbank auszuführen und dann übernimmt Prometheus die erhaltenen Ergebnisse. Dies ermöglicht Ihnen auch, die gesammelten Metriken zu erweitern, indem Sie Ihre eigenen hinzufügen.
Stellen wir es wie folgt bereit (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: metrics
Es erforderte außerdem einen Dienst und einen Imagestream
Nach dem Einsatz möchten wir wirklich, dass sich alle sehen.
Fügen Sie der Prometheus-Konfiguration den folgenden Teil hinzu:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
Und dann hat alles geklappt, jetzt müssen Sie nur noch das ganze Zeug zur Grafana hinzufügen und das Ergebnis genießen.
Neben der Möglichkeit, eigene Abfragen hinzuzufügen, können Sie die Einstellungen in Prometheus ändern und so gezieltere Metriken erfassen.
Dies geschah auf ähnliche Weise für:
- Kafkaeske Zustände
- Elasticsearch
- Mongo
PS: Alle Daten zu Namen, Häfen usw. stammen aus der Luft und enthalten keine Informationen.
Nützliche Links:
Source: habr.com