telegraf: SNMP: failed to parse mibs

Relevent telegraf.conf

[[inputs.snmp]]
  ## Agent addresses to retrieve values from.
  ##   example: agents = ["udp://127.0.0.1:161"]
  ##            agents = ["tcp://127.0.0.1:161"]
  agents = ["udp://192.168.1.1:161"]

  interval = "60s"

  ## Timeout for each request.
  timeout = "5s"

  ## SNMP version; can be 1, 2, or 3.
  version = 2

  ## SNMP community string.
  community = "public"

  ## Number of retries to attempt.
  retries = 3

  ## The GETBULK max-repetitions parameter.
  max_repetitions = 10

  ## SNMPv3 authentication and encryption options.
  ##
  ## Security Name.
  # sec_name = "myuser"
  ## Authentication protocol; one of "MD5", "SHA", or "".
  # auth_protocol = "MD5"
  ## Authentication password.
  # auth_password = "pass"
  ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv".
  # sec_level = "authNoPriv"
  ## Context Name.
  # context_name = ""
  ## Privacy protocol used for encrypted messages; one of "DES", "AES" or "".
  # priv_protocol = ""
  ## Privacy password used for encrypted messages.
  # priv_password = ""

  ## Add fields and tables defining the variables you wish to collect.  This
  ## example collects the system uptime and interface variables.  Reference the
  ## full plugin documentation for configuration details.

  # Measurement name
  name = "snmp.edgeos"
  ##
  ## Exclusions
  ##
  # Don't want these columns from UCD-SNMP-MIB::laTable
  fielddrop = [ "laErrorFlag", "laErrMessage" ]
  # Don't want these rows from UCD-DISKIO-MIB::diskIOTable
  [inputs.snmp.tagdrop]
    diskIODevice = [ "loop*", "ram*" ]
  ## 
  ## System details
  ##
  #  System name (hostname)
  [[inputs.snmp.field]]
    name = "sysName"
    oid = "SNMPv2-MIB::sysName.0"
    is_tag = true
  #  System vendor OID
  [[inputs.snmp.field]]
    name = "sysObjectID"
    oid = "SNMPv2-MIB::sysObjectID.0"
  #  System description
  [[inputs.snmp.field]]
    name = "sysDescr"
    oid = "SNMPv2-MIB::sysDescr.0"
  #  System contact
  [[inputs.snmp.field]]
    name = "sysContact"
    oid = "SNMPv2-MIB::sysContact.0"
  #  System location
  [[inputs.snmp.field]]
    name = "sysLocation"
    oid = "SNMPv2-MIB::sysLocation.0"
  ##
  ## Host/System Resources
  ##
  #  System uptime
  [[inputs.snmp.field]]
    name = "sysUpTime"
    oid = "HOST-RESOURCES-MIB::hrSystemUptime.0"
  #  Number of user sessions
  [[inputs.snmp.field]]
    name = "hrSystemNumUsers"
    oid = "HOST-RESOURCES-MIB::hrSystemNumUsers.0"
  #  Number of process contexts
  [[inputs.snmp.field]]
    name = "hrSystemProcesses"
    oid = "HOST-RESOURCES-MIB::hrSystemProcesses.0"
  #  Device Listing
  [[inputs.snmp.table]]
    oid = "HOST-RESOURCES-MIB::hrDeviceTable"
    [[inputs.snmp.table.field]]
      oid = "HOST-RESOURCES-MIB::hrDeviceIndex"
      is_tag = true
  ##
  ## Context Switches & Interrupts
  ##
  #  Number of interrupts processed
  [[inputs.snmp.field]]
    name = "ssRawInterrupts"
    oid = "UCD-SNMP-MIB::ssRawInterrupts.0"
  #  Number of context switches
  [[inputs.snmp.field]]
    name = "ssRawContexts"
    oid = "UCD-SNMP-MIB::ssRawContexts.0"
  ##
  ## Host performance metrics
  ##
  #  System Load Average 
  [[inputs.snmp.table]]
    oid = "UCD-SNMP-MIB::laTable"
    [[inputs.snmp.table.field]]
      oid = "UCD-SNMP-MIB::laNames"
      is_tag = true
  ##
  ## CPU inventory
  ##
  #  Processor listing
  [[inputs.snmp.table]]
    index_as_tag = true
    oid = "HOST-RESOURCES-MIB::hrProcessorTable"
  ##
  ## CPU utilization
  ##
  #  Number of 'ticks' spent on user-level
  [[inputs.snmp.field]]
    name = "ssCpuRawUser"
    oid = "UCD-SNMP-MIB::ssCpuRawUser.0"
  #  Number of 'ticks' spent on reduced-priority
  [[inputs.snmp.field]]
    name = "ssCpuRawNice"
    oid = "UCD-SNMP-MIB::ssCpuRawNice.0"
  #  Number of 'ticks' spent on system-level
  [[inputs.snmp.field]]
    name = "ssCpuRawSystem"
    oid = "UCD-SNMP-MIB::ssCpuRawSystem.0"
  #  Number of 'ticks' spent idle
  [[inputs.snmp.field]]
    name = "ssCpuRawIdle"
    oid = "UCD-SNMP-MIB::ssCpuRawIdle.0"
  #  Number of 'ticks' spent waiting on I/O
  [[inputs.snmp.field]]
    name = "ssCpuRawWait"
    oid = "UCD-SNMP-MIB::ssCpuRawWait.0"
  #  Number of 'ticks' spent in kernel
  [[inputs.snmp.field]]
    name = "ssCpuRawKernel"
    oid = "UCD-SNMP-MIB::ssCpuRawKernel.0"
  #  Number of 'ticks' spent on hardware interrupts
  [[inputs.snmp.field]]
    name = "ssCpuRawInterrupt"
    oid = "UCD-SNMP-MIB::ssCpuRawInterrupt.0"
  #  Number of 'ticks' spent on software interrupts
  [[inputs.snmp.field]]
    name = "ssCpuRawSoftIRQ"
    oid = "UCD-SNMP-MIB::ssCpuRawSoftIRQ.0"
  ##
  ## System Memory (physical/virtual)
  ##
  #  Size of phsyical memory (RAM)
  [[inputs.snmp.field]]
    name = "hrMemorySize"
    oid = "HOST-RESOURCES-MIB::hrMemorySize.0"
  #  Size of real/phys mem installed
  [[inputs.snmp.field]]
    name = "memTotalReal"
    oid = "UCD-SNMP-MIB::memTotalReal.0"
  #  Size of real/phys mem unused/avail
  [[inputs.snmp.field]]
    name = "memAvailReal"
    oid = "UCD-SNMP-MIB::memAvailReal.0"
  #  Total amount of mem unused/avail
  [[inputs.snmp.field]]
    name = "memTotalFree"
    oid = "UCD-SNMP-MIB::memTotalFree.0"
  #  Size of mem used as shared memory
  [[inputs.snmp.field]]
    name = "memShared"
    oid = "UCD-SNMP-MIB::memShared.0"
  #  Size of mem used for buffers
  [[inputs.snmp.field]]
    name = "memBuffer"
    oid = "UCD-SNMP-MIB::memBuffer.0"
  #  Size of mem used for cache
  [[inputs.snmp.field]]
    name = "memCached"
    oid = "UCD-SNMP-MIB::memCached.0"
  ##
  ## Block (Disk) performance
  ##
  #  System-wide blocks written
  [[inputs.snmp.field]]
    name = "ssIORawSent"
    oid = "UCD-SNMP-MIB::ssIORawSent.0"
  #  Number of blocks read
  [[inputs.snmp.field]]
    name = "ssIORawReceived"
    oid = "UCD-SNMP-MIB::ssIORawReceived.0"
  #  Per-device (disk) performance
  [[inputs.snmp.table]]
    oid = "UCD-DISKIO-MIB::diskIOTable"
    [[inputs.snmp.table.field]]
      oid = "UCD-DISKIO-MIB::diskIODevice"
      is_tag = true
  ##
  ## Disk/Partition/Filesystem inventory & usage
  ##
  #  Storage listing
  [[inputs.snmp.table]]
    oid = "HOST-RESOURCES-MIB::hrStorageTable"
    [[inputs.snmp.table.field]]
      oid = "HOST-RESOURCES-MIB::hrStorageDescr"
      is_tag = true
  ##
  ## Interface metrics
  ##
  #  Per-interface traffic, errors, drops
  [[inputs.snmp.table]]
    oid = "IF-MIB::ifTable"
    [[inputs.snmp.table.field]]
      oid = "IF-MIB::ifName"
      is_tag = true
  #  Per-interface high-capacity (HC) counters
  [[inputs.snmp.table]]
    oid = "IF-MIB::ifXTable"
    [[inputs.snmp.table.field]]
      oid = "IF-MIB::ifName"
      is_tag = true
  ##
  ## IP metrics
  ##
  #  System-wide IP metrics
  [[inputs.snmp.table]]
    index_as_tag = true
    oid = "IP-MIB::ipSystemStatsTable"
  ## 
  ## ICMP Metrics
  ##
  #  ICMP statistics
  [[inputs.snmp.table]]
    index_as_tag = true
    oid = "IP-MIB::icmpStatsTable"
  #  ICMP per-type statistics
  [[inputs.snmp.table]]
    index_as_tag = true
    oid = "IP-MIB::icmpMsgStatsTable"
  ##
  ## UDP statistics
  ##
  #  Datagrams delivered to app
  [[inputs.snmp.field]]
    name = "udpInDatagrams"
    oid = "UDP-MIB::udpInDatagrams.0"
  #  Datagrams received with no app
  [[inputs.snmp.field]]
    name = "udpNoPorts"
    oid = "UDP-MIB::udpNoPorts.0"
  #  Datagrams received with error
  [[inputs.snmp.field]]
    name = "udpInErrors"
    oid = "UDP-MIB::udpInErrors.0"
  #  Datagrams sent
  [[inputs.snmp.field]]
    name = "udpOutDatagrams"
    oid = "UDP-MIB::udpOutDatagrams.0"
  ##
  ## TCP statistics
  ##
  #  Number of CLOSED -> SYN-SENT transitions
  [[inputs.snmp.field]]
    name = "tcpActiveOpens"
    oid = "TCP-MIB::tcpActiveOpens.0"
  #  Number of SYN-RCVD -> LISTEN transitions
  [[inputs.snmp.field]]
    name = "tcpPassiveOpens"
    oid = "TCP-MIB::tcpPassiveOpens.0"
  #  Number of SYN-SENT/RCVD -> CLOSED transitions
  [[inputs.snmp.field]]
    name = "tcpAttemptFails"
    oid = "TCP-MIB::tcpAttemptFails.0"
  #  Number of ESTABLISHED/CLOSE-WAIT -> CLOSED transitions
  [[inputs.snmp.field]]
    name = "tcpEstabResets"
    oid = "TCP-MIB::tcpEstabResets.0"
  #  Number of ESTABLISHED or CLOSE-WAIT
  [[inputs.snmp.field]]
    name = "tcpCurrEstab"
    oid = "TCP-MIB::tcpCurrEstab.0"
  #  Number of segments received
  [[inputs.snmp.field]]
    name = "tcpInSegs"
    oid = "TCP-MIB::tcpInSegs.0"
  #  Number of segments sent
  [[inputs.snmp.field]]
    name = "tcpOutSegs"
    oid = "TCP-MIB::tcpOutSegs.0"
  #  Number of segments retransmitted
  [[inputs.snmp.field]]
    name = "tcpRetransSegs"
    oid = "TCP-MIB::tcpRetransSegs.0"
  #  Number of segments received with error
  [[inputs.snmp.field]]
    name = "tcpInErrs"
    oid = "TCP-MIB::tcpInErrs.0"
  #  Number of segments sent w/RST
  [[inputs.snmp.field]]
    name = "tcpOutRsts"
    oid = "TCP-MIB::tcpOutRsts.0"
  ##
  ## IP routing statistics
  ##
  #  Number of valid routing entries
  [[inputs.snmp.field]]
    name = "inetCidrRouteNumber"
    oid = "IP-FORWARD-MIB::inetCidrRouteNumber.0"
  #  Number of valid entries discarded
  [[inputs.snmp.field]]
    name = "inetCidrRouteDiscards"
    oid = "IP-FORWARD-MIB::inetCidrRouteDiscards.0"
  #  Number of valid forwarding entries
  [[inputs.snmp.field]]
    name = "ipForwardNumber"
    oid = "IP-FORWARD-MIB::ipForwardNumber.0"
  ##
  ## IP routing statistics
  ##
  # Number of valid routes discarded
  [[inputs.snmp.field]]
    name = "ipRoutingDiscards"
    oid = "RFC1213-MIB::ipRoutingDiscards.0"
  ##
  ## SNMP metrics
  ##
  #  Number of SNMP messages received
  [[inputs.snmp.field]]
    name = "snmpInPkts"
    oid = "SNMPv2-MIB::snmpInPkts.0"
  #  Number of SNMP Get-Request received
  [[inputs.snmp.field]]
    name = "snmpInGetRequests"
    oid = "SNMPv2-MIB::snmpInGetRequests.0"
  #  Number of SNMP Get-Next received
  [[inputs.snmp.field]]
    name = "snmpInGetNexts"
    oid = "SNMPv2-MIB::snmpInGetNexts.0"
  #  Number of SNMP objects requested
  [[inputs.snmp.field]]
    name = "snmpInTotalReqVars"
    oid = "SNMPv2-MIB::snmpInTotalReqVars.0"
  #  Number of SNMP Get-Response received
  [[inputs.snmp.field]]
    name = "snmpInGetResponses"
    oid = "SNMPv2-MIB::snmpInGetResponses.0"
  #  Number of SNMP messages sent
  [[inputs.snmp.field]]
    name = "snmpOutPkts"
    oid = "SNMPv2-MIB::snmpOutPkts.0"
  #  Number of SNMP Get-Request sent
  [[inputs.snmp.field]]
    name = "snmpOutGetRequests"
    oid = "SNMPv2-MIB::snmpOutGetRequests.0"
  #  Number of SNMP Get-Next sent
  [[inputs.snmp.field]]
    name = "snmpOutGetNexts"
    oid = "SNMPv2-MIB::snmpOutGetNexts.0"
  #  Number of SNMP Get-Response sent
  [[inputs.snmp.field]]
    name = "snmpOutGetResponses"
    oid = "SNMPv2-MIB::snmpOutGetResponses.0"

