No voy a decir como instalar estos tres programas, me voy a enfocar a como colectar información de las interfaces con telegraf, guardarlos en una base de datos influx y mostrarlos en grafana. Por supesto que es necesario los tres servicios instalados y corriendo en el host
Configurar los equipos para ser consultados por snmp.
Como ejemplo este es la configuración de un equipo Cisco, en el que usamos la version 2 de SNMP. Es muy importante usar una comunidad de solo lectura ya que la comunidad lectura-escritura puede ser un a vulnerabilidad importante al equipo, otras consideraciones adicionales incluyen solo permitir el uso de SNMP desde determinados orígenes. Permitimos la consulta de SNMP con los siguiente comandos en un equipo Cisco:
print(test)
switch# configure terminal
switch(config)# snmp-server community miSuperClaveSecreta RO
switch(config)# end
switch# wr
Probamos que podamos obtener los datos de SNMP desde el host con telegraf:
snmpwalk -v2c -c miSuperClaveSecreta
Configuración de Telegraf:
El servicio de Telegraf se va a encargar de obtener los datos de las interfaces de los equipos que hayamos configurado. Primero debemos decirle a telegraf que base de datos vamos a usar, así que dentro del largo archivo de configuración de telegraf /etc/telegraf/telegraf.conf
agregamos o descomentamos las siguientes líneas:
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "telegraf"
Ahora agregamos la configuración para snmp en /etc/telegraf/telegraf.d/snmp.conf
recuerda cambiar la comunidad y lista de hosts a monitorear:
[[inputs.snmp]]
agents = [ "192.168.1.100", "10.10.10.33", ]
version = 2
community = "miSuperClaveSecreta"
interval = "30s"
timeout = "5s"
retries = 3
[[inputs.snmp.field]]
name = "hostname"
oid = "RFC1213-MIB::sysName.0"
is_tag = true
[[inputs.snmp.field]]
name = "uptime"
oid = "DISMAN-EXPRESSION-MIB::sysUpTimeInstance"
# IF-MIB::ifTable contiene contadores de entrada y salida del traffico así como errores y paquetes descartados
[[inputs.snmp.table]]
name = "interface"
inherit_tags = [ "hostname" ]
oid = "IF-MIB::ifTable"
# Interface tag - Usado para identificar la interface en la base de datos
[[inputs.snmp.table.field]]
name = "ifDescr"
oid = "IF-MIB::ifDescr"
is_tag = true
# IF-MIB::ifXTable Contiene los contadores High Capacity (HC) que no llegan al límite tan segguido como los contadores ifTable.
[[inputs.snmp.table]]
name = "interface"
inherit_tags = [ "hostname" ]
oid = "IF-MIB::ifXTable"
# Interface tag - Usado para identificar la interface en la base de datos
[[inputs.snmp.table.field]]
name = "ifDescr"
oid = "IF-MIB::ifDescr"
is_tag = true
# EtherLike-MIB::dot3StatsTable Contiene informaci{on detallada de varios errores que se presentan en las interfaces como FCS error, frame too long, etc.
[[inputs.snmp.table]]
name = "interface"
inherit_tags = [ "hostname" ]
oid = "EtherLike-MIB::dot3StatsTable"
# Interface tag - Usado para identificar la interface en la base de datos
[[inputs.snmp.table.field]]
name = "ifDescr"
oid = "IF-MIB::ifDescr"
is_tag = true
Verificamos que nuestra configuración funcione con telegraf -test -config /etc/telegraf/telegraf.d/snmp.conf
lo cual debe de devolver lecturas del los hosts configurados. Si todo sale bien podemos recargar telegraf para empezar a usar la configuración systemctl reload telegraf
Configuración de Grafana:
Creamos un nuevo 'data source' para obtener los datos de Influxdb con los siguientes parámetros:
Name: InfluxDB-Telegraf
URL: http://localhost:8086
Access: Sever
Después creamos un nuevo Dashboard y aquí viene toda la magia. Explico esto para Grafana 7.0 en versiones anteriores puede cambiar algunos detalles de lugar pero en escencia es lo mismo. La consulta (Query) puede quedar de la siguiente manera:
Si estamos consultando un switch de muchos puertos es probable que incorpore mucha información ya que las VLAN son tratadas como una interface independiente, por lo que hay que crear una consulta con una restricción más. Para ello activa la opción 'Toggle text edit mode' y agrega un AND para solo incluir interfaces con el nombre Ethernet
SELECT derivative(mean("ifHCInOctets"), 1s) *8 AS "Input" FROM "autogen"."interface" WHERE ("hostname" ='yourhostname') AND "ifDescr" =~ /(Ethernet).*/ AND $timeFilter GROUP BY time($__interval), "ifDescr" fill(null)
En este ejemplo estamos usando los contadores de enter grande ifHCInOctets pero también está el tráfico de salida ifHCOutOctets y explorando verás que hay otras métricas interesantes que obtener con el mismo método como los paquetes descartados y errores en interfaces.
Finalmente puedes esconder las series que no tienen datos en la pestaña "Legend" - Hide Series; With only nulls, With only zeros. También es útil presentar las series cuando sobre pones el mouse en la gráfica de mayor a menor, para ello activa en la pestaña "Display, Hover tooltip, Sort order: Decreasing"
Nota: Este sitio es estático y no incluye sección de comentarios, si quieres hacer alguna observación, puedes contactarme en twitter @caniculari