Monitoraggio dei postgre all'interno di Openshift

Buona giornata, abitanti di Habr!

Oggi voglio raccontarti come volevamo davvero monitorare Postgres e un paio di altre entità all'interno del cluster OpenShift e come lo abbiamo fatto.

All'ingresso avevano:

  • OpenShift
  • Casco
  • Prometeo


Per lavorare con un'applicazione Java, tutto era abbastanza semplice e trasparente, o per essere più precisi:

1) Aggiunta a build.gradle

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

2) Esegui prometheus con la configurazione

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

3) Aggiunta di un display a Grafana

Tutto era abbastanza semplice e prosaico finché non è arrivato il momento di monitorare le basi che si trovano nelle vicinanze del nostro spazio dei nomi (sì, questo è un male, nessuno lo fa, ma accadono cose diverse).

Come funziona?

Oltre al pod con Postgres e Prometheus stesso, abbiamo bisogno di un'altra entità: l'esportatore.

Un esportatore in un concetto astratto è un agente che raccoglie parametri da un'applicazione o anche da un server. Per l'esportatore Postgres, è scritto in Go, funziona secondo il principio dell'esecuzione di script SQL all'interno del database e quindi Prometheus prende i risultati ottenuti. Ciò ti consente anche di espandere le metriche raccolte aggiungendone di tue.

Distribuiamolo in questo modo (esempio deploy.yaml, non vincolante):


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

Richiedeva anche un servizio e un flusso di immagini

Dopo la distribuzione, vogliamo davvero che tutti si vedano.

Aggiungi il seguente pezzo alla configurazione di Prometheus:

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

E poi tutto ha funzionato, non resta che aggiungere tutta questa roba alla grafana e goderci il risultato.

Oltre alla possibilità di aggiungere le tue query, puoi modificare le impostazioni in prometheus, raccogliendo metriche più mirate.

Ciò è stato fatto in modo simile per:

  • Kafka
  • elasticsearch
  • Mongo

PS Tutti i dati su nomi, porti e il resto sono presi dal cielo e non contengono alcuna informazione.

Link utili:
Elenco dei vari esportatori

Fonte: habr.com

Aggiungi un commento