Logs from Telegraf

Dec 24 11:56:37 odin telegraf[85513]: 2021-12-24T10:56:37Z I! Starting Telegraf 1.21.1 Dec 24 11:56:44 odin systemd[1]: Stopping The plugin-driven server agent for reporting metrics into InfluxDB… Dec 24 11:56:45 odin telegraf[85513]: Parse module: /var/lib/snmp/mibs/ietf/DPI20-MIB:9:4: unexpected “ibm” (expected “;”) Dec 24 11:56:48 odin telegraf[85513]: Parse module: /var/lib/snmp/mibs/ietf/HPR-MIB:494:30: unexpected “HprRtpCounter” (expected “}”) Dec 24 11:56:56 odin telegraf[85513]: Parse module: /var/lib/snmp/mibs/ietf/SNMPv2-PDU:73:1: unexpected “max-bindings” (expected “END”) Dec 24 11:56:58 odin telegraf[85513]: Parse module: /var/lib/snmp/mibs/ietf/TCPIPX-MIB:63:12: unexpected “tcpIpxConnLocalPort” (expected “}”) Dec 24 11:56:59 odin telegraf[85513]: panic: strconv.ParseUint: parsing “”: invalid syntax Dec 24 11:56:59 odin telegraf[85513]: goroutine 1 [running]: Dec 24 11:56:59 odin telegraf[85513]: github.com/sleepinggenius2/gosmi/types.OidMustFromString(…) Dec 24 11:56:59 odin telegraf[85513]: #011/go/pkg/mod/github.com/sleepinggenius2/gosmi@v0.4.3/types/oid.go:91 Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/internal/snmp.GetIndex({0x4fab394, 0x1}, {0x40046ad128, 0xe}) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/internal/snmp/translate.go:126 +0x348 Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/plugins/inputs/snmp.snmpTableCall({0x4000bdd821, 0x15}) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/plugins/inputs/snmp/snmp.go:837 +0xcc Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/plugins/inputs/snmp.snmpTable({0x4000bdd821, 0x15}) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/plugins/inputs/snmp/snmp.go:820 +0x1b0 Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/plugins/inputs/snmp.(*Table).initBuild(0x4000592860) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/plugins/inputs/snmp/snmp.go:192 +0x40 Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/plugins/inputs/snmp.(*Table).Init(0x4000592860) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/plugins/inputs/snmp/snmp.go:162 +0x7c Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/plugins/inputs/snmp.(*Snmp).Init(0x4000023600) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/plugins/inputs/snmp/snmp.go:110 +0x118 Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/models.(*RunningInput).Init(0x4000bf3090) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/models/running_input.go:82 +0x58 Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/agent.(*Agent).initPlugins(0x400000e608) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/agent/agent.go:189 +0x74 Dec 24 11:56:59 odin telegraf[85513]: github.com/influxdata/telegraf/agent.(*Agent).Run(0x400000e608, {0x50f04e8, 0x400078e040}) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/agent/agent.go:105 +0x140 Dec 24 11:56:59 odin telegraf[85513]: main.runAgent({0x50f04e8, 0x400078e040}, {0x7b610f8, 0x0, 0x0}, {0x7b610f8, 0x0, 0x0}) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/cmd/telegraf/telegraf.go:312 +0xcf0 Dec 24 11:56:59 odin telegraf[85513]: main.reloadLoop({0x7b610f8, 0x0, 0x0}, {0x7b610f8, 0x0, 0x0}) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/cmd/telegraf/telegraf.go:147 +0x220 Dec 24 11:56:59 odin telegraf[85513]: main.run(…) Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/cmd/telegraf/telegraf_posix.go:8 Dec 24 11:56:59 odin telegraf[85513]: main.main() Dec 24 11:56:59 odin telegraf[85513]: #011/go/src/github.com/influxdata/telegraf/cmd/telegraf/telegraf.go:485 +0xcb8 Dec 24 11:56:59 odin systemd[1]: telegraf.service: Main process exited, code=exited, status=2/INVALIDARGUMENT Dec 24 11:56:59 odin systemd[1]: telegraf.service: Failed with result ‘exit-code’.

System info

Telegraf 1.21.1, Ubuntu 20.04

Docker

No response

Steps to reproduce

Just use the configuration I provide.

Expected behavior

Collect snmp metrics

Actual behavior

Telegraf panic

Additional info

I use this configuration for few months without any problem. Problem started when I updated telegraf from version 1.20.4 to version 1.21.1

I tried to update MIBs file using download-mibs from snmp-mibs-downloader package but without any success.

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 19 (6 by maintainers)

Commits related to this issue

Most upvoted comments

@beparmentier thank you for your response! Since you filed the issue and it is now fixed I am going to close this. if anyone else is still having problems open another ticket and someone on the team with assist you 😃

Thank you for the update! This is an issue with the syntax of these mibs. It is talked about with the maintainer of gosmi in this issue. Hope this clears up any confusion 😃

Do you really expect everyone to start debugging MIB files? If so, the barrier to entry for InfluxDB and Telegraf just got way higher.

@jostrasser can you please file a new bug with all the required information and I’m sure someone can look at it.

Downgrading to Telegraf 1.20.4 (git: HEAD 34ad5aa1) solves the issue for me.