Surveillance de Postgres dans Openshift

Bonjour à tous les habitants de Habr !

Aujourd'hui, je veux vous parler de notre envie de surveiller Postgres et quelques autres entités à l'intérieur du cluster OpenShift, et comment nous l'avons fait.

Nous avions en entrée :

  • Openshift
  • Helm
  • Prometheus


Pour travailler avec l'application Java, tout était plutôt simple et clair, ou pour être plus précis :

1) Ajout dans build.gradle

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

2) Lancer Prometheus avec la configuration

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

3) Ajout de l'affichage dans Grafana

Tout était assez simple et prosaïque jusqu'à ce que le moment de surveiller les bases de données qui se trouvent à proximité dans le namespace soit arrivé (oui, c'est mal, personne ne fait ça, mais il y a des circonstances).

Comment cela fonctionne-t-il ?

En plus du pod contenant Postgres et de Prometheus lui-même, nous avons besoin d'une autre entité : l'exporter.

Un exporter, de manière abstraite, est un agent qui collecte des métriques d'une application ou même de serveurs. L'exporter pour Postgres est écrit en Go, fonctionne sur le principe d'exécuter des scripts SQL dans la base, puis récupère les résultats obtenus par Prometheus. Cela permet également d'élargir les métriques collectées en ajoutant les vôtres.

Nous le déployons de cette manière (exemple de deployment.yaml, sans engagement) :


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

Il a également besoin d'un service et d'un imagestream.

Après le déploiement, nous souhaitons vraiment que tout le monde puisse se voir.

Ajoutons dans la configuration de Prometheus un extrait comme celui-ci :

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

Et à ce moment-là, tout a fonctionné, il ne reste plus qu'à ajouter tout cela dans Grafana et profiter du résultat.

En plus de la possibilité d'ajouter vos propres requêtes, dans prometheus, il est possible de modifier les paramètres pour collecter plus précisément les métriques nécessaires.

De la même manière, cela a été fait pour :

  • Kafka
  • Elasticsearch
  • Mongo

P.S. Toutes les données concernant les noms, les ports et autres ont été inventées et ne contiennent aucune information.

Liens utiles :
Liste des différents exportateurs

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster