Monitoring von Postgres innerhalb von Openshift

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: metrics

Auß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: 9187

Und 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:
Liste verschiedener Exporter

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster