Navigation

    BinBashFR
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Monitoring DELL avec Prometheus

    Technos
    grafana prometheus snmp-exporter
    1
    1
    711
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • remi
      remi last edited by remi

      Voici une solution pour superviser un serveur DELL via Prometheus/AlertManager/Grafana.

      Pré-requis

      • Un Kubernetes
      • Un Prometheus
      • Un Alertmanager
      • Un Grafana
      • Dell OMSA avec le SNMP activé.

      Sur votre poste de travail (ou ailleurs), au choix :

      • Golang >= 1.9
      • Docker pour utiliser l’image Docker fournie par Prometheus. J’ai plutôt utilisé directement Go.

      Installer snmp-exporter

      snmp-exporter va vous permettre de faire la passerelle entre votre OMSA qui devrait être accessible via SNMP et votre Prometheus.
      Pour commencer, il faut ajouter les OIDs DELL à snmp-exporter. Voici la procédure :

      • Installez sur votre machine snmp-exporter (il vous faudra peut-être la librairie libsnmp-dev) :
      git clone https://github.com/prometheus/snmp_exporter.git
      cd snmp_exporter/generator
      go get -d
      go build
      
      • Comme indiqué dans la documentation, il faut récupérer quelques mibs pour fonctionner avec les OIDs déjà déclarés dans le fichier generator.yml.
      cd $HOME/.snmp/mibs
      wget ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
      tar xvf v2.tar.gz
      mv auto/mibs/v2/* .
      rm -fr auto
      wget ftp://ftp.servertech.com/Pub/SNMP/sentry3/Sentry3.mib
      wget http://dl.ubnt-ut.com/snmp/UBNT-UniFi-MIB
      wget http://dl.ubnt-ut.com/snmp/UBNT-MIB
      wget ftp://ftp.apc.com/apc/public/software/pnetmib/mib/421/powernet421.mib
      wget https://global.download.synology.com/download/Document/MIBGuide/Synology_MIB_File.zip
      unzip Synology_MIB_File.zip
      wget https://www.arista.com/assets/data/docs/MIBS/ARISTA-SW-IP-FORWARDING-MIB.txt
      wget https://www.paloaltonetworks.com/content/dam/pan/en_US/assets/zip/technical-documentation/snmp-mib-modules/PAN-MIB-MODULES-7.0.zip
      unzip PAN-MIB-MODULES-7.0.zip
      wget https://www.arista.com/assets/data/docs/MIBS/ARISTA-ENTITY-SENSOR-MIB.txt
      wget https://www.arista.com/assets/data/docs/MIBS/ARISTA-SMI-MIB.txt
      wget https://dl.ubnt.com/firmwares/airos-ubnt-mib/ubnt-mib.zip
      unzip ubnt-mib.zip
       rm *.zip *.tar.gz
       wget http://www.circitor.fr/Mibs/Html/D/DELL-RAC-MIB.php
       wget http://www.circitor.fr/Mibs/Mib/D/DELL-SHADOW-MIB.mib
      
      • Dans les MIBs DELL, on retrouve souvent du type DellString qui est traduit par le générateur de snmp-exporter comme du OctetString. Pour que cette supervision fonctionne, il faut passer par du DisplayString. Deux méthodes pour y arriver :
        • patcher le générateur. J’avais commencé comme ça, mais avec la récente mise à jour le patch ne fonctionne plus.
        • remplacer les DellString par du DisplayString. Ce n’est peut-être pas le mieux, mais pour le besoin, ça ira !
      sed -i 's/DellString/DisplayString/g' 10892.mib
      sed -i 's/DellString/DisplayString/g' DELL-RAC-MIB.txt
      
      • On rajoute les OIDs DELL qui nous intéressent dans le fichier generator.yml :
        dell:
          walk:
            - 1.3.6.1.4.1.674.10892 # dell server3
            - 1.3.6.1.4.1.674.10893 # dell storage
      
      • On peut maintenant générer le snmp.yml :
       ./generator generate
      INFO[0000] Loading MIBs from $HOME/.snmp/mibs:/usr/share/snmp/mibs  source="net_snmp.go:122"
      [...]
      INFO[0004] Config written to snmp_exporter/generator/snmp.yml  source="main.go:71"
      
      • Récupérez ce snmp.yml, il faudra le passer en paramètre de snmp-exporter. Plusieurs façons de le faire (stocker ce fichier sur un volume Kubernetes, recréer l’image docker snmp-exporter en y incluant votre version du fichier snmp.yml…). Je pensais le stocker dans un ConfigMap, mais la taille du ConfigMap est limitée et le fichier snmp.yml trop gros !

      J’ai fait le choix de partir sur un InitContainer qui récupère mon fichier snmp.yml sur un serveur web interne pour le stocker dans un volume de type EmptyDir. Mon pod qui partage donc ce volume peut ensuite y accéder. En cas de mise à jour du fichier snmp.yml, un simple delete du pod et votre nouveau fichier sera récupéré.

      Deployment k8s

      Voilà le deployment que j’ai utilisé pour snmp-exporter :

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          app: snmp-exporter
        name: snmp-exporter
        namespace: prometheus
      spec:
        selector:
          matchLabels:
            app: snmp-exporter
        template:
          metadata:
            labels:
              app: snmp-exporter
          spec:
            initContainers:
            - image: debian:stable-slim
              name: get-snmp-conf
              command:
                  - /bin/bash
                  - -c
                  - |
                    apt-get update
                    apt-get install --no-install-recommends -y wget
                    cd /etc/snmp_exporter
                    wget http://votre_serveur/snmp.yml
              volumeMounts:
              - mountPath: /etc/snmp_exporter
                name: snmp-mibs
            containers:
            - image: prom/snmp-exporter:v0.10.0
              imagePullPolicy: IfNotPresent
              livenessProbe:
                failureThreshold: 3
                httpGet:
                  path: /metrics
                  port: 9116
                  scheme: HTTP
                initialDelaySeconds: 60
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 10
              name: snmp-exporter
              ports:
              - containerPort: 9116
                protocol: TCP
              readinessProbe:
                failureThreshold: 3
                httpGet:
                  path: /metrics
                  port: 9116
                  scheme: HTTP
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 10
              resources:
                limits:
                  cpu: 500m
                  memory: 128Mi
                requests:
                  cpu: 500m
                  memory: 128Mi
              volumeMounts:
              - mountPath: /etc/snmp_exporter
                name: snmp-mibs
            volumes:
            - name: snmp-mibs
              emptyDir: {}
      

      Service k8s

      Pour chaque serveur DELL à superviser, il vous suffira de créer un service Kubernetes comme cet exemple pour que Prometheus scrape les métriques fournies par snmp-exporter.

      apiVersion: v1
      kind: Service
      metadata:
        annotations:
          prometheus.io/module: dell
          prometheus.io/path: /snmp
          prometheus.io/scheme: http
          prometheus.io/scrape: "true"
          prometheus.io/target: 1.2.3.4
        name: mon_serveur
      spec:
        ports:
        - port: 9116
          protocol: TCP
          targetPort: 9116
        selector:
          app: snmp-exporter
        clusterIP: None
      

      Configuration Prometheus

      Dans la configuration de votre Prometheus, il faudra rajouter la configuration suivante à la suite des relabel_configs du kubernetes-service-endpoints afin de pouvoir exploiter l’annotation module du service Kubernetes :

        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_module]
          separator: ;
          regex: (.*)
          target_label: __param_module
          replacement: $1
          action: replace
      

      Rechargez la configuration de Prometheus (ou laissez faire votre configmap-reloader).

      Vous devriez voir apparaître votre serveur DELL :

      0_1526566157085_service_dell.png

      TODO : je n’ai pas encore créé mon alerting via AlertManager !

      Grafana

      Voilà une première version de mon dashboard DELL.

      0_1526566185335_Status DELL.png

      0_1526570967341_RAID + hard.png

      Le dashboard est disponible ici.

      1 Reply Last reply Reply Quote 0
      • First post
        Last post