Graphite SNMP Counter si trasforma

Sto utilizzando la versione grafica 0.9.10 per leggere ifHCInOctets e ifHCOutOctets , che sto polling con i collectd snmp e plugin collectd ; Sto utilizzando la versione collectd 5.1.0.

I dati arrivano in grafite senza problemi; tuttavia, voglio fare un grafico come bit per secondo. Per verificare se le mie statistiche sono corrette, ho iniziato un download di un CD e ho visto il tasso di download … variava tra 1.0Mbps e 2.0Mbps.

  • Come è ansible submit e-mail a un dominio senza un record MX?
  • Il Grande Firewall di Cina Modifica X-Forwarded-For
  • Individuare i dispositivi all'interno di un edificio
  • Capacità gigabit
  • Collegamento di 2 VM con Windows 7
  • PXE inizia l'avvio di host LACP su Force10 S50N con FTOS
  • Il senso comune dice che è necessario moltiplicare i contatori Octets per 8 per get bit; tuttavia, sembra che devo dividere con 8 per rendere correttamente il display a grafite.

    Quando si moltiplichi con un fattore di scala di 0.125, la scale(scaleToSeconds(nonNegativeDerivative(<SERIES>), 60),0.125) , la formula converte correttamente in bit al secondo e vedo numbers tra 1Mpbs e 2Mbps …

    Scala corretta - 0.125

    Quando mi moltiplicherò con un fattore di scala di 8.0, la scale(scaleToSeconds(nonNegativeDerivative(<SERIES>), 60),8) , i risultati sono ovviamente sbagliati … il grafico cala a 120Mbps. So che è sbagliato, perché questo è un modem via cavo residenziale con un cappuccio da 5M.

    Scala errata

    Domanda : se sto inviando ottetti a grafite, perché la scale(<foo>, 8) produce risultati errati?


    /opt/collectd/etc/collectd.conf

     LoadPlugin syslog LoadPlugin cpu LoadPlugin interface LoadPlugin load LoadPlugin memory LoadPlugin network LoadPlugin snmp LoadPlugin write_graphite <Plugin snmp> <Data "std_traffic"> Type "if_octets" Table true Instance "IF-MIB::ifName" Values "IF-MIB::ifHCInOctets" "IF-MIB::ifHCOutOctets" </Data> <Host "fw.pennington.net"> Address "172.16.1.1" Version 2 Community "public" Collect "std_traffic" Interval 60 </Host> </Plugin> <Plugin write_graphite> <Carbon> Host "localhost" Port "2003" Prefix "" Postfix "" StoreRates false AlwaysAppendDS false EscapeCharacter "_" </Carbon> </Plugin> 

    /opt/graphite/conf/storage-schema.conf:

     [carbon] pattern = ^carbon\. networkingntions = 60s:90d [default] pattern = .* networkingntions = 60s:1w, 5m:1y 

    /opt/graphite/conf/carbon.conf:

     [cache] USER = carbon MAX_CACHE_SIZE = inf MAX_UPDATES_PER_SECOND = 500 MAX_CREATES_PER_MINUTE = 50 LINE_RECEIVER_INTERFACE = 0.0.0.0 LINE_RECEIVER_PORT = 2003 ENABLE_UDP_LISTENER = False UDP_RECEIVER_INTERFACE = 0.0.0.0 UDP_RECEIVER_PORT = 2003 PICKLE_RECEIVER_INTERFACE = 0.0.0.0 PICKLE_RECEIVER_PORT = 2004 USE_INSECURE_UNPICKLER = False CACHE_QUERY_INTERFACE = 0.0.0.0 CACHE_QUERY_PORT = 7002 USE_FLOW_CONTROL = True LOG_UPDATES = False WHISPER_AUTOFLUSH = False [relay] LINE_RECEIVER_INTERFACE = 0.0.0.0 LINE_RECEIVER_PORT = 2013 PICKLE_RECEIVER_INTERFACE = 0.0.0.0 PICKLE_RECEIVER_PORT = 2014 RELAY_METHOD = rules REPLICATION_FACTOR = 1 DESTINATIONS = 127.0.0.1:2004 MAX_DATAPOINTS_PER_MESSAGE = 500 MAX_QUEUE_SIZE = 10000 USE_FLOW_CONTROL = True [aggregator] LINE_RECEIVER_INTERFACE = 0.0.0.0 LINE_RECEIVER_PORT = 2023 PICKLE_RECEIVER_INTERFACE = 0.0.0.0 PICKLE_RECEIVER_PORT = 2024 DESTINATIONS = 127.0.0.1:2004 REPLICATION_FACTOR = 1 MAX_QUEUE_SIZE = 10000 USE_FLOW_CONTROL = True MAX_DATAPOINTS_PER_MESSAGE = 500 MAX_AGGREGATION_INTERVALS = 5 

    Uscita da whisper-fetch.py

     root@tsunami:/opt/graphite/conf# python /usr/local/bin/whisper-fetch.py --pretty /opt/graphite/storage/whisper/fw_pennington_net/snmp/if_octets-Ethernet0_0/rx.wsp Mon Sep 10 02:53:00 2012 110454375894.000000 ... Tue Sep 11 02:50:00 2012 110532796093.000000 Tue Sep 11 02:51:00 2012 110532819931.000000 <------------ Correct Tue Sep 11 02:52:00 2012 None root@tsunami:/opt/graphite/conf# 

    Uscita dall'interface di show interface eth0/0

     mpenning-fw# sh int eth0/0 Interface Ethernet0/0 "", is up, line protocol is up Hardware is 88E6095, BW 100 Mbps, DLY 100 usec Auto-Duplex(Full-duplex), Auto-Speed(100 Mbps) Description: TIME WARNER 5Mbps circuit Available but not configured via nameif MAC address 0019.0726.4a39, MTU not set IP address unassigned 157040376 packets input, 110532814004 bytes, 0 no buffer ^^^^^^^^^^^^^^^^^^ Received 68921847 broadcasts, 0 runts, 0 giants 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 0 L2 decode drops 8589974681 switch ingress policy drops 57851429 packets output, 8036229250 bytes, 0 underruns 0 output errors, 0 collisions, 0 interface resets 0 babbles, 0 late collisions, 0 deferred 0 lost carrier, 0 no carrier 0 rate limit drops 0 switch egress policy drops mpenning-fw# 

  • Graphiti / Graphite utilizzando Apache con Proxy e BasicAuth richiede l'authorization per each URL / richiesta
  • Ottenere il cliente negato quando si accede a uno script grafico wsgi
  • Come si elimina un contatore nel sussurro di grafite?
  • Come si fa a pubblicare statsd stats per il consumo di grafite?
  • Autenticazione LDAP con Graphite
  • Pianificazione delle capacità del disco per Whisper / Graphite
  • 3 Solutions collect form web for “Graphite SNMP Counter si trasforma”

    Se vuoi bit al secondo, devi specificare 1 invece di 60 come secondo argomento alla function scaleToSeconds() , come vuoi al secondo, non al minuto. (Mnemonico: è per secondi, non per secondi 🙂

    Ecco la patch originale che ha implementato la function; può chiarire.

    Ho passato ore cercando di far funzionare correttamente in Grafana v2.6 e non ho trovato la soluzione giusta. Quindi qui è:

    1. Assicurarsi di avere la giusta Aggregazione di archiviazione definita in /etc/carbon/storage-aggregation.conf

    Ho tutti i miei dispositivi di networking prefissati con la net

    [net] pattern = ^net.* networkingntions = 10s:7d,5m:180d,5m:5y

    1. Creare /etc/collectd/collectd.conf.d/snmp.conf e aggiungere quanto segue:

       FQDNLookup true AutoLoadPlugin true Interval 10 LoadPlugin syslog <Plugin syslog> LogLevel info </Plugin> LoadPlugin contextswitch LoadPlugin cpu LoadPlugin df LoadPlugin entropy LoadPlugin interface LoadPlugin irq LoadPlugin load LoadPlugin memory LoadPlugin processes #LoadPlugin sensors LoadPlugin swap LoadPlugin unixsock LoadPlugin users LoadPlugin write_graphite <Plugin write_graphite> <Node "stats"> Host "stats.foo.com" Port "2003" Protocol "tcp" LogSendErrors true Prefix "net." SeparateInstances true StoreRates true AlwaysAppendDS false EscapeCharacter "_" </Node> </Plugin> <Plugin unixsock> SocketFile "/var/run/collectd-unixsock" SocketGroup "adm" SocketPerms "0660" </Plugin> <Plugin df> # ignore rootfs; else, the root file-system would appear twice, causing # one of the updates to fail and spam the log FSType rootfs # ignore the usual virtual / temporary file-systems FSType sysfs FSType proc FSType devtmpfs FSType devpts FSType tmpfs FSType fusectl FSType cgroup IgnoreSelected true </Plugin> # added a special types.db for cisco devices TypesDB "/usr/share/collectd/types.db" "/usr/share/collectd/types.custom.db" LoadPlugin snmp <Plugin snmp> # the <Data> name is what to <Collect> down in the <Host> blocks # the "Type" must be from the list included in /usr/share/collectd/types.db (or custom.db) <Data "if_octets"> Type "if_octets" Table true # Note: I use ifAlias so that it shows the Interface Descriptions instead just "GigabitEthernet_1_0_0, etc. But of course, make sure you have interface descriptions if you use this :) Instance "IF-MIB::ifAlias" Values "IF-MIB::ifHCInOctets" "IF-MIB::ifHCOutOctets" </Data> <Data "if_errors"> Type "if_errors" Table true Instance "IF-MIB::ifAlias" Values "IF-MIB::ifInErrors" "IF-MIB::ifOutErrors" </Data> <Data "cisco_cpu"> Type "cisco_cpu" Table true Values "CISCO-PROCESS-MIB::cpmCPUTotal5secRev" "CISCO-PROCESS-MIB::cpmCPUTotal1minRev" "CISCO-PROCESS-MIB::cpmCPUTotal5minRev" </Data> <Data "uptime"> Type "uptime" Table false Instance "Uptime" scale 0.01 Values "DISMAN-EVENT-MIB::sysUpTimeInstance" </Data> <Data "memory_free"> Type "memory_free" Table true Instance "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolName" Values "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolFree" </Data> <Data "memory_used"> Type "memory_used" Table true Instance "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolName" Values "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolUsed" </Data> # Hosts: <Host "rtr"> Address "192.168.1.1" Version 2 Community "public" Collect "if_octets" "cisco_cpu" "uptime" Interval 10 </Host> <Host "switch"> Address "192.168.1.254" Version 2 Community "public" Collect "if_octets" "cisco_cpu" "uptime" Interval 10 </Host> </Plugin> 

    Ecco il custom.db: (non ricordo where ho ottenuto l'originale, ma grazie a quel ragazzo!)

     if_stats ifHCInOctets:COUNTER:0:U, ifHCOutOctets:COUNTER:0:U, ifHCInUcastPkts:COUNTER:0:U, ifHCInMulticastPkts:COUNTER:0:U, ifHCInBroadcastPkts:COUNTER:0:U, ifHCOutUcastPkts:COUNTER:0:U, ifHCOutMulticastPkts:COUNTER:0:U, ifHCOutBroadcastPkts:COUNTER:0:U, ifInDiscards:COUNTER:0:U, ifInErrors:COUNTER:0:U, ifOutDiscards:COUNTER:0:U, ifOutErrors:COUNTER:0:U if_octets_hc ifHCInOctets:COUNTER:0:U, ifHCOutOctets:COUNTER:0:U if_packets_hc ifHCInUcastPkts:COUNTER:0:U, ifHCInMcastPkts:COUNTER:0:U, ifHCInBcastPkts:COUNTER:0:U, ifHCOutUcastPkts:COUNTER:0:U, ifHCOutMcastPkts:COUNTER:0:U, ifHCOutBcastPkts:COUNTER:0:U if_drop_discard_err_que ifInDiscards:COUNTER:0:U, ifInErrors:COUNTER:0:U, ifOutDiscards:COUNTER:0:U, ifOutErrors:COUNTER:0:U if_rgpackets ifInUcastPkts:COUNTER:0:U, ifInNUcastPkts:COUNTER:0:U, ifOutUcastPkts:COUNTER:0:U, ifOutNUcastPkts:COUNTER:0:U sensors sensorValue:GAUGE:U:U, sensorThreshold:GAUGE:U:U uptime uptime:GAUGE:U:U cisco_cpu cpu5sec:GAUGE:0:100, cpu1min:GAUGE:0:100, cpu5min:GAUGE:0:100 routes ipv4routes:GAUGE:0:U, ipv6routes:GAUGE:0:U, mcastroutes:GAUGE:0:U ipsla rttAdmNumDistBkt:GAUGE:0:200, rttAdmDistInt:GAUGE:0:200, rttTotalsInit:COUNTER:0:U, rttCollectDrops:COUNTER:0:U, rttCollectTimeouts:COUNTER:0:U, rttCptComplTimeMn:GAUGE:0:100000, rttCptComplTimeMx:GAUGE:0:100000, rttCptSumCmpTm2Hi:COUNTER:0:U, rttCptSumCmpTm2Lo:COUNTER:0:U, rttCptSumCmpTm:COUNTER:0:U, rttCptOverThres:COUNTER:0:U ipslaminimal rttCptCompletions:COUNTER:0:U ipsla2 rttCollectTimeouts:COUNTER:0:U 

    Se qualcuno ha la configuration corretta (e types.custom.db ) per tenere traccia di altre metriche Cisco come alimentazione, duplex, fan, (ESPECIALLY) NBAR, ecc.

    In Grafana, configurare il grafico come così:

     alias(scale(scaleToSeconds(net.rtr.snmp.if_octets.RTR-Outside-Gi0_0.rx, 0.125), 3600), 'Download') 

    Dovresti sostituire net.rtr.snmp.if_octets.RTR-Outside-Gi0_0 con il nome del dispositivo e ifAlias

    Sto eseguendo Graphite 0.9.9 e scaleToSeconds non è disponibile per me. Per aggirare il problema è necessario capire in dettaglio la metrica … Prendi il mio esempio:

    Grafico di utlizzazione dell'interfaccia 1000baseT

    Il valore Y è in milioni e non in Mbps. È ansible verificare l'impostazione di yUnitSystem = none nel URL del grafico. In secondo luogo, un Octet è 8 bit di dati che è un byte. Il mio picco di 2000000000 byte (ottetti) è un metro al minuto per rendere più senso lascia fare math:

    2000000000B / 60s ≈ 33333333B / s ≈ 32 megabyte / s ≈ 254 megabit / s

    254 Mbps sull'interface Gigabit ethernet (1000 Mbps) è ben dentro la sua capacità. Spero che aiuti.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.