snmp_legacy

package
v1.16.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 13, 2020 License: MIT Imports: 9 Imported by: 0

README

SNMP Legacy Input Plugin

The SNMP input plugin gathers metrics from SNMP agents

Configuration:
Very simple example

In this example, the plugin will gather value of OIDS:

  • .1.3.6.1.2.1.2.2.1.4.1
# Very Simple Example
[[inputs.snmp]]

  [[inputs.snmp.host]]
    address = "127.0.0.1:161"
    # SNMP community
    community = "public" # default public
    # SNMP version (1, 2 or 3)
    # Version 3 not supported yet
    version = 2 # default 2
    # Simple list of OIDs to get, in addition to "collect"
    get_oids = [".1.3.6.1.2.1.2.2.1.4.1"]
Simple example

In this example, Telegraf gathers value of OIDS:

  • named ifnumber
  • named interface_speed

With inputs.snmp.get section the plugin gets the oid number:

  • ifnumber => .1.3.6.1.2.1.2.1.0
  • interface_speed => ifSpeed

As you can see ifSpeed is not a valid OID. In order to get the valid OID, the plugin uses snmptranslate_file to match the OID:

  • ifnumber => .1.3.6.1.2.1.2.1.0
  • interface_speed => ifSpeed => .1.3.6.1.2.1.2.2.1.5

Also as the plugin will append instance to the corresponding OID:

  • ifnumber => .1.3.6.1.2.1.2.1.0
  • interface_speed => ifSpeed => .1.3.6.1.2.1.2.2.1.5.1

In this example, the plugin will gather value of OIDS:

  • .1.3.6.1.2.1.2.1.0
  • .1.3.6.1.2.1.2.2.1.5.1
# Simple example
[[inputs.snmp]]
  ## Use 'oids.txt' file to translate oids to names
  ## To generate 'oids.txt' you need to run:
  ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
  ## Or if you have an other MIB folder with custom MIBs
  ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
  snmptranslate_file = "/tmp/oids.txt"
  [[inputs.snmp.host]]
    address = "127.0.0.1:161"
    # SNMP community
    community = "public" # default public
    # SNMP version (1, 2 or 3)
    # Version 3 not supported yet
    version = 2 # default 2
    # Which get/bulk do you want to collect for this host
    collect = ["ifnumber", "interface_speed"]

  [[inputs.snmp.get]]
    name = "ifnumber"
    oid = ".1.3.6.1.2.1.2.1.0"

  [[inputs.snmp.get]]
    name = "interface_speed"
    oid = "ifSpeed"
    instance = "1"

Simple bulk example

In this example, Telegraf gathers value of OIDS:

  • named ifnumber
  • named interface_speed
  • named if_out_octets

With inputs.snmp.get section the plugin gets oid number:

  • ifnumber => .1.3.6.1.2.1.2.1.0
  • interface_speed => ifSpeed

With inputs.snmp.bulk section the plugin gets the oid number:

  • if_out_octets => ifOutOctets

As you can see ifSpeed and ifOutOctets are not a valid OID. In order to get the valid OID, the plugin uses snmptranslate_file to match the OID:

  • ifnumber => .1.3.6.1.2.1.2.1.0
  • interface_speed => ifSpeed => .1.3.6.1.2.1.2.2.1.5
  • if_out_octets => ifOutOctets => .1.3.6.1.2.1.2.2.1.16

Also, the plugin will append instance to the corresponding OID:

  • ifnumber => .1.3.6.1.2.1.2.1.0
  • interface_speed => ifSpeed => .1.3.6.1.2.1.2.2.1.5.1

And if_out_octets is a bulk request, the plugin will gathers all OIDS in the table.

  • .1.3.6.1.2.1.2.2.1.16.1
  • .1.3.6.1.2.1.2.2.1.16.2
  • .1.3.6.1.2.1.2.2.1.16.3
  • .1.3.6.1.2.1.2.2.1.16.4
  • .1.3.6.1.2.1.2.2.1.16.5
  • ...

In this example, the plugin will gather value of OIDS:

  • .1.3.6.1.2.1.2.1.0
  • .1.3.6.1.2.1.2.2.1.5.1
  • .1.3.6.1.2.1.2.2.1.16.1
  • .1.3.6.1.2.1.2.2.1.16.2
  • .1.3.6.1.2.1.2.2.1.16.3
  • .1.3.6.1.2.1.2.2.1.16.4
  • .1.3.6.1.2.1.2.2.1.16.5
  • ...
