Monitoreo de postgres dentro de Openshift

¡Buenos días residentes de Habr!

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

En la entrada, tenían:

  • OpenShift
  • Timón
  • Prometeo


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

1) Agregando a build.gradle

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

2) Inicie 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 en Grafana

Todo fue bastante simple y prosaico hasta que llegó el momento de monitorear las bases que están cerca de nosotros en el espacio de nombres (sí, esto es malo, nadie lo hace, pero sucede de manera diferente).

¿Cómo funciona esto?


Además del hogar con postgres y prometeo, necesitamos otra entidad: exportador.

Un exportador abstracto es un agente que recopila métricas de una aplicación o incluso de un servidor. Para postgres, el exportador está escrito en Go, funciona según el principio de ejecutar scripts basados ​​en sql dentro, y luego prometheus toma los resultados. También le permite expandir las métricas recopiladas agregando las suyas propias.

Lo implementamos de esta manera (ejemplo de implementación.yaml, no vinculante a nada):

 --- 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 necesitaba 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ó, queda por agregar toda esta bondad al grafano y disfrutar del resultado.

Además de la capacidad de agregar sus propias consultas, en prometheus puede cambiar la configuración y recopilar las métricas necesarias más específicas.

Se realizó un método similar para:

  • Kafka
  • Búsqueda elástica
  • Mongo

PD: Todos los datos sobre nombres, puertos y el resto se toman del techo y no llevan ninguna información.

Enlaces utiles:
Lista de varios exportadores.

Source: https://habr.com/ru/post/467915/


All Articles