Eine stillstehende IT kostet Firmen bares Geld, dabei können die Gründe für einen Ausfall vielfältig sein. Im Juni dreht sich der Schwerpunkt im ... (mehr)

Generierte Konfiguration

Der "Generator", der aus einer oder mehreren MIBs eine SNMP-Exporter-Konfiguration erzeugt, wird ebenfalls im Projekt-Repository angeboten [8]. Als Voraussetzung müssen NetSNMP sowie die MIBs (Standard und herstellerspezifisch) bereits auf dem System installiert sein. Die Datei "generator.yml" teilt dem Generator mit, welche MIB oder auch nur welcher Teilbereich davon in eine Konfiguration zu übersetzen ist. Im folgenden Beispiel erzeugen wir das Modul "MySwitch" mit den Metriken für Uptime und Interfaces aus der "IF-MIB":

##### generator.yml
```yml
modules:
    MySwitch:
       auth:
          community: TopSecret
       version: 2
       walk:
          - sysUpTime
          - 1.3.6.1.2.1.2 # MIB-2 Interfaces
       lookup:
          - old_index: ifIndex
             new_index: ifDescr

Insbesondere Interface-Metriken werden intern nur mit einer laufenden Nummer, dem "ifIndex", indiziert, was für die spätere Verwendung in Dashboards und Alarmen ein sehr unhandliches Vorgehen darstellt. Der Generator bietet uns allerdings an, Indizes mittels "lookup" zu ersetzen. Im Beispiel wird somit der laufende "ifIndex" durch die passende "ifDescr", beispielsweise "GigabitEthernet 1/0", ersetzt. Nach einem erfolgreichen Lauf des Generators findet sich im selben Verzeichnis eine snmp.yml-Datei, die alle in der MIB vorhandenen Metriken beschreibt. Hier findet sich vom Namen über OID und Type einer Metrik auch die entsprechende lookup-Anweisung (sofern benötigt). Listing 1 zeigt dies. Mit der generierten snmp.yml-Datei starten Sie jetzt den SNMP-Exporter:

/pfad/zum/exporter/snmp_exporter --config.file /pfad/zur/konfiguration/snmp.yml --log.level warn --web.listen-address 127.0.0.1:9119

Einbinden in Prometheus

Prometheus benötigt für jeden abzufragenden Exporter eine entsprechende Scrape-Konfiguration. Hier können globale Werte wie "Interval" und "Timeout" bei Bedarf nochmals überschrieben werden, beispielsweise um langsam antwortende Geräte abzufangen. Die Ziele ("targets") können Sie dynamisch über "Service Discovery" oder statisch über die Scrape-Konfiguration angeben. Um die Konfi­guration dynamischer und wartbarer zu gestalten, lassen sich Targets auch als einzelne JSON-Datei hinterlegen, wo Sie diese zusätzlich noch mit individuellen Labels markieren können (Listing 2). Mittels Service Discovery ("file_sd") findet Prometheus seine Ziele im Betrieb dann auch automatisch an der angegebenen Stelle im Filesystem. [9]

Listing 2: Prometheus-Targets festlegen



##### snmp_scrape.yml &
    - job_name: 'snmp'
      # Override the global default
      scrape_interval: 60s
      scrape_timeout: 50s
      file_sd_configs:
         - files:
            - '/etc/prometheus/targets/*.json'
      metrics_path: /snmp
      params:
         module: [MySwitch]
      relabel_configs:
         - source_labels: [module]
           target_label: __param_module
         - source_labels: [__address__]
           target_label: __param_target
         - target_label: __address__
           replacement: 127.0.0.1:9119
```
#### target.json
[
    {
      "targets": [ "192.168.79.1" ],
      "labels": {
         "hostname": "switch01",
         "module": "MySwitch",
         "manufactor": "cisco",
         "rack": "15"
      }
    }
]

Wichtig in Listing 2 ist "relabel_configs": Da Prometheus die Targets (also die Netzwerkgeräte) direkt abfragen würde, müssen Sie zunächst die IP-Adresse des Targets durch die IP-Adresse des SNMP- Exporter ersetzen. Zusätzlich schreiben wir die IP-Adresse des Targets zurück auf das "Adress Label". Damit erhält jede abgefragte Instanz ihre ursprüngliche IP-Adresse zurück.

Nach dem erfolgreichen Neustart von Prometheus findet sich in der Weboberfläche unter "Targets" jetzt eine neue Rubrik namens "SNMP" mit einer Liste der definierten Targets. Im "Query"-Tab der Weboberfläche können Sie nun die ersten Metriken abfragen. Eine Abfrage nach "ifInOctets" sollte eine Liste der Inferfaces mit den jeweiligen Counterständen ergeben.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023