Cisco Nexus mit Prometheus und Grafana Dashboard + SNMPv3

Wenn du Daten über einen aktuellen Cisco Nexus abfragen und übersichtlich darstellen möchtest, dann verwende die folgende Anleitung.

Installation Docker-Compose

apt install docker-compose

Git Clone

git clone https://github.com/antoniopersiano/grafana4youtube.git
docker-compose up
chmod 777 volumes/ -R

Docker im Hintergrund laufen lassen

docker-compose up -d 
docker-compose ps

nano /opt/grafana4youtube/volumes/prometheus-config/prometheus.yml

global:
  scrape_interval: 60s  # How frequently to scrape targets
  scrape_timeout: 55s
  evaluation_interval: 60s  # How frequently to evaluate rules


scrape_configs:
  - job_name: 'backup-ro'  # Replace with your job name
    static_configs:
      - targets: ['192.168.6.30:9100']  # Replace with your application service name and port
  - job_name: 'snmp'
    static_configs:
      - targets:
        - 192.168.4.17:161  # IP address of the SNMP device
    metrics_path: /snmp
    params:
      auth: [public_v2]
      module: [if_mib]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.6.30:9116  # The SNMP exporter's address
  - job_name: 'snmp_nexus'
    static_configs:
      - targets:
          - 192.168.4.11:161   # Nexus mgmt0 IP
    metrics_path: /snmp
    params:
      module: [nexus_interfaces]
      auth: [nexus_v3]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.6.30:9116   # snmp_exporter läuft lokal

nano /opt/grafana4youtube/volumes/snmp-exporter-config/snmp.yml und folgende Abschnitte hinzufügen:

auths:
    nexus_v3:                    # Frei wählbarer Name, wird später in der URL verwendet
    community: ""                 # Leer lassen bei SNMPv3
    security_level: authPriv      # authNoPriv | authPriv | noAuthNoPriv
    username: USERNAME           # SNMPv3 Username
    password: 'SECURE_PASSWORD'  # Auth-Passwort (min. 8 Zeichen)
    auth_protocol: SHA            # MD5 | SHA | SHA224 | SHA256 | SHA384 | SHA512
    priv_protocol: AES            # DES | AES | AES192 | AES256
    priv_password: 'SECURE_PASSWORD'  # Privacy-Passwort
    version: 3

modules:
  nexus_interfaces:
    walk:
      - 1.3.6.1.2.1.2.2          # ifTable
      - 1.3.6.1.2.1.31.1.1       # ifXTable (64-bit Counters, Descriptions)
      - 1.3.6.1.2.1.1.3          # sysUpTime
      - 1.3.6.1.2.1.1.5          # sysName
      - 1.3.6.1.2.1.2.2.1.14   # ifInErrors
      - 1.3.6.1.2.1.2.2.1.20   # ifOutErrors
      - 1.3.6.1.2.1.2.2.1.13   # ifInDiscards
      - 1.3.6.1.2.1.2.2.1.19   # ifOutDiscards
      - 1.3.6.1.2.1.47.1.1.1     # entPhysicalTable (Hardware-Info)
      - 1.3.6.1.4.1.9.9.109.1.1.1 # Cisco CPU MIB
      - 1.3.6.1.4.1.9.9.48.1.1.1  # Cisco Memory MIB
    get:
      - 1.3.6.1.2.1.1.3.0        # sysUpTime
      - 1.3.6.1.2.1.1.5.0        # sysName
    metrics:
      - name: sysUpTime
        oid: 1.3.6.1.2.1.1.3.0
        type: gauge
        help: "System Uptime in Hundertstelsekunden"
      - name: sysName
        oid: 1.3.6.1.2.1.1.5.0
        type: DisplayString
        help: "Hostname des Systems"
      - name: ifOperStatus
        oid: 1.3.6.1.2.1.2.2.1.8
        type: gauge
        help: "Interface Status (1=up, 2=down)"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
          - labels: [ifIndex]
            labelname: ifAlias
            oid: 1.3.6.1.2.1.31.1.1.1.18
            type: DisplayString
      - name: ifHCInOctets
        oid: 1.3.6.1.2.1.31.1.1.1.6
        type: counter
        help: "Eingehende Bytes (64-bit)"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
          - labels: [ifIndex]
            labelname: ifAlias
            oid: 1.3.6.1.2.1.31.1.1.1.18
            type: DisplayString
      - name: ifHCOutOctets
        oid: 1.3.6.1.2.1.31.1.1.1.10
        type: counter
        help: "Ausgehende Bytes (64-bit)"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
          - labels: [ifIndex]
            labelname: ifAlias
            oid: 1.3.6.1.2.1.31.1.1.1.18
            type: DisplayString
      - name: ifHighSpeed
        oid: 1.3.6.1.2.1.31.1.1.1.15
        type: gauge
        help: "Interface Speed in Mbit/s"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
      - name: ifInErrors
        oid: 1.3.6.1.2.1.2.2.1.14
        type: counter
        help: "Fehler eingehend"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
      - name: ifOutErrors
        oid: 1.3.6.1.2.1.2.2.1.20
        type: counter
        help: "Fehler ausgehend"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
      - name: ifInDiscards
        oid: 1.3.6.1.2.1.2.2.1.13
        type: counter
        help: "Discards eingehend"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
      - name: ifOutDiscards
        oid: 1.3.6.1.2.1.2.2.1.19
        type: counter
        help: "Discards ausgehend"
        indexes:
          - labelname: ifIndex
            type: gauge
        lookups:
          - labels: [ifIndex]
            labelname: ifDescr
            oid: 1.3.6.1.2.1.2.2.1.2
            type: DisplayString
      - name: cpmCPUTotal5secRev
        oid: 1.3.6.1.4.1.9.9.109.1.1.1.1.6
        type: gauge
        help: "CPU Auslastung 5 Sekunden"
        indexes:
          - labelname: cpmCPUTotalIndex
            type: gauge
      - name: cpmCPUTotal1minRev
        oid: 1.3.6.1.4.1.9.9.109.1.1.1.1.7
        type: gauge
        help: "CPU Auslastung 1 Minute"
        indexes:
          - labelname: cpmCPUTotalIndex
            type: gauge
      - name: cpmCPUTotal5minRev
        oid: 1.3.6.1.4.1.9.9.109.1.1.1.1.8
        type: gauge
        help: "CPU Auslastung 5 Minuten"
        indexes:
          - labelname: cpmCPUTotalIndex
            type: gauge
      - name: ciscoMemoryPoolUsed
        oid: 1.3.6.1.4.1.9.9.48.1.1.1.5
        type: gauge
        help: "Genutzter Speicher in Bytes"
        indexes:
          - labelname: ciscoMemoryPoolIndex
            type: gauge
        lookups:
          - labels: [ciscoMemoryPoolIndex]
            labelname: ciscoMemoryPoolName
            oid: 1.3.6.1.4.1.9.9.48.1.1.1.2
            type: DisplayString
      - name: ciscoMemoryPoolFree
        oid: 1.3.6.1.4.1.9.9.48.1.1.1.6
        type: gauge
        help: "Freier Speicher in Bytes"
        indexes:
          - labelname: ciscoMemoryPoolIndex
            type: gauge
        lookups:
          - labels: [ciscoMemoryPoolIndex]
            labelname: ciscoMemoryPoolName
            oid: 1.3.6.1.4.1.9.9.48.1.1.1.2
            type: DisplayString

Download Nexus Dashboard