in otelcollector/shared/configmap/mp/prometheus-config-merger.go [207:257]
func AppendRelabelConfig(yamlConfigFile string, relabelConfig []map[string]interface{}, keepRegex string) {
fmt.Printf("Adding relabel config for %s\n", yamlConfigFile)
// Read YAML config file
data, err := os.ReadFile(yamlConfigFile)
if err != nil {
fmt.Printf("Error reading config file %s: %v. The relabel config will not be added\n", yamlConfigFile, err)
return
}
// Unmarshal YAML data
var config map[string]interface{}
err = yaml.Unmarshal(data, &config)
if err != nil {
fmt.Printf("Error unmarshalling YAML for %s: %v. The relabel config will not be added\n", yamlConfigFile, err)
return
}
// Append relabel config for keep list to each scrape config
if scrapeConfigs, ok := config["scrape_configs"].([]interface{}); ok {
for _, scfg := range scrapeConfigs {
if scfgMap, ok := scfg.(map[interface{}]interface{}); ok {
relabelCfgs, exists := scfgMap["relabel_configs"]
if !exists {
scfgMap["relabel_configs"] = relabelConfig
} else if relabelCfgsSlice, ok := relabelCfgs.([]interface{}); ok {
for _, rc := range relabelConfig {
relabelCfgsSlice = append(relabelCfgsSlice, rc)
}
scfgMap["relabel_configs"] = relabelCfgsSlice
}
}
}
// Marshal updated config back to YAML
cfgYamlWithRelabelConfig, err := yaml.Marshal(config)
if err != nil {
fmt.Printf("Error marshalling YAML for %s: %v. The relabel config will not be added\n", yamlConfigFile, err)
return
}
// Write updated YAML back to file
err = os.WriteFile(yamlConfigFile, []byte(cfgYamlWithRelabelConfig), fs.FileMode(0644))
if err != nil {
fmt.Printf("Error writing to file %s: %v. The relabel config will not be added\n", yamlConfigFile, err)
return
}
} else {
fmt.Printf("No 'scrape_configs' found in the YAML. The relabel config will not be added.\n")
}
}