Postgres monitoren binnen Openshift

Goedendag, inwoners van Habr!

Vandaag wil ik je vertellen hoe we postgres en een paar andere entiteiten binnen het OpenShift-cluster echt wilden monitoren en hoe we dat hebben gedaan.

Bij de ingang hadden ze:

  • OpenShift
  • Stuurstand
  • Prometheus


Om met een Java-applicatie te werken was alles vrij eenvoudig en transparant, of om preciezer te zijn:

1) Toevoegen aan build.gradle

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

2) Voer prometheus uit met configuratie

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

3) Een beeldscherm toevoegen aan Grafana

Alles was vrij eenvoudig en prozaïsch totdat het moment aanbrak om de bases te monitoren die zich in de buurt van onze naamruimte bevinden (ja, dit is slecht, niemand doet dit, maar er gebeuren verschillende dingen).

Hoe werkt het?

Naast de pod met postgres en prometheus zelf hebben we nog een entiteit nodig: exporteur.

Een exporteur in een abstract concept is een agent die statistieken verzamelt van een applicatie of zelfs een server. Voor Postgres Exporter is het geschreven in Go, het werkt volgens het principe van het uitvoeren van SQL-scripts in de database en vervolgens neemt Prometheus de verkregen resultaten. Hierdoor kunt u de verzamelde statistieken ook uitbreiden door uw eigen statistieken toe te voegen.

Laten we het als volgt implementeren (bijvoorbeeld deployment.yaml, niet-bindend):


---
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 was ook een service en beeldstream voor nodig

Na de inzet willen we heel graag dat iedereen elkaar ziet.

Voeg het volgende stuk toe aan de Prometheus-configuratie:

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

En toen werkte alles, het enige dat overblijft is al dit spul aan de grafana toevoegen en van het resultaat genieten.

Naast de mogelijkheid om uw eigen zoekopdrachten toe te voegen, kunt u de instellingen in prometheus wijzigen, waardoor u meer gerichte statistieken verzamelt.

Dit gebeurde op soortgelijke wijze voor:

  • Kafka
  • Elasticsearch
  • Mongo

PS Alle gegevens over namen, havens en de rest worden uit de lucht gehaald en bevatten geen enkele informatie.

Nuttige links:
Lijst van verschillende exporteurs

Bron: www.habr.com

Voeg een reactie