# Simple bulk example
[[inputs.snmp]]
  ## Use 'oids.txt' file to translate oids to names
  ## To generate 'oids.txt' you need to run:
  ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
  ## Or if you have an other MIB folder with custom MIBs
  ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
  snmptranslate_file = "/tmp/oids.txt"
  [[inputs.snmp.host]]
    address = "127.0.0.1:161"
    # SNMP community
    community = "public" # default public
    # SNMP version (1, 2 or 3)
    # Version 3 not supported yet
    version = 2 # default 2
    # Which get/bulk do you want to collect for this host
    collect = ["interface_speed", "if_number", "if_out_octets"]

  [[inputs.snmp.get]]
    name = "interface_speed"
    oid = "ifSpeed"
    instance = "1"

  [[inputs.snmp.get]]
    name = "if_number"
    oid = "ifNumber"

  [[inputs.snmp.bulk]]
    name = "if_out_octets"
    oid = "ifOutOctets"
Table example

In this example, we remove collect attribute to the host section, but you can still use it in combination of the following part.

Note: This example is like a bulk request a but using an other configuration

Telegraf gathers value of OIDS of the table:

  • named iftable1

With inputs.snmp.table section the plugin gets oid number:

  • iftable1 => .1.3.6.1.2.1.31.1.1.1

Also iftable1 is a table, the plugin will gathers all OIDS in the table and in the subtables

  • .1.3.6.1.2.1.31.1.1.1.1
  • .1.3.6.1.2.1.31.1.1.1.1.1
  • .1.3.6.1.2.1.31.1.1.1.1.2
  • .1.3.6.1.2.1.31.1.1.1.1.3
  • .1.3.6.1.2.1.31.1.1.1.1.4
  • .1.3.6.1.2.1.31.1.1.1.1....
  • .1.3.6.1.2.1.31.1.1.1.2
  • .1.3.6.1.2.1.31.1.1.1.2....
  • .1.3.6.1.2.1.31.1.1.1.3
  • .1.3.6.1.2.1.31.1.1.1.3....
  • .1.3.6.1.2.1.31.1.1.1.4
  • .1.3.6.1.2.1.31.1.1.1.4....
  • .1.3.6.1.2.1.31.1.1.1.5
  • .1.3.6.1.2.1.31.1.1.1.5....
  • .1.3.6.1.2.1.31.1.1.1.6....
  • ...
# Table example
[[inputs.snmp]]
  ## Use 'oids.txt' file to translate oids to names
  ## To generate 'oids.txt' you need to run:
  ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
  ## Or if you have an other MIB folder with custom MIBs
  ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
  snmptranslate_file = "/tmp/oids.txt"
  [[inputs.snmp.host]]
    address = "127.0.0.1:161"
    # SNMP community
    community = "public" # default public
    # SNMP version (1, 2 or 3)
    # Version 3 not supported yet
    version = 2 # default 2
    # Which get/bulk do you want to collect for this host
    # Which table do you want to collect
    [[inputs.snmp.host.table]]
      name = "iftable1"

  # table without mapping neither subtables
  # This is like bulk request
  [[inputs.snmp.table]]
    name = "iftable1"
    oid = ".1.3.6.1.2.1.31.1.1.1"
Table with subtable example

In this example, we remove collect attribute to the host section, but you can still use it in combination of the following part.

Note: This example is like a bulk request a but using an other configuration

Telegraf gathers value of OIDS of the table:

  • named iftable2

With inputs.snmp.table section AND sub_tables attribute, the plugin will get OIDS from subtables:

  • iftable2 => .1.3.6.1.2.1.2.2.1.13

Also iftable2 is a table, the plugin will gathers all OIDS in subtables:

  • .1.3.6.1.2.1.2.2.1.13.1
  • .1.3.6.1.2.1.2.2.1.13.2
  • .1.3.6.1.2.1.2.2.1.13.3
  • .1.3.6.1.2.1.2.2.1.13.4
  • .1.3.6.1.2.1.2.2.1.13....
# Table with subtable example
[[inputs.snmp]]
  ## Use 'oids.txt' file to translate oids to names
  ## To generate 'oids.txt' you need to run:
  ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
  ## Or if you have an other MIB folder with custom MIBs
  ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
  snmptranslate_file = "/tmp/oids.txt"
  [[inputs.snmp.host]]
    address = "127.0.0.1:161"
    # SNMP community
    community = "public" # default public
    # SNMP version (1, 2 or 3)
    # Version 3 not supported yet
    version = 2 # default 2
    # Which table do you want to collect
    [[inputs.snmp.host.table]]
      name = "iftable2"

  # table without mapping but with subtables
  [[inputs.snmp.table]]
    name = "iftable2"
    sub_tables = [".1.3.6.1.2.1.2.2.1.13"]
    # note
    # oid attribute is useless
Table with mapping example

In this example, we remove collect attribute to the host section, but you can still use it in combination of the following part.

Telegraf gathers value of OIDS of the table:

  • named iftable3

With inputs.snmp.table section the plugin gets oid number:

  • iftable3 => .1.3.6.1.2.1.31.1.1.1

Also iftable2 is a table, the plugin will gathers all OIDS in the table and in the subtables

  • .1.3.6.1.2.1.31.1.1.1.1
  • .1.3.6.1.2.1.31.1.1.1.1.1
  • .1.3.6.1.2.1.31.1.1.1.1.2
  • .1.3.6.1.2.1.31.1.1.1.1.3
  • .1.3.6.1.2.1.31.1.1.1.1.4
  • .1.3.6.1.2.1.31.1.1.1.1....
  • .1.3.6.1.2.1.31.1.1.1.2
  • .1.3.6.1.2.1.31.1.1.1.2....
  • .1.3.6.1.2.1.31.1.1.1.3
  • .1.3.6.1.2.1.31.1.1.1.3....
  • .1.3.6.1.2.1.31.1.1.1.4
  • .1.3.6.1.2.1.31.1.1.1.4....
  • .1.3.6.1.2.1.31.1.1.1.5
  • .1.3.6.1.2.1.31.1.1.1.5....
  • .1.3.6.1.2.1.31.1.1.1.6....
  • ...

But the include_instances attribute will filter which OIDS will be gathered; As you see, there is an other attribute, mapping_table. include_instances and mapping_table permit to build a hash table to filter only OIDS you want. Let's say, we have the following data on SNMP server:

  • OID: .1.3.6.1.2.1.31.1.1.1.1.1 has as value: enp5s0
  • OID: .1.3.6.1.2.1.31.1.1.1.1.2 has as value: enp5s1
  • OID: .1.3.6.1.2.1.31.1.1.1.1.3 has as value: enp5s2
  • OID: .1.3.6.1.2.1.31.1.1.1.1.4 has as value: eth0
  • OID: .1.3.6.1.2.1.31.1.1.1.1.5 has as value: eth1

The plugin will build the following hash table:

instance name instance id
enp5s0 1
enp5s1 2
enp5s2 3
eth0 4
eth1 5

With the include_instances attribute, the plugin will gather the following OIDS:

  • .1.3.6.1.2.1.31.1.1.1.1.1
  • .1.3.6.1.2.1.31.1.1.1.1.5
  • .1.3.6.1.2.1.31.1.1.1.2.1
  • .1.3.6.1.2.1.31.1.1.1.2.5
  • .1.3.6.1.2.1.31.1.1.1.3.1
  • .1.3.6.1.2.1.31.1.1.1.3.5
  • .1.3.6.1.2.1.31.1.1.1.4.1
  • .1.3.6.1.2.1.31.1.1.1.4.5
  • .1.3.6.1.2.1.31.1.1.1.5.1
  • .1.3.6.1.2.1.31.1.1.1.5.5
  • .1.3.6.1.2.1.31.1.1.1.6.1
  • .1.3.6.1.2.1.31.1.1.1.6.5
  • ...

Note: the plugin will add instance name as tag instance

# Simple table with mapping example
[[inputs.snmp]]
  ## Use 'oids.txt' file to translate oids to names
  ## To generate 'oids.txt' you need to run:
  ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
  ## Or if you have an other MIB folder with custom MIBs
  ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
  snmptranslate_file = "/tmp/oids.txt"
  [[inputs.snmp.host]]
    address = "127.0.0.1:161"
    # SNMP community
    community = "public" # default public
    # SNMP version (1, 2 or 3)
    # Version 3 not supported yet
    version = 2 # default 2
    # Which table do you want to collect
    [[inputs.snmp.host.table]]
      name = "iftable3"
      include_instances = ["enp5s0", "eth1"]

  # table with mapping but without subtables
  [[inputs.snmp.table]]
    name = "iftable3"
    oid = ".1.3.6.1.2.1.31.1.1.1"
    # if empty. get all instances
    mapping_table = ".1.3.6.1.2.1.31.1.1.1.1"
    # if empty, get all subtables
Table with both mapping and subtable example

In this example, we remove collect attribute to the host section, but you can still use it in combination of the following part.

Telegraf gathers value of OIDS of the table:

  • named iftable4

With inputs.snmp.table section AND sub_tables attribute, the plugin will get OIDS from subtables:

  • iftable4 => .1.3.6.1.2.1.31.1.1.1

Also iftable2 is a table, the plugin will gathers all OIDS in the table and in the subtables

  • `.1.3.6.1.2.1.31.1.1.1.6.1
  • .1.3.6.1.2.1.31.1.1.1.6.2
  • .1.3.6.1.2.1.31.1.1.1.6.3
  • .1.3.6.1.2.1.31.1.1.1.6.4
  • .1.3.6.1.2.1.31.1.1.1.6....
  • .1.3.6.1.2.1.31.1.1.1.10.1
  • .1.3.6.1.2.1.31.1.1.1.10.2
  • .1.3.6.1.2.1.31.1.1.1.10.3
  • .1.3.6.1.2.1.31.1.1.1.10.4
  • .1.3.6.1.2.1.31.1.1.1.10....

But the include_instances attribute will filter which OIDS will be gathered; As you see, there is an other attribute, mapping_table. include_instances and mapping_table permit to build a hash table to filter only OIDS you want. Let's say, we have the following data on SNMP server:

  • OID: .1.3.6.1.2.1.31.1.1.1.1.1 has as value: enp5s0
  • OID: .1.3.6.1.2.1.31.1.1.1.1.2 has as value: enp5s1
  • OID: .1.3.6.1.2.1.31.1.1.1.1.3 has as value: enp5s2
  • OID: .1.3.6.1.2.1.31.1.1.1.1.4 has as value: eth0
  • OID: .1.3.6.1.2.1.31.1.1.1.1.5 has as value: eth1

The plugin will build the following hash table:

instance name instance id
enp5s0 1
enp5s1 2
enp5s2 3
eth0 4
eth1 5

With the include_instances attribute, the plugin will gather the following OIDS:

  • .1.3.6.1.2.1.31.1.1.1.6.1
  • .1.3.6.1.2.1.31.1.1.1.6.5
  • .1.3.6.1.2.1.31.1.1.1.10.1
  • .1.3.6.1.2.1.31.1.1.1.10.5

Note: the plugin will add instance name as tag instance

# Table with both mapping and subtable example
[[inputs.snmp]]
  ## Use 'oids.txt' file to translate oids to names
  ## To generate 'oids.txt' you need to run:
  ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
  ## Or if you have an other MIB folder with custom MIBs
  ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
  snmptranslate_file = "/tmp/oids.txt"
  [[inputs.snmp.host]]
    address = "127.0.0.1:161"
    # SNMP community
    community = "public" # default public
    # SNMP version (1, 2 or 3)
    # Version 3 not supported yet
    version = 2 # default 2
    # Which table do you want to collect
    [[inputs.snmp.host.table]]
      name = "iftable4"
      include_instances = ["enp5s0", "eth1"]

  # table with both mapping and subtables
  [[inputs.snmp.table]]
    name = "iftable4"
    # if empty get all instances
    mapping_table = ".1.3.6.1.2.1.31.1.1.1.1"
    # if empty get all subtables
    # sub_tables could be not "real subtables"  
    sub_tables=[".1.3.6.1.2.1.2.2.1.13", "bytes_recv", "bytes_send"]
    # note
    # oid attribute is useless

  # SNMP SUBTABLES
  [[inputs.snmp.subtable]]
    name = "bytes_recv"
    oid = ".1.3.6.1.2.1.31.1.1.1.6"
    unit = "octets"

  [[inputs.snmp.subtable]]
    name = "bytes_send"
    oid = ".1.3.6.1.2.1.31.1.1.1.10"
    unit = "octets"
Configuration notes
  • In inputs.snmp.table section, the oid attribute is useless if the sub_tables attributes is defined

  • In inputs.snmp.subtable section, you can put a name from snmptranslate_file as oid attribute instead of a valid OID

Measurements & Fields:

With the last example (Table with both mapping and subtable example):

  • ifHCOutOctets
    • ifHCOutOctets
  • ifInDiscards
    • ifInDiscards
  • ifHCInOctets
    • ifHCInOctets
Tags:

With the last example (Table with both mapping and subtable example):

  • ifHCOutOctets
    • host
    • instance
    • unit
  • ifInDiscards
    • host
    • instance
  • ifHCInOctets
    • host
    • instance
    • unit
Example Output:

With the last example (Table with both mapping and subtable example):

ifHCOutOctets,host=127.0.0.1,instance=enp5s0,unit=octets ifHCOutOctets=10565628i 1456878706044462901
ifInDiscards,host=127.0.0.1,instance=enp5s0 ifInDiscards=0i 1456878706044510264
ifHCInOctets,host=127.0.0.1,instance=enp5s0,unit=octets ifHCInOctets=76351777i 1456878706044531312

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Data

type Data struct {
	Name string
	// OID (could be numbers or name)
	Oid string
	// Unit
	Unit string
	//  SNMP getbulk max repetition
	MaxRepetition uint8 `toml:"max_repetition"`
	// SNMP Instance (default 0)
	// (only used with  GET request and if
	//  OID is a name from snmptranslate file)
	Instance string
	// contains filtered or unexported fields
}

type Host

type Host struct {
	Address   string
	Community string
	// SNMP version. Default 2
	Version int
	// SNMP timeout, in seconds. 0 means no timeout
	Timeout float64
	// SNMP retries
	Retries int
	// Data to collect (list of Data names)
	Collect []string
	// easy get oids
	GetOids []string
	// Table
	Table []HostTable

	OidInstanceMapping map[string]map[string]string
	// contains filtered or unexported fields
}

func (*Host) GetSNMPClient

func (h *Host) GetSNMPClient() (*gosnmp.GoSNMP, error)

func (*Host) HandleResponse

func (h *Host) HandleResponse(
	oids map[string]Data,
	result *gosnmp.SnmpPacket,
	acc telegraf.Accumulator,
	initNode Node,
) (string, error)

func (*Host) SNMPBulk

func (h *Host) SNMPBulk(acc telegraf.Accumulator, initNode Node) error

func (*Host) SNMPGet

func (h *Host) SNMPGet(acc telegraf.Accumulator, initNode Node) error

func (*Host) SNMPMap

func (h *Host) SNMPMap(
	acc telegraf.Accumulator,
	nameToOid map[string]string,
	subTableMap map[string]Subtable,
) error

type HostTable

type HostTable struct {
	// name = "iftable"
	Name string
	// Includes only these instances
	// include_instances = ["eth0", "eth1"]
	IncludeInstances []string
	// Excludes only these instances
	// exclude_instances = ["eth20", "eth21"]
	ExcludeInstances []string
	// contains filtered or unexported fields
}

type Node

type Node struct {
	// contains filtered or unexported fields
}

type Snmp

type Snmp struct {
	Host              []Host
	Get               []Data
	Bulk              []Data
	Table             []Table
	Subtable          []Subtable
	SnmptranslateFile string

	Log telegraf.Logger
	// contains filtered or unexported fields
}

Snmp is a snmp plugin

func (*Snmp) Description

func (s *Snmp) Description() string

Description returns description of Zookeeper plugin

func (*Snmp) Gather

func (s *Snmp) Gather(acc telegraf.Accumulator) error

func (*Snmp) SampleConfig

func (s *Snmp) SampleConfig() string

SampleConfig returns sample configuration message

type Subtable

type Subtable struct {
	//name = "bytes_send"
	Name string
	//oid = ".1.3.6.1.2.1.31.1.1.1.10"
	Oid string
	//unit = "octets"
	Unit string
}

TODO find better names

type Table

type Table struct {
	// name = "iftable"
	Name string
	// oid = ".1.3.6.1.2.1.31.1.1.1"
	Oid string
	//if empty get all instances
	//mapping_table = ".1.3.6.1.2.1.31.1.1.1.1"
	MappingTable string
	// if empty get all subtables
	// sub_tables could be not "real subtables"
	//sub_tables=[".1.3.6.1.2.1.2.2.1.13", "bytes_recv", "bytes_send"]
	SubTables []string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL