Telegraf snmp
Информацию по протоколу snmp можно получать разную: счетчики интерфейсов, статус sla, описание интерфейсов, состав оборудования из entity-mib, счетчики политик qos. Все это можно опрашивать с разными интервалами, например, данные по sla нужны раз в минуту, счетчики интерфейсов и политик раз в пять минут, инвентаризацию раз в сутки. Разные интервалы подразумевают разные конфигурационные файлы для плагина snmp, т.к. интервал указывается для плагина, а не для job'а, как в prometheus/vmagent. Опрашивать все с одним интервалом не получится, т.к. нет необходимости хранить одни и те же данные, например, строковые значения инвертацизации, описаний интерфейсов, ip-адреса, arp'ы и т.п. Еще опрос такого количества таблиц занимает приличное время и в минутный интервал просто не успеть. Это легко проверить, запустив в тестовом режиме telegraf.
$ telegraf -config test.cfg -test
- Если какой-то field будет использоваться как tag, то имя в конфиге будет отличаться. Это связано с использованием ранних версий influxdb, где с наименованием в самой базе случалась каная-то каша. Так появлялись ifName и ifName_1 и я уже не помню что из этого что. Опять же в запросах меньше путаницы будет, когда ifName - это field, а Name - это tag. Позже стал использовать fieldpass , в котором не указывал все field, используемые в качестве tag.
- Вместо имени oid'а используется сам oid, а его имя для удобства указано в комментарии выше. Старая версия telegraf'а при старте запускала в shell'е snmptranslate и чем больше было конфигурационных файлов, тем выше была загрузка cpu. Рестарт был очень неудобен и позже алгоритм немного поменяли на однократный запуск snmptranslate. Все таблицы все равно проверяются в мибах и опросить таблицу совсем без миба не получится.
Пример для cisco ip sla, где не опрашивается вся таблица rttMonLatestRttOperTable (закоменнирован oid), а только два значения из нее. Тэг для замены индекса берется из другой таблицы rttMonCtrlAdmintable. На оборудовании cisco настроен следующий sla:
ip sla 1
icmp-echo 10.4.3.1 source-ip 10.4.3.2
tos 96
threshold 200
owner IPSName-vlanid@AddrA-AddrB
ip sla schedule 1 life forever start-time now
[[inputs.snmp]]
interval = "1m"
agents = [ "cisco" ]
version = 2
community = "public"
#CISCO-RTTMON-MIB::rttMonCtrlAdminOwner.5 = STRING: "IPSName-vlanid@AddrA-AddrB"
[[inputs.snmp.table]]
name = "rttsla"
#oid = "CISCO-RTTMON-MIB::rttMonLatestRttOperTable"
[[inputs.snmp.table.field]]
name = "Descr"
#oid = "CISCO-RTTMON-MIB::rttMonCtrlAdminOwner"
oid = "1.3.6.1.4.1.9.9.42.1.2.1.1.2"
is_tag = true
[[inputs.snmp.table.field]]
name = "icmpResults"
#oid = "CISCO-RTTMON-MIB::rttMonLatestRttOperSense"
oid = "1.3.6.1.4.1.9.9.42.1.2.10.1.2"
[[inputs.snmp.table.field]]
name = "rttAvg"
#oid = "CISCO-RTTMON-MIB::rttMonLatestRttOperCompletionTime"
oid = "1.3.6.1.4.1.9.9.42.1.2.10.1.1"
[inputs.snmp.tagpass]
Descr = [ "*@*" ]
[[inputs.snmp]]
interval = "1m"
agents = [ "huawei" ]
version = 2
community = "public"
# for huawei s5720-ei
#NQA-MIB::nqaAdminCtrlTag."1"."1" = STRING: IPSName-vlanid@AddrA-AddrB
#.1.3.6.1.4.1.2011.5.25.111.2.1.1.3.1.49.1.49 = STRING: IPSName-vlanid@AddrA-AddrB
#index is 1.49.1.49. oid_index_length = 4
#NQA-MIB::nqaResultsCompletions."1"."1".186177.1 = INTEGER: success(1)
#s5720-ei has a history index
[[inputs.snmp.table]]
name = "rttsla"
#oid = "NQA-MIB::nqaAdminCtrlTable"
[[inputs.snmp.table.field]]
name = "Descr"
#oid = "NQA-MIB::nqaAdminCtrlTag"
oid = "1.3.6.1.4.1.2011.5.25.111.2.1.1.3"
is_tag = true
[[inputs.snmp.table.field]]
name = "icmpResults"
#NQA-MIB::nqaResultsCompletions
oid = "1.3.6.1.4.1.2011.5.25.111.4.1.1.3"
oid_index_length = 4
[[inputs.snmp.table.field]]
name = "rttAvg"
#NQA-MIB::nqaResultsRttAvg
oid = "1.3.6.1.4.1.2011.5.25.111.4.1.1.26"
oid_index_length = 4
[inputs.snmp.tagpass]
Descr = [ "*@*" ]
[[inputs.snmp]]
interval = "5m"
agents = [ "cisco_router" ]
version = 2
community = "public"
fieldpass = [ "cbQos*", "bgpPeerState", "bgpPeerFsmEstablishedTransitions", "Duplex" , "Speed" , "ifAdminStatus" , "ifOperStatus" , "ifInDiscards" , "ifInErrors" , "ifOutDiscards" , "ifOutErrors" , "ifHCInOctets" , "ifHCInUcastPkts" , "ifHCInMulticastPkts" , "ifHCInBroadcastPkts" , "ifHCOutOctets" , "ifHCOutUcastPkts" , "ifHCOutMulticastPkts" , "ifHCOutBroadcastPkts" ]
tagexclude = [ "ifIndex" ]
[[inputs.snmp.table]]
name = "interface32"
#oid = "IF-MIB::ifTable"
[[inputs.snmp.table.field]]
name = "Name"
#IF-MIB::ifName
oid = "1.3.6.1.2.1.31.1.1.1.1"
is_tag = true
[[inputs.snmp.table.field]]
name = "Speed"
#IF-MIB::ifHighSpeed
oid = "1.3.6.1.2.1.31.1.1.1.15"
[[inputs.snmp.table.field]]
name = "Duplex"
#EtherLike-MIB::dot3StatsDuplexStatus
oid = "1.3.6.1.2.1.10.7.2.1.19"
[[inputs.snmp.table.field]]
name = "ifAdminStatus"
#IF-MIB::ifAdminStatus
oid = "1.3.6.1.2.1.2.2.1.7"
[[inputs.snmp.table.field]]
name = "ifOperStatus"
#IF-MIB::ifOperStatus
oid = "1.3.6.1.2.1.2.2.1.8"
[[inputs.snmp.table.field]]
name = "ifInDiscards"
#IF-MIB::ifInDiscards
oid = "1.3.6.1.2.1.2.2.1.13"
[[inputs.snmp.table.field]]
name = "ifInErrors"
#IF-MIB::ifInErrors
oid = "1.3.6.1.2.1.2.2.1.14"
[[inputs.snmp.table.field]]
name = "ifOutDiscards"
#IF-MIB::ifOutDiscards
oid = "1.3.6.1.2.1.2.2.1.19"
[[inputs.snmp.table.field]]
name = "ifOutErrors"
#IF-MIB::ifOutErrors
oid = "1.3.6.1.2.1.2.2.1.20"
[[inputs.snmp.table]]
name = "interface64"
#oid = "IF-MIB::ifXTable"
[[inputs.snmp.table.field]]
name = "Name"
#IF-MIB::ifName
oid = "1.3.6.1.2.1.31.1.1.1.1"
is_tag = true
[[inputs.snmp.table.field]]
name = "Speed"
#IF-MIB::ifHighSpeed
oid = "1.3.6.1.2.1.31.1.1.1.15"
[[inputs.snmp.table.field]]
name = "ifHCInOctets"
#IF-MIB::ifHCInOctets
oid = "1.3.6.1.2.1.31.1.1.1.6"
[[inputs.snmp.table.field]]
name = "ifHCInUcastPkts"
#IF-MIB::ifHCInUcastPkts
oid = "1.3.6.1.2.1.31.1.1.1.7"
[[inputs.snmp.table.field]]
name = "ifHCInMulticastPkts"
#IF-MIB::ifHCInMulticastPkts
oid = "1.3.6.1.2.1.31.1.1.1.8"
[[inputs.snmp.table.field]]
name = "ifHCInBroadcastPkts"
#IF-MIB::ifHCInBroadcastPkts
oid = "1.3.6.1.2.1.31.1.1.1.9"
[[inputs.snmp.table.field]]
name = "ifHCOutOctets"
#IF-MIB::ifHCOutOctets
oid = "1.3.6.1.2.1.31.1.1.1.10"
[[inputs.snmp.table.field]]
name = "ifHCOutUcastPkts"
#IF-MIB::ifHCOutUcastPkts
oid = "1.3.6.1.2.1.31.1.1.1.11"
[[inputs.snmp.table.field]]
name = "ifHCOutMulticastPkts"
#IF-MIB::ifHCOutMulticastPkts
oid = "1.3.6.1.2.1.31.1.1.1.12"
[[inputs.snmp.table.field]]
name = "ifHCOutBroadcastPkts"
#IF-MIB::ifHCOutBroadcastPkts
oid = "1.3.6.1.2.1.31.1.1.1.13"
[[inputs.snmp.table]]
name = "bgpPeer"
#oid = "1.3.6.1.2.1.15.3"
[[inputs.snmp.table.field]]
name = "bgpPeerIdentifier"
#BGP4-MIB::bgpPeerIdentifier"
oid = "1.3.6.1.2.1.15.3.1.1"
is_tag = true
[[inputs.snmp.table.field]]
name = "bgpPeerState"
#BGP4-MIB::bgpPeerState"
oid = "1.3.6.1.2.1.15.3.1.2"
[[inputs.snmp.table.field]]
name = "bgpPeerFsmEstablishedTransitions"
#BGP4-MIB::bgpPeerFsmEstablishedTransitions
oid = "1.3.6.1.2.1.15.3.1.15"
[[inputs.snmp.table]]
name ="cbQos"
oid = "CISCO-CLASS-BASED-QOS-MIB::cbQosCMStatsTable"
[[inputs.snmp.table.field]]
name = "ConfigIndex"
#oid = "CISCO-CLASS-BASED-QOS-MIB::cbQosConfigIndex"
oid = "1.3.6.1.4.1.9.9.166.1.5.1.1.2"
is_tag = true
[[inputs.snmp.table.field]]
name = "ParentObjectsIndex"
#oid = "CISCO-CLASS-BASED-QOS-MIB::cbQosParentObjectsIndex"
oid = "1.3.6.1.4.1.9.9.166.1.5.1.1.4"
is_tag = true
[inputs.snmp.tagdrop]
Name = [ "SONET*", "Vo*", "Nu0", "E1*", "Lo*", "Vl*", "CH*", "*:*", "St*", "VL*" ]
[[inputs.snmp]]
interval = "4h"
agents = [ "device" ]
version = 2
max_repetitions = 1
retries = 1
community = "public"
fieldpass = [ "Alias", "Name" ]
[[inputs.snmp.table]]
name = "ifalias"
[[inputs.snmp.table.field]]
name = "Ifindex"
#IF-MIB::ifIndex
oid = "1.3.6.1.2.1.2.2.1.1"
is_tag = true
[[inputs.snmp.table.field]]
name = "Name"
#IF-MIB::ifName
oid = "1.3.6.1.2.1.31.1.1.1.1"
[[inputs.snmp.table.field]]
name = "Alias"
#IF-MIB::ifAlias
oid = "1.3.6.1.2.1.31.1.1.1.18"
[[inputs.snmp]]
interval = "24h"
agents = [ "dlink" ]
version = 2
timeout = "2m"
community = "public"
fieldpass = [ "entPhysicalDescr" , "entPhysicalName" , "entPhysicalFirmwareRev" , "entPhysicalHardwareRev" , "entPhysicalSerialNum" , "entPhysicalSoftwareRev" ]
[[inputs.snmp.field]]
name = "location"
#SNMPv2-MIB::sysLocation.0
oid = "1.3.6.1.2.1.1.6.0"
is_tag = true
[[inputs.snmp.field]]
name = "contact"
#SNMPv2-MIB::sysContact.0
oid = "1.3.6.1.2.1.1.4.0"
is_tag = true
[[inputs.snmp.table]]
name = "inventory_entity"
inherit_tags = [ "location", "contact" ]
#oid = "ENTITY-MIB::entPhysicalTable"
index_as_tag = true # stack, access points
[[inputs.snmp.table.field]]
name = "ModelName"
#ENTITY-MIB::entPhysicalModelName
oid = "1.3.6.1.2.1.47.1.1.1.1.13"
is_tag = true
[[inputs.snmp.table.field]]
name = "Class"
#ENTITY-MIB::entPhysicalClass
oid = "1.3.6.1.2.1.47.1.1.1.1.5"
is_tag = true
[[inputs.snmp.table.field]]
name = "entPhysicalName"
#ENTITY-MIB::entPhysicalName
oid = "1.3.6.1.2.1.47.1.1.1.1.7"
[[inputs.snmp.table.field]]
name = "entPhysicalDescr"
#ENTITY-MIB::entPhysicalDescr
oid = "1.3.6.1.2.1.47.1.1.1.1.2"
[[inputs.snmp.table.field]]
name = "entPhysicalHardwareRev"
#ENTITY-MIB::entPhysicalHardwareRev
oid = "1.3.6.1.2.1.47.1.1.1.1.8"
[[inputs.snmp.table.field]]
name = "entPhysicalFirmwareRev"
#ENTITY-MIB::entPhysicalFirmwareRev
oid = "1.3.6.1.2.1.47.1.1.1.1.9"
[[inputs.snmp.table.field]]
name = "entPhysicalSoftwareRev"
#ENTITY-MIB::entPhysicalSoftwareRev
oid = "1.3.6.1.2.1.47.1.1.1.1.10"
[[inputs.snmp.table.field]]
name = "entPhysicalSerialNum"
#ENTITY-MIB::entPhysicalSerialNum
oid = "1.3.6.1.2.1.47.1.1.1.1.11"
[inputs.snmp.tags]
MfgName = "dlink"
obj = "object_id"
[inputs.snmp.tagpass]
ModelName = [ "*" ]
[[processors.strings]]
namepass = ["inventory_entity"]
[[processors.strings.trim]]
tag = "ModelName"
[[processors.strings.trim]]
field = "entPhysicalDescr"
[[processors.strings.trim]]
field = "entPhysicalName"
[[processors.strings.trim]]
field = "entPhysicalFirmwareRev"
[[processors.strings.trim]]
field = "entPhysicalHardwareRev"
[[processors.strings.trim]]
field = "entPhysicalSerialNum"
[[processors.strings.trim]]
field = "entPhysicalSoftwareRev"
[[processors.strings.lowercase]]
tag = "contact"
[[processors.strings.lowercase]]
tag = "location"
inventory_entity,Class=9,MfgName=cisco,ModelName=WIC-2T\ \ \ \ \ \ \ \ \ \ \ \ ������
[[inputs.snmp]]
interval = "1m"
agents = [ "polycom" ]
version = 2
community = "public"
name = "polycom"
[[inputs.snmp.field]]
name = "PercentPacketLoss"
oid = "1.3.6.1.4.1.2684.1.1.21.0"
conversion = "int"
[[inputs.snmp.field]]
name = "Jitter"
oid = "1.3.6.1.4.1.2684.1.1.22.0"
conversion = "int"
[[inputs.snmp.field]]
name = "Latency"
oid = "1.3.6.1.4.1.2684.1.1.23.0"
conversion = "int"