Monitoring van Postgres binnen OpenShift

Goedenmiddag, bewoners van Habra!

Vandaag wil ik jullie vertellen hoe we graag PostgreSQL en nog een paar entiteiten binnen de OpenShift-cluster wilden monitoren en hoe we dat hebben gedaan.

We hadden het volgende:

  • OpenShift
  • Helm
  • Prometheus


Voor het werken met de Java-applicatie was alles vrij eenvoudig en transparant, om precies te zijn:

1) Toevoegen aan build.gradle

 implementation "io.micrometer:micrometer-registry-prometheus"

2) Start Prometheus met configuratie

 - job_name: 'job-name'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    kubernetes_sd_configs:
    - role: pod
      namespaces:
        names:
          - 'name'

3) Toevoegen van weergave in Grafana

Het was allemaal vrij eenvoudig en rechttoe rechtaan totdat het moment aanbrak waarop we de databases die zich bij ons in de namespace bevinden wilden monitoren (ja, dat is slecht, dat doet niemand, maar soms gebeurt het).

Hoe werkt dit?

Naast de pod met PostgreSQL en Prometheus hebben we nog een andere entiteit nodig — de exporter.

De exporter is in abstracte zin een agent die metrics verzamelt van de applicatie of zelfs de server. De PostgreSQL-exporter is geschreven in Go, werkt op basis van het uitvoeren van SQL-scripts op de database en haalt vervolgens de verkregen resultaten binnen bij Prometheus. Dit stelt ons ook in staat om de verzamelde metrics uit te breiden door onze eigen toe te voegen.

We deployen het als volgt (voorbeeld deployment.yaml, zonder verplichtingen):


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

We hebben ook een service en image stream nodig voor hem.

Na de deployment willen we heel graag dat alles elkaar ziet.

We voegen het volgende stukje toe aan de Prometheus-config:

  - job_name: 'postgres_exporter'
    metrics_path: '/metrics'
    scrape_interval: 5s
    dns_sd_configs:
    - names:
      - 'postgres-exporter'
      type: 'A'
      port: 9187

En hier begon alles te werken, het enige dat overbleef was om al dit goed in Grafana toe te voegen en van het resultaat te genieten.

Naast de mogelijkheid om je eigen verzoeken toe te voegen, kun je in Prometheus de instellingen wijzigen om gerichter de benodigde metrics te verzamelen.

Op dezelfde manier is het gedaan voor:

  • Kafka
  • Elasticsearch
  • Mongo

P.S. Alle gegevens over namen, poorten en andere zaken zijn uit de lucht gegrepen en bevatten geen informatie.

Nuttige links:
Lijst van verschillende exporters

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster