From afdebbc3a257703ee7ded362b02be256efcd97cc Mon Sep 17 00:00:00 2001 From: Cameron Sparr Date: Mon, 9 May 2016 14:11:57 -0700 Subject: [PATCH 1/2] Make OidInstanceMapping a field of the snmp host fixes #1171 --- plugins/inputs/snmp/snmp.go | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/plugins/inputs/snmp/snmp.go b/plugins/inputs/snmp/snmp.go index 8ccfe100b..784abd9fb 100644 --- a/plugins/inputs/snmp/snmp.go +++ b/plugins/inputs/snmp/snmp.go @@ -26,9 +26,6 @@ type Snmp struct { nameToOid map[string]string initNode Node subTableMap map[string]Subtable - - // TODO change as unexportable - //OidInstanceMapping map[string]map[string]string } type Host struct { @@ -53,6 +50,8 @@ type Host struct { // array of processed oids // to skip oid duplication processedOids []string + + OidInstanceMapping map[string]map[string]string } type Table struct { @@ -116,9 +115,6 @@ type Node struct { subnodes map[string]Node } -// TODO move this var to snmp struct -var OidInstanceMapping = make(map[string]map[string]string) - var sampleConfig = ` ## Use 'oids.txt' file to translate oids to names ## To generate 'oids.txt' you need to run: @@ -396,7 +392,7 @@ func (s *Snmp) Gather(acc telegraf.Accumulator) error { // TODO save mapping and computed oids // to do it only the first time // only if len(s.OidInstanceMapping) == 0 - if len(OidInstanceMapping) >= 0 { + if len(host.OidInstanceMapping) >= 0 { if err := host.SNMPMap(acc, s.nameToOid, s.subTableMap); err != nil { log.Printf("SNMP Mapping error for host '%s': %s", host.Address, err) continue @@ -413,7 +409,14 @@ func (s *Snmp) Gather(acc telegraf.Accumulator) error { return nil } -func (h *Host) SNMPMap(acc telegraf.Accumulator, nameToOid map[string]string, subTableMap map[string]Subtable) error { +func (h *Host) SNMPMap( + acc telegraf.Accumulator, + nameToOid map[string]string, + subTableMap map[string]Subtable, +) error { + if h.OidInstanceMapping == nil { + h.OidInstanceMapping = make(map[string]map[string]string) + } // Get snmp client snmpClient, err := h.GetSNMPClient() if err != nil { @@ -523,11 +526,11 @@ func (h *Host) SNMPMap(acc telegraf.Accumulator, nameToOid map[string]string, su // Building mapping table mapping := map[string]string{strings.Trim(key, "."): string(variable.Value.([]byte))} - _, exists := OidInstanceMapping[table.oid] + _, exists := h.OidInstanceMapping[table.oid] if exists { - OidInstanceMapping[table.oid][strings.Trim(key, ".")] = string(variable.Value.([]byte)) + h.OidInstanceMapping[table.oid][strings.Trim(key, ".")] = string(variable.Value.([]byte)) } else { - OidInstanceMapping[table.oid] = mapping + h.OidInstanceMapping[table.oid] = mapping } // Add table oid in bulk oid list @@ -720,7 +723,12 @@ func (h *Host) GetSNMPClient() (*gosnmp.GoSNMP, error) { return snmpClient, nil } -func (h *Host) HandleResponse(oids map[string]Data, result *gosnmp.SnmpPacket, acc telegraf.Accumulator, initNode Node) (string, error) { +func (h *Host) HandleResponse( + oids map[string]Data, + result *gosnmp.SnmpPacket, + acc telegraf.Accumulator, + initNode Node, +) (string, error) { var lastOid string for _, variable := range result.Variables { lastOid = variable.Name @@ -755,7 +763,7 @@ func (h *Host) HandleResponse(oids map[string]Data, result *gosnmp.SnmpPacket, a strings.Split(string(variable.Name[1:]), ".")) // Set instance tag // From mapping table - mapping, inMappingNoSubTable := OidInstanceMapping[oid_key] + mapping, inMappingNoSubTable := h.OidInstanceMapping[oid_key] if inMappingNoSubTable { // filter if the instance in not in // OidInstanceMapping mapping map From 85dee02a3b997aea24e2613173d897bb0aaa73e5 Mon Sep 17 00:00:00 2001 From: Cameron Sparr Date: Tue, 10 May 2016 13:27:18 -0700 Subject: [PATCH 2/2] snmp plugin: change host -> snmp_host closes #1156 --- CHANGELOG.md | 10 +++- etc/telegraf.conf | 4 +- plugins/inputs/snmp/snmp.go | 2 +- plugins/inputs/snmp/snmp_test.go | 86 ++++++++++++++++---------------- 4 files changed, 55 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8338386d..0e50a1c7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,7 +48,15 @@ based on _prefix_ in addition to globs. This means that a filter like - disque: `host -> disque_host` - rethinkdb: `host -> rethinkdb_host` -- **Breaking Change**: The `win_perf_counters` input has been changed to sanitize field names, replacing `/Sec` and `/sec` with `_persec`, as well as spaces with underscores. This is needed because Graphite doesn't like slashes and spaces, and was failing to accept metrics that had them. The `/[sS]ec` -> `_persec` is just to make things clearer and uniform. +- **Breaking Change**: The `win_perf_counters` input has been changed to +sanitize field names, replacing `/Sec` and `/sec` with `_persec`, as well as +spaces with underscores. This is needed because Graphite doesn't like slashes +and spaces, and was failing to accept metrics that had them. +The `/[sS]ec` -> `_persec` is just to make things clearer and uniform. + +- **Breaking Change**: snmp plugin. The `host` tag of the snmp plugin has been +changed to the `snmp_host` tag. + - The `disk` input plugin can now be configured with the `HOST_MOUNT_PREFIX` environment variable. This value is prepended to any mountpaths discovered before retrieving stats. It is not included on the report path. This is necessary for reporting host disk stats when running from within a container. diff --git a/etc/telegraf.conf b/etc/telegraf.conf index ee6b69aa0..64eace970 100644 --- a/etc/telegraf.conf +++ b/etc/telegraf.conf @@ -638,8 +638,8 @@ # # ## If no servers are specified, then default to 127.0.0.1:1936 # servers = ["http://myhaproxy.com:1936", "http://anotherhaproxy.com:1936"] -# ## Or you can also use local socket(not work yet) -# ## servers = ["socket://run/haproxy/admin.sock"] +# ## Or you can also use local socket +# ## servers = ["socket:/run/haproxy/admin.sock"] # # HTTP/HTTPS request given an address a method and a timeout diff --git a/plugins/inputs/snmp/snmp.go b/plugins/inputs/snmp/snmp.go index 784abd9fb..c7ceb83d8 100644 --- a/plugins/inputs/snmp/snmp.go +++ b/plugins/inputs/snmp/snmp.go @@ -792,7 +792,7 @@ func (h *Host) HandleResponse( // Because the result oid is equal to inputs.snmp.get section field_name = oid.Name } - tags["host"], _, _ = net.SplitHostPort(h.Address) + tags["snmp_host"], _, _ = net.SplitHostPort(h.Address) fields := make(map[string]interface{}) fields[string(field_name)] = variable.Value diff --git a/plugins/inputs/snmp/snmp_test.go b/plugins/inputs/snmp/snmp_test.go index 5822926dd..2faaa1408 100644 --- a/plugins/inputs/snmp/snmp_test.go +++ b/plugins/inputs/snmp/snmp_test.go @@ -102,8 +102,8 @@ func TestSNMPGet1(t *testing.T) { "oid1": uint(543846), }, map[string]string{ - "unit": "octets", - "host": testutil.GetLocalHost(), + "unit": "octets", + "snmp_host": testutil.GetLocalHost(), }, ) } @@ -140,8 +140,8 @@ func TestSNMPGet2(t *testing.T) { "ifNumber": int(4), }, map[string]string{ - "instance": "0", - "host": testutil.GetLocalHost(), + "instance": "0", + "snmp_host": testutil.GetLocalHost(), }, ) } @@ -180,9 +180,9 @@ func TestSNMPGet3(t *testing.T) { "ifSpeed": uint(10000000), }, map[string]string{ - "unit": "octets", - "instance": "1", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "1", + "snmp_host": testutil.GetLocalHost(), }, ) } @@ -222,9 +222,9 @@ func TestSNMPEasyGet4(t *testing.T) { "ifSpeed": uint(10000000), }, map[string]string{ - "unit": "octets", - "instance": "1", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "1", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -234,8 +234,8 @@ func TestSNMPEasyGet4(t *testing.T) { "ifNumber": int(4), }, map[string]string{ - "instance": "0", - "host": testutil.GetLocalHost(), + "instance": "0", + "snmp_host": testutil.GetLocalHost(), }, ) } @@ -275,9 +275,9 @@ func TestSNMPEasyGet5(t *testing.T) { "ifSpeed": uint(10000000), }, map[string]string{ - "unit": "octets", - "instance": "1", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "1", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -287,8 +287,8 @@ func TestSNMPEasyGet5(t *testing.T) { "ifNumber": int(4), }, map[string]string{ - "instance": "0", - "host": testutil.GetLocalHost(), + "instance": "0", + "snmp_host": testutil.GetLocalHost(), }, ) } @@ -320,8 +320,8 @@ func TestSNMPEasyGet6(t *testing.T) { "ifNumber": int(4), }, map[string]string{ - "instance": "0", - "host": testutil.GetLocalHost(), + "instance": "0", + "snmp_host": testutil.GetLocalHost(), }, ) } @@ -360,9 +360,9 @@ func TestSNMPBulk1(t *testing.T) { "ifOutOctets": uint(543846), }, map[string]string{ - "unit": "octets", - "instance": "1", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "1", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -372,9 +372,9 @@ func TestSNMPBulk1(t *testing.T) { "ifOutOctets": uint(26475179), }, map[string]string{ - "unit": "octets", - "instance": "2", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "2", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -384,9 +384,9 @@ func TestSNMPBulk1(t *testing.T) { "ifOutOctets": uint(108963968), }, map[string]string{ - "unit": "octets", - "instance": "3", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "3", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -396,9 +396,9 @@ func TestSNMPBulk1(t *testing.T) { "ifOutOctets": uint(12991453), }, map[string]string{ - "unit": "octets", - "instance": "36", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "36", + "snmp_host": testutil.GetLocalHost(), }, ) } @@ -438,9 +438,9 @@ func dTestSNMPBulk2(t *testing.T) { "ifOutOctets": uint(543846), }, map[string]string{ - "unit": "octets", - "instance": "1", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "1", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -450,9 +450,9 @@ func dTestSNMPBulk2(t *testing.T) { "ifOutOctets": uint(26475179), }, map[string]string{ - "unit": "octets", - "instance": "2", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "2", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -462,9 +462,9 @@ func dTestSNMPBulk2(t *testing.T) { "ifOutOctets": uint(108963968), }, map[string]string{ - "unit": "octets", - "instance": "3", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "3", + "snmp_host": testutil.GetLocalHost(), }, ) @@ -474,9 +474,9 @@ func dTestSNMPBulk2(t *testing.T) { "ifOutOctets": uint(12991453), }, map[string]string{ - "unit": "octets", - "instance": "36", - "host": testutil.GetLocalHost(), + "unit": "octets", + "instance": "36", + "snmp_host": testutil.GetLocalHost(), }, ) }