otelcollector/shared/configmap/mp/tomlparser-set-global-config.go (84 lines of code) (raw):
package configmapsettings
import (
"fmt"
"log"
"os"
yaml "gopkg.in/yaml.v2"
)
type OtelConfig struct {
Exporters interface{} `yaml:"exporters"`
Processors interface{} `yaml:"processors"`
Extensions interface{} `yaml:"extensions"`
Receivers struct {
Prometheus struct {
Config map[string]interface{} `yaml:"config"`
TargetAllocator interface{} `yaml:"target_allocator"`
} `yaml:"prometheus"`
} `yaml:"receivers"`
Service struct {
Extensions interface{} `yaml:"extensions"`
Pipelines struct {
Metrics struct {
Exporters interface{} `yaml:"exporters"`
Processors interface{} `yaml:"processors"`
Receivers interface{} `yaml:"receivers"`
} `yaml:"metrics"`
MetricsTelemetry struct {
Exporters interface{} `yaml:"exporters,omitempty"`
Processors interface{} `yaml:"processors,omitempty"`
Receivers interface{} `yaml:"receivers,omitempty"`
} `yaml:"metrics/telemetry,omitempty"`
} `yaml:"pipelines"`
Telemetry struct {
Logs struct {
Level interface{} `yaml:"level"`
Encoding interface{} `yaml:"encoding"`
} `yaml:"logs"`
} `yaml:"telemetry"`
} `yaml:"service"`
}
func SetGlobalSettingsInCollectorConfig() {
azmonSetGlobalSettings := os.Getenv("AZMON_SET_GLOBAL_SETTINGS")
if azmonSetGlobalSettings == "true" {
mergedCollectorConfigPath := "/opt/microsoft/otelcollector/collector-config.yml"
mergedCollectorConfigFileContents, err := os.ReadFile(mergedCollectorConfigPath)
if err != nil {
fmt.Printf("Unable to read file contents from: %s - %v\n", mergedCollectorConfigPath, err)
return
}
var promScrapeConfig map[string]interface{}
var otelConfig OtelConfig
err = yaml.Unmarshal([]byte(mergedCollectorConfigFileContents), &otelConfig)
if err != nil {
fmt.Printf("Unable to unmarshal merged otel configuration from: %s - %v\n", mergedCollectorConfigFileContents, err)
return
}
promScrapeConfig = otelConfig.Receivers.Prometheus.Config
globalSettingsFromMergedOtelConfig := promScrapeConfig["global"]
if globalSettingsFromMergedOtelConfig != nil {
fmt.Println("Found global settings in merged otel config, triyng to replace replicaset collector config")
collectorConfigReplicasetPath := "/opt/microsoft/otelcollector/collector-config-replicaset.yml"
replicasetCollectorConfigFileContents, err := os.ReadFile(collectorConfigReplicasetPath)
if err != nil {
fmt.Printf("Unable to read file contents from: %s - %v\n", replicasetCollectorConfigFileContents, err)
return
}
var otelConfigReplicaset OtelConfig
err = yaml.Unmarshal([]byte(replicasetCollectorConfigFileContents), &otelConfigReplicaset)
if err != nil {
fmt.Printf("Unable to unmarshal merged otel configuration from: %s - %v\n", replicasetCollectorConfigFileContents, err)
return
}
otelConfigReplicaset.Receivers.Prometheus.Config = map[string]interface{}{"global": ""}
otelConfigReplicaset.Receivers.Prometheus.Config["global"] = globalSettingsFromMergedOtelConfig
otelReplacedConfigYaml, _ := yaml.Marshal(otelConfigReplicaset)
if err := os.WriteFile(collectorConfigReplicasetPath, otelReplacedConfigYaml, 0644); err != nil {
fmt.Printf("Unable to write to: %s - %v\n", collectorConfigReplicasetPath, err)
return
}
log.Println("Updated file with global settings", collectorConfigReplicasetPath)
return
}
fmt.Println("Global settings are empty in custom config map, making no replacement")
}
}