Surveillance de Postgres dans Openshift

Bonjour, habitants de Habr !

Aujourd'hui, je veux vous dire comment nous voulions vraiment surveiller Postgres et quelques autres entités au sein du cluster OpenShift et comment nous l'avons fait.

A l'entrée ils avaient :

  • OpenShift
  • Casque
  • Prométhée


Pour travailler avec une application java, tout était assez simple et transparent, ou pour être plus précis :

1) Ajout à build.gradle

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

2) Exécutez 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 d'un affichage à Grafana

Tout était assez simple et prosaïque jusqu'au moment de surveiller les bases situées à proximité dans notre espace de noms (oui, c'est mauvais, personne ne fait ça, mais différentes choses se produisent).

Comment ça marche?

En plus du pod avec postgres et prometheus lui-même, nous avons besoin d'une entité supplémentaire : l'exportateur.

Un exportateur dans un concept abstrait est un agent qui collecte des métriques à partir d'une application ou même d'un serveur. Pour l'exportateur postgres, il est écrit en Go, il fonctionne sur le principe de l'exécution de scripts SQL à l'intérieur de la base de données puis prometheus prend les résultats obtenus. Cela vous permet également d'étendre les métriques collectées en ajoutant les vôtres.

Déployons-le comme ceci (exemple de déploiement.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

Cela nécessitait également un service et un flux d'images

Après le déploiement, nous voulons vraiment que tout le monde se voie.

Ajoutez l'élément suivant à la configuration Prometheus :

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

Et puis tout a fonctionné, il ne reste plus qu'à ajouter tout ça à la grafana et profiter du résultat.

En plus de la possibilité d'ajouter vos propres requêtes, vous pouvez modifier les paramètres dans prometheus, collectant ainsi des métriques plus ciblées.

Cela a été fait de la même manière pour :

  • Kafka
  • ElasticSearch
  • Mongo

PS Toutes les données sur les noms, les ports et le reste sont prises depuis les airs et ne contiennent aucune information.

Liens utiles:
Liste de divers exportateurs

Source: habr.com

Ajouter un commentaire