diff --git a/collector/collector.go b/collector/collector.go index d3b06c0e..63a3b399 100644 --- a/collector/collector.go +++ b/collector/collector.go @@ -977,7 +977,11 @@ func indexesToLabels(indexOids []int, metric *config.Metric, oidToPdu map[string } oid := lookup.Oid for _, label := range lookup.Labels { - oid = fmt.Sprintf("%s.%s", oid, listToOid(labelOids[label])) + if _, err := strconv.ParseUint(label, 10, 64); err == nil { + oid = fmt.Sprintf("%s.%v", oid, label) + } else { + oid = fmt.Sprintf("%s.%s", oid, listToOid(labelOids[label])) + } } if pdu, ok := oidToPdu[oid]; ok { t := lookup.Type diff --git a/generator/config.go b/generator/config.go index 5768908a..4481ab12 100644 --- a/generator/config.go +++ b/generator/config.go @@ -85,4 +85,5 @@ type Lookup struct { SourceIndexes []string `yaml:"source_indexes"` Lookup string `yaml:"lookup"` DropSourceIndexes bool `yaml:"drop_source_indexes,omitempty"` + CustomLabelName string `yaml:"custom_label_name,omitempty"` } diff --git a/generator/tree.go b/generator/tree.go index 4495bd58..4ceb387d 100644 --- a/generator/tree.go +++ b/generator/tree.go @@ -446,6 +446,13 @@ func generateConfigModule(cfg *ModuleConfig, node *Node, nameToNode map[string]* } } } + if foundIndexes != len(lookup.SourceIndexes) { + for _, index := range lookup.SourceIndexes { + if _, err := strconv.ParseUint(index, 10, 64); err == nil { + foundIndexes++ + } + } + } if foundIndexes == len(lookup.SourceIndexes) { if _, ok := nameToNode[lookup.Lookup]; !ok { return nil, fmt.Errorf("unknown index '%s'", lookup.Lookup) @@ -460,6 +467,9 @@ func generateConfigModule(cfg *ModuleConfig, node *Node, nameToNode map[string]* Type: typ, Oid: indexNode.Oid, } + if len(lookup.CustomLabelName) > 0 { + l.Labelname = sanitizeLabelName(lookup.CustomLabelName) + } for _, oldIndex := range lookup.SourceIndexes { l.Labels = append(l.Labels, sanitizeLabelName(oldIndex)) }