in otelcollector/fluent-bit/src/telemetry.go [181:355]
func InitializeTelemetryClient(agentVersion string) (int, error) {
encodedIkey := os.Getenv(envAppInsightsAuth)
if encodedIkey == "" {
Log("Environment Variable Missing \n")
return -1, errors.New("Missing Environment Variable")
}
decIkey, err := base64.StdEncoding.DecodeString(encodedIkey)
if err != nil {
Log("Decoding Error %s", err.Error())
return -1, err
}
appInsightsEndpoint := os.Getenv(envAppInsightsEndpoint)
telemetryClientConfig := appinsights.NewTelemetryConfiguration(string(decIkey))
// endpoint override required only for sovereign clouds
if appInsightsEndpoint != "" {
Log("Overriding the default AppInsights EndpointUrl with %s", appInsightsEndpoint)
telemetryClientConfig.EndpointUrl = appInsightsEndpoint
}
TelemetryClient = appinsights.NewTelemetryClientFromConfig(telemetryClientConfig)
telemetryOffSwitch := os.Getenv(envTelemetryOffSwitch)
if strings.Compare(strings.ToLower(telemetryOffSwitch), "true") == 0 {
Log("Appinsights telemetry is disabled \n")
TelemetryClient.SetIsEnabled(false)
}
CommonProperties = make(map[string]string)
CommonProperties["cluster"] = os.Getenv(envCluster)
CommonProperties["computer"] = os.Getenv(envComputerName)
CommonProperties["nodeip"] = os.Getenv(envNodeIP)
CommonProperties["mode"] = os.Getenv(envMode)
CommonProperties["controllertype"] = os.Getenv(envControllerType)
CommonProperties["agentversion"] = os.Getenv(envAgentVersion)
CommonProperties["namespace"] = os.Getenv(envNamespace)
CommonProperties["defaultmetricaccountname"] = os.Getenv(envDefaultMetricAccountName)
CommonProperties["podname"] = os.Getenv(envPodName)
CommonProperties["helmreleasename"] = os.Getenv(envHelmReleaseName)
CommonProperties["osType"] = os.Getenv("OS_TYPE")
isMacMode := os.Getenv("MAC")
if strings.Compare(strings.ToLower(isMacMode), "true") == 0 {
CommonProperties["macmode"] = isMacMode
aksResourceID := os.Getenv("CLUSTER")
CommonProperties["Region"] = os.Getenv("AKSREGION")
splitStrings := strings.Split(aksResourceID, "/")
if len(splitStrings) >= 9 {
CommonProperties["SubscriptionID"] = splitStrings[2]
CommonProperties["ResourceGroupName"] = splitStrings[4]
CommonProperties["ClusterName"] = splitStrings[8]
}
// Reading AMCS config file for telemetry
amcsConfigFile, err := os.Open(amcsConfigFilePath)
if err != nil {
message := fmt.Sprintf("Error while opening AMCS config file - %v\n", err)
Log(message)
SendException(message)
}
Log("Successfully read AMCS config file contents for telemetry\n")
defer amcsConfigFile.Close()
amcsConfigFileContents, err := ioutil.ReadAll(amcsConfigFile)
if err != nil {
message := fmt.Sprintf("Error while reading AMCS config file contents - %v\n", err)
Log(message)
SendException(message)
}
var amcsConfig map[string]interface{}
err = json.Unmarshal([]byte(amcsConfigFileContents), &amcsConfig)
if err != nil {
message := fmt.Sprintf("Error while unmarshaling AMCS config file contents - %v\n", err)
Log(message)
SendException(message)
}
// iterate through keys and parse dcr name
for key, _ := range amcsConfig {
Log("Parsing %v for extracting DCR:", key)
splitKey := strings.Split(key, "/")
// Expecting a key in this format to extract out DCR Id -
// https://<dce>.eastus2euap-1.metrics.ingest.monitor.azure.com/api/v1/dataCollectionRules/<dcrid>/streams/Microsoft-PrometheusMetrics
if len(splitKey) == 9 {
dcrId := CommonProperties["DCRId"]
if dcrId == "" {
CommonProperties["DCRId"] = splitKey[6]
} else {
dcrIdArray := dcrId + ";" + splitKey[6]
CommonProperties["DCRId"] = dcrIdArray
}
} else {
message := fmt.Sprintf("AMCS token config json key contract has changed, unable to get DCR ID. Logging the entire key as DCRId")
Log(message)
SendException(message)
dcrId := CommonProperties["DCRId"]
if dcrId == "" {
CommonProperties["DCRId"] = key
} else {
dcrIdArray := dcrId + ";" + key
CommonProperties["DCRId"] = dcrIdArray
}
}
}
}
TelemetryClient.Context().CommonProperties = CommonProperties
InvalidCustomPrometheusConfig = os.Getenv("AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG")
DefaultPrometheusConfig = os.Getenv("AZMON_USE_DEFAULT_PROMETHEUS_CONFIG")
// Reading regex hash file for telemetry
regexFileContents, err := ioutil.ReadFile(keepListRegexHashFilePath)
if err != nil {
Log("Error while opening regex hash file - %v\n", err)
} else {
Log("Successfully read regex hash file contents for telemetry\n")
var regexHash map[string]string
err = yaml.Unmarshal([]byte(regexFileContents), ®exHash)
if err != nil {
Log("Error while unmarshalling regex hash file - %v\n", err)
} else {
KubeletKeepListRegex = regexHash["KUBELET_METRICS_KEEP_LIST_REGEX"]
CoreDNSKeepListRegex = regexHash["COREDNS_METRICS_KEEP_LIST_REGEX"]
CAdvisorKeepListRegex = regexHash["CADVISOR_METRICS_KEEP_LIST_REGEX"]
KubeProxyKeepListRegex = regexHash["KUBEPROXY_METRICS_KEEP_LIST_REGEX"]
ApiServerKeepListRegex = regexHash["APISERVER_METRICS_KEEP_LIST_REGEX"]
KubeStateKeepListRegex = regexHash["KUBESTATE_METRICS_KEEP_LIST_REGEX"]
NodeExporterKeepListRegex = regexHash["NODEEXPORTER_METRICS_KEEP_LIST_REGEX"]
WinExporterKeepListRegex = regexHash["WINDOWSEXPORTER_METRICS_KEEP_LIST_REGEX"]
WinKubeProxyKeepListRegex = regexHash["WINDOWSKUBEPROXY_METRICS_KEEP_LIST_REGEX"]
PodannotationKeepListRegex = regexHash["POD_ANNOTATION_METRICS_KEEP_LIST_REGEX"]
KappieBasicKeepListRegex = regexHash["KAPPIEBASIC_METRICS_KEEP_LIST_REGEX"]
AcstorCapacityProvisionerKeepListRegex = regexHash["ACSTORCAPACITYPROVISONER_KEEP_LIST_REGEX"]
AcstorMetricsExporterKeepListRegex = regexHash["ACSTORMETRICSEXPORTER_KEEP_LIST_REGEX"]
NetworkObservabilityCiliumKeepListRegex = regexHash["NETWORKOBSERVABILITYCILIUM_METRICS_KEEP_LIST_REGEX"]
NetworkObservabilityHubbleKeepListRegex = regexHash["NETWORKOBSERVABILITYHUBBLE_METRICS_KEEP_LIST_REGEX"]
NetworkObservabilityRetinaKeepListRegex = regexHash["NETWORKOBSERVABILITYRETINA_METRICS_KEEP_LIST_REGEX"]
}
}
// Reading scrape interval hash file for telemetry
intervalFileContents, err := ioutil.ReadFile(intervalHashFilePath)
if err != nil {
Log("Error while opening interval hash file - %v\n", err)
} else {
Log("Successfully read interval hash file contents for telemetry\n")
var intervalHash map[string]string
err = yaml.Unmarshal([]byte(intervalFileContents), &intervalHash)
if err != nil {
Log("Error while unmarshalling interval hash file - %v\n", err)
} else {
KubeletScrapeInterval = intervalHash["KUBELET_SCRAPE_INTERVAL"]
CoreDNSScrapeInterval = intervalHash["COREDNS_SCRAPE_INTERVAL"]
CAdvisorScrapeInterval = intervalHash["CADVISOR_SCRAPE_INTERVAL"]
KubeProxyScrapeInterval = intervalHash["KUBEPROXY_SCRAPE_INTERVAL"]
ApiServerScrapeInterval = intervalHash["APISERVER_SCRAPE_INTERVAL"]
KubeStateScrapeInterval = intervalHash["KUBESTATE_SCRAPE_INTERVAL"]
NodeExporterScrapeInterval = intervalHash["NODEEXPORTER_SCRAPE_INTERVAL"]
WinExporterScrapeInterval = intervalHash["WINDOWSEXPORTER_SCRAPE_INTERVAL"]
WinKubeProxyScrapeInterval = intervalHash["WINDOWSKUBEPROXY_SCRAPE_INTERVAL"]
PromHealthScrapeInterval = intervalHash["PROMETHEUS_COLLECTOR_HEALTH_SCRAPE_INTERVAL"]
PodAnnotationScrapeInterval = intervalHash["POD_ANNOTATION_SCRAPE_INTERVAL"]
KappieBasicScrapeInterval = intervalHash["KAPPIEBASIC_SCRAPE_INTERVAL"]
AcstorCapacityProvisionerScrapeInterval = intervalHash["ACSTORCAPACITYPROVISIONER_SCRAPE_INTERVAL"]
AcstorMetricsExporterScrapeInterval = intervalHash["ACSTORMETRICSEXPORTER_SCRAPE_INTERVAL"]
NetworkObservabilityCiliumScrapeInterval = intervalHash["NETWORKOBSERVABILITYCILIUM_SCRAPE_INTERVAL"]
NetworkObservabilityHubbleScrapeInterval = intervalHash["NETWORKOBSERVABILITYHUBBLE_SCRAPE_INTERVAL"]
NetworkObservabilityRetinaScrapeInterval = intervalHash["NETWORKOBSERVABILITYRETINA_SCRAPE_INTERVAL"]
}
}
return 0, nil
}