Monitoreo de postgres dentro de Openshift

¡Buenos días, residentes de Habr!

Hoy quiero contarles cómo realmente queríamos monitorear postgres y un par de entidades más dentro del clúster de OpenShift y cómo lo hicimos.

En la entrada tenían:

  • OpenShift
  • Casco
  • Prometeo


Para trabajar con una aplicación java, todo era bastante sencillo y transparente, o para ser más precisos:

1) Agregar a build.gradle

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

2) Ejecute prometheus con configuración

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

3) Agregar una pantalla a Grafana

Todo era bastante simple y prosaico hasta que llegó el momento de monitorear las bases que se encuentran cerca en nuestro espacio de nombres (sí, esto es malo, nadie hace esto, pero suceden cosas diferentes).

¿Como funciona?

Además del pod con postgres y prometheus, necesitamos una entidad más: el exportador.

Un exportador en un concepto abstracto es un agente que recopila métricas de una aplicación o incluso de un servidor. Para el exportador de Postgres, está escrito en Go, funciona según el principio de ejecutar scripts SQL dentro de la base de datos y luego Prometheus toma los resultados obtenidos. Esto también le permite ampliar las métricas recopiladas agregando las suyas propias.

Implementémoslo así (ejemplo: implementación.yaml, no vinculante):


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

También requería un servicio y un flujo de imágenes.

Después del despliegue, realmente queremos que todos se vean.

Agregue la siguiente pieza a la configuración de Prometheus:

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

Y luego todo funcionó, solo queda agregar todo esto a la grafana y disfrutar del resultado.

Además de la posibilidad de agregar sus propias consultas, puede cambiar la configuración en Prometheus, recopilando métricas más específicas.

Esto se hizo de manera similar para:

  • Kafka
  • Elasticsearch
  • Mongo

PD: Todos los datos sobre nombres, puertos y demás se toman del aire y no contienen ninguna información.

Enlaces de interés:
Lista de varios exportadores

Fuente: habr.com

Añadir un comentario