in otelcollector/shared/configmap/ccp/prometheus-ccp-config-merger.go [46:118]
func appendMetricRelabelConfig(yamlConfigFile, keepListRegex string) {
fmt.Printf("Adding keep list regex or minimal ingestion regex for %s\n", yamlConfigFile)
content, err := os.ReadFile(yamlConfigFile)
if err != nil {
fmt.Printf("Error reading config file %s: %v. The keep list regex will not be used\n", yamlConfigFile, err)
return
}
var config map[string]interface{}
if err := yaml.Unmarshal(content, &config); err != nil {
fmt.Printf("Error unmarshalling YAML for %s: %v. The keep list regex will not be used\n", yamlConfigFile, err)
return
}
keepListMetricRelabelConfig := map[string]interface{}{
"source_labels": []interface{}{"__name__"},
"action": "keep",
"regex": keepListRegex,
}
if scrapeConfigs, ok := config["scrape_configs"].([]interface{}); ok {
for i, scfg := range scrapeConfigs {
// Ensure scfg is a map with string keys
if scfgMap, ok := scfg.(map[interface{}]interface{}); ok {
// Convert to map[string]interface{}
stringScfgMap := make(map[string]interface{})
for k, v := range scfgMap {
if key, ok := k.(string); ok {
stringScfgMap[key] = v
} else {
fmt.Printf("Encountered non-string key in scrape config map: %v\n", k)
return
}
}
// Update or add metric_relabel_configs
if metricRelabelCfgs, ok := stringScfgMap["metric_relabel_configs"].([]interface{}); ok {
stringScfgMap["metric_relabel_configs"] = append(metricRelabelCfgs, keepListMetricRelabelConfig)
} else {
stringScfgMap["metric_relabel_configs"] = []interface{}{keepListMetricRelabelConfig}
}
// Convert back to map[interface{}]interface{} for YAML marshalling
interfaceScfgMap := make(map[interface{}]interface{})
for k, v := range stringScfgMap {
interfaceScfgMap[k] = v
}
// Update the scrape_configs list
scrapeConfigs[i] = interfaceScfgMap
}
}
// Write updated scrape_configs back to config
config["scrape_configs"] = scrapeConfigs
// Marshal the updated config to YAML
cfgYamlWithMetricRelabelConfig, err := yaml.Marshal(config)
if err != nil {
fmt.Printf("Error marshalling YAML for %s: %v. The keep list regex will not be used\n", yamlConfigFile, err)
return
}
// Write the updated YAML back to the file
if err := os.WriteFile(yamlConfigFile, cfgYamlWithMetricRelabelConfig, fs.FileMode(0644)); err != nil {
fmt.Printf("Error writing to file %s: %v. The keep list regex will not be used\n", yamlConfigFile, err)
return
}
} else {
fmt.Printf("No 'scrape_configs' found in the YAML. The keep list regex will not be used.\n")
}
}