Guten Tag Bewohner von Habr!
Heute möchte ich Ihnen sagen, wie wir Postgres und einige Entitäten innerhalb des OpenShift-Clusters wirklich überwachen wollten und wie wir es gemacht haben.
Am Eingang hatten sie:
- Offenschaltung
- Helm
- Prometheus
Um mit einer Java-Anwendung zu arbeiten, war alles recht einfach und transparent, und genauer gesagt:
1) Hinzufügen zu build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Starten Sie 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 einer Anzeige in Grafana
Alles war recht einfach und prosaisch, bis die Zeit gekommen war, die Basen in unserer Nähe im Namespace zu überwachen (ja, das ist schlecht, niemand tut es, aber es passiert anders).
Wie funktioniert das?
Neben dem Herd mit Postgres und Prometheus selbst brauchen wir eine weitere Einheit - den Exporteur.
Ein abstrakter Exporter ist ein Agent, der Metriken von einer Anwendung oder sogar einem Server sammelt. Für Postgres ist der Exporter in Go geschrieben, er arbeitet nach dem Prinzip, Skripte basierend auf SQL im Inneren auszuführen, und Prometheus nimmt dann die Ergebnisse. Außerdem können Sie die gesammelten Metriken erweitern, indem Sie Ihre eigenen hinzufügen.
Wir stellen es wie folgt bereit (Beispiel "deploy.yaml", das an nichts gebunden ist):
--- 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
Er brauchte auch einen Dienst und einen Imagestream.
Nach der Bereitstellung möchten wir wirklich, dass sich alle sehen.
Fügen Sie der prometheus-Konfiguration das folgende Stück 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, es bleibt, all diese Güte dem Graphan hinzuzufügen und das Ergebnis zu genießen.
Neben der Möglichkeit, eigene Abfragen hinzuzufügen, können Sie in prometheus die Einstellung ändern und die erforderlichen Metriken gezielter erfassen.
Eine ähnliche Methode wurde durchgeführt für:
PS Alle Daten zu Namen, Ports und dem Rest stammen von der Decke und enthalten keine Informationen.
Nützliche Links:
Liste verschiedener Exporteure