Überwachen von Postgres in Openshift

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:
Liste verschiedener Exporteure

Source: habr.com

Kommentar hinzufügen