go.d snmp handle multiline sysDescr (#18530)
Ilya Mashchenko committed
Sep 11, 2024 at 23:36 UTC
7024bc80003c3ec6feb96dfbecba859911dd3167
3 files changed
+17
-8
src/go/plugin/go.d/agent/module/job.go
+5
-3
@@ -493,15 +493,15 @@ func (j *Job) createChart(chart *Chart) {
493
if ls == 0 {
494
ls = LabelSourceAuto
495
}
496
- _ = j.api.CLABEL(l.Key, l.Value, ls)
496
+ _ = j.api.CLABEL(l.Key, lblReplacer.Replace(l.Value), ls)
497
}
498
}
499
for k, v := range j.labels {
500
if !seen[k] {
501
- _ = j.api.CLABEL(k, v, LabelSourceConf)
501
+ _ = j.api.CLABEL(k, lblReplacer.Replace(v), LabelSourceConf)
502
}
503
}
504
- _ = j.api.CLABEL("_collect_job", j.Name(), LabelSourceAuto)
504
+ _ = j.api.CLABEL("_collect_job", lblReplacer.Replace(j.Name()), LabelSourceAuto)
505
_ = j.api.CLABELCOMMIT()
506
507
for _, dim := range chart.Dims {
@@ -647,3 +647,5 @@ func handleZero(v int) int {
647
}
648
return v
649
}
650
+
651
+var lblReplacer = strings.NewReplacer("'", "")
src/go/plugin/go.d/modules/snmp/collect.go
+7
-4
@@ -4,6 +4,7 @@ package snmp
4
5
import (
6
"fmt"
7
+ "slices"
8
"strings"
9
10
"github.com/netdata/netdata/go/plugins/plugin/go.d/agent/vnodes"
@@ -59,15 +60,17 @@ func (s *SNMP) setupVnode(si *sysInfo) *vnodes.VirtualNode {
60
if s.Vnode.GUID == "" {
61
s.Vnode.GUID = uuid.NewSHA1(uuid.NameSpaceDNS, []byte(s.Hostname)).String()
62
}
62
- if s.Vnode.Hostname == "" {
63
- s.Vnode.Hostname = fmt.Sprintf("%s(%s)", si.name, s.Hostname)
64
- }
63
+
64
+ hostnames := []string{s.Vnode.Hostname, si.name, "snmp-device"}
65
+ i := slices.IndexFunc(hostnames, func(s string) bool { return s != "" })
66
+
67
+ s.Vnode.Hostname = fmt.Sprintf("%s(%s)", hostnames[i], s.Hostname)
68
69
labels := make(map[string]string)
70
+
71
for k, v := range s.Vnode.Labels {
72
labels[k] = v
73
}
70
-
74
if si.descr != "" {
75
labels["sysDescr"] = si.descr
76
}
src/go/plugin/go.d/modules/snmp/collect_sys_info.go
+5
-1
@@ -39,12 +39,16 @@ func (s *SNMP) getSysInfo() (*sysInfo, error) {
39
organization: "Unknown",
40
}
41
42
+ r := strings.NewReplacer("\n", "\\n", "\r", "\\r")
43
+
44
for _, pdu := range pdus {
45
oid := strings.TrimPrefix(pdu.Name, ".")
46
47
switch oid {
48
case oidSysDescr:
47
- si.descr, err = pduToString(pdu)
49
+ if si.descr, err = pduToString(pdu); err == nil {
50
+ si.descr = r.Replace(si.descr)
51
+ }
52
case oidSysObject:
53
var sysObj string
54
if sysObj, err = pduToString(pdu); err == nil {