@cryptotaxi247 / netdata / commits / 157d90de7

chore(go.d/ddsnmp): better label values sanitization (#20500)

Ilya Mashchenko committed Jun 17, 2025 at 12:27 UTC 157d90de74553cecac3b746d904ab8b5849db282
5 files changed +28 -12
src/go/plugin/go.d/agent/discovery/sd/discoverer/snmpsd/sysinfo.go
+1 -1
@@ -39,7 +39,7 @@ func GetSysInfo(client gosnmp.Handler) (*SysInfo, error) {
39 Organization: "Unknown",
40 }
41
42 - r := strings.NewReplacer("\n", " ", "\r", " ")
42 + r := strings.NewReplacer("'", "", "\n", " ", "\r", " ", "\x00", "")
43
44 for _, pdu := range pdus {
45 oid := strings.TrimPrefix(pdu.Name, ".")
src/go/plugin/go.d/agent/module/job.go
+10 -5
@@ -498,7 +498,7 @@ func (j *Job) sendVnodeHostInfo() {
498 j.vnode.Labels["_hostname"] = j.vnode.Hostname
499 }
500 for k, v := range j.vnode.Labels {
501 - j.vnode.Labels[k] = lblReplacer.Replace(v)
501 + j.vnode.Labels[k] = lblValueReplacer.Replace(v)
502 }
503
504 j.api.HOSTINFO(netdataapi.HostInfo{
@@ -549,15 +549,15 @@ func (j *Job) createChart(chart *Chart) {
549 if ls == 0 {
550 ls = LabelSourceAuto
551 }
552 - j.api.CLABEL(l.Key, lblReplacer.Replace(l.Value), ls)
552 + j.api.CLABEL(l.Key, lblValueReplacer.Replace(l.Value), ls)
553 }
554 }
555 for k, v := range j.labels {
556 if !seen[k] {
557 - j.api.CLABEL(k, lblReplacer.Replace(v), LabelSourceConf)
557 + j.api.CLABEL(k, lblValueReplacer.Replace(v), LabelSourceConf)
558 }
559 }
560 - j.api.CLABEL("_collect_job", lblReplacer.Replace(j.Name()), LabelSourceAuto)
560 + j.api.CLABEL("_collect_job", lblValueReplacer.Replace(j.Name()), LabelSourceAuto)
561 j.api.CLABELCOMMIT()
562
563 for _, dim := range chart.Dims {
@@ -706,4 +706,9 @@ func cleanPluginName(name string) string {
706 return r.Replace(name)
707 }
708
709 -var lblReplacer = strings.NewReplacer("'", "")
709 +var lblValueReplacer = strings.NewReplacer(
710 + "'", "",
711 + "\n", " ",
712 + "\r", " ",
713 + "\x00", "",
714 +)
src/go/plugin/go.d/collector/snmp/charts.go
+5 -5
@@ -204,11 +204,6 @@ func (c *Collector) addSysUptimeChart() {
204 }
205 }
206
207 -func cleanIfaceName(name string) string {
208 - r := strings.NewReplacer(".", "_", " ", "_")
209 - return r.Replace(name)
210 -}
211 -
207 func newUserInputCharts(configs []ChartConfig) (*module.Charts, error) {
208 charts := &module.Charts{}
209 for _, cfg := range configs {
@@ -426,3 +421,8 @@ func dimAlgoFromDdSnmpType(m ddsnmpcollector.Metric) module.DimAlgo {
421 }
422 return module.Incremental
423 }
424 +
425 +func cleanIfaceName(name string) string {
426 + r := strings.NewReplacer(".", "_", " ", "_")
427 + return r.Replace(name)
428 +}
src/go/plugin/go.d/collector/snmp/collect_if_mib.go
+6
@@ -158,6 +158,8 @@ func (c *Collector) collectNetworkInterfaces(mx map[string]int64) error {
158 iface.updated = true
159 }
160
161 + var valReplacer = strings.NewReplacer("'", "", "\n", " ", "\r", " ", "\x00", "")
162 +
163 for _, iface := range c.netInterfaces {
164 if iface.ifName == "" {
165 iface.ifName = iface.ifDescr
@@ -171,6 +173,10 @@ func (c *Collector) collectNetworkInterfaces(mx map[string]int64) error {
173 continue
174 }
175
176 + iface.ifName = valReplacer.Replace(iface.ifName)
177 + iface.ifDescr = valReplacer.Replace(iface.ifDescr)
178 + iface.ifAlias = valReplacer.Replace(iface.ifAlias)
179 +
180 if !iface.updated {
181 delete(c.netInterfaces, iface.idx)
182 if iface.hasCharts {
src/go/plugin/go.d/collector/snmp/ddsnmp/ddsnmpcollector/utils.go
+6 -1
@@ -266,4 +266,9 @@ func cleanMetrics(pms []*ProfileMetrics) {
266 }
267 }
268
269 -var metricMetaReplacer = strings.NewReplacer("'", "", "\n", " ", "\r", " ")
269 +var metricMetaReplacer = strings.NewReplacer(
270 + "'", "",
271 + "\n", " ",
272 + "\r", " ",
273 + "\x00", "",
274 +)