in source/plugins/go/src/telemetry.go [101:244]
func SendContainerLogPluginMetrics(telemetryPushIntervalProperty string) {
telemetryPushInterval, err := strconv.Atoi(telemetryPushIntervalProperty)
if err != nil {
Log("Error Converting telemetryPushIntervalProperty %s. Using Default Interval... %d \n", telemetryPushIntervalProperty, defaultTelemetryPushIntervalSeconds)
telemetryPushInterval = defaultTelemetryPushIntervalSeconds
}
ContainerLogTelemetryTicker = time.NewTicker(time.Second * time.Duration(telemetryPushInterval))
start := time.Now()
SendEvent(eventNameContainerLogInit, make(map[string]string))
for ; true; <-ContainerLogTelemetryTicker.C {
elapsed := time.Since(start)
ContainerLogTelemetryMutex.Lock()
flushRate := FlushedRecordsCount / FlushedRecordsTimeTaken * 1000
logRate := FlushedRecordsCount / float64(elapsed/time.Second)
logSizeRate := FlushedRecordsSize / float64(elapsed/time.Second)
telegrafMetricsSentCount := TelegrafMetricsSentCount
telegrafMetricsSendErrorCount := TelegrafMetricsSendErrorCount
telegrafMetricsSend429ErrorCount := TelegrafMetricsSend429ErrorCount
winTelegrafMetricsCountWithTagsSize64KBorMore := WinTelegrafMetricsCountWithTagsSize64KBorMore
containerLogsSendErrorsToMDSDFromFluent := ContainerLogsSendErrorsToMDSDFromFluent
containerLogsMDSDClientCreateErrors := ContainerLogsMDSDClientCreateErrors
containerLogsSendErrorsToADXFromFluent := ContainerLogsSendErrorsToADXFromFluent
containerLogsADXClientCreateErrors := ContainerLogsADXClientCreateErrors
insightsMetricsMDSDClientCreateErrors := InsightsMetricsMDSDClientCreateErrors
kubeMonEventsMDSDClientCreateErrors := KubeMonEventsMDSDClientCreateErrors
osmNamespaceCount := OSMNamespaceCount
promMonitorPods := PromMonitorPods
promMonitorPodsNamespaceLength := PromMonitorPodsNamespaceLength
promMonitorPodsLabelSelectorLength := PromMonitorPodsLabelSelectorLength
promMonitorPodsFieldSelectorLength := PromMonitorPodsFieldSelectorLength
containerLogRecordCountWithEmptyTimeStamp := ContainerLogRecordCountWithEmptyTimeStamp
TelegrafMetricsSentCount = 0.0
TelegrafMetricsSendErrorCount = 0.0
TelegrafMetricsSend429ErrorCount = 0.0
WinTelegrafMetricsCountWithTagsSize64KBorMore = 0.0
FlushedRecordsCount = 0.0
FlushedRecordsSize = 0.0
FlushedRecordsTimeTaken = 0.0
logLatencyMs := AgentLogProcessingMaxLatencyMs
logLatencyMsContainer := AgentLogProcessingMaxLatencyMsContainer
AgentLogProcessingMaxLatencyMs = 0
AgentLogProcessingMaxLatencyMsContainer = ""
ContainerLogsSendErrorsToMDSDFromFluent = 0.0
ContainerLogsMDSDClientCreateErrors = 0.0
ContainerLogsSendErrorsToADXFromFluent = 0.0
ContainerLogsADXClientCreateErrors = 0.0
InsightsMetricsMDSDClientCreateErrors = 0.0
KubeMonEventsMDSDClientCreateErrors = 0.0
ContainerLogRecordCountWithEmptyTimeStamp = 0.0
ContainerLogTelemetryMutex.Unlock()
if strings.Compare(strings.ToLower(os.Getenv("CONTROLLER_TYPE")), "daemonset") == 0 {
telemetryDimensions := make(map[string]string)
if strings.Compare(strings.ToLower(os.Getenv("CONTAINER_TYPE")), "prometheussidecar") == 0 {
telemetryDimensions["CustomPromMonitorPods"] = promMonitorPods
if promMonitorPodsNamespaceLength > 0 {
telemetryDimensions["CustomPromMonitorPodsNamespaceLength"] = strconv.Itoa(promMonitorPodsNamespaceLength)
}
if promMonitorPodsLabelSelectorLength > 0 {
telemetryDimensions["CustomPromMonitorPodsLabelSelectorLength"] = strconv.Itoa(promMonitorPodsLabelSelectorLength)
}
if promMonitorPodsFieldSelectorLength > 0 {
telemetryDimensions["CustomPromMonitorPodsFieldSelectorLength"] = strconv.Itoa(promMonitorPodsFieldSelectorLength)
}
if osmNamespaceCount > 0 {
telemetryDimensions["OsmNamespaceCount"] = strconv.Itoa(osmNamespaceCount)
}
telemetryDimensions["PromFbitChunkSize"] = os.Getenv("AZMON_SIDECAR_FBIT_CHUNK_SIZE")
telemetryDimensions["PromFbitBufferSize"] = os.Getenv("AZMON_SIDECAR_FBIT_BUFFER_SIZE")
telemetryDimensions["PromFbitMemBufLimit"] = os.Getenv("AZMON_SIDECAR_FBIT_MEM_BUF_LIMIT")
SendEvent(eventNameCustomPrometheusSidecarHeartbeat, telemetryDimensions)
} else {
fbitFlushIntervalSecs := os.Getenv("FBIT_SERVICE_FLUSH_INTERVAL")
if fbitFlushIntervalSecs != "" {
telemetryDimensions["FbitServiceFlushIntervalSecs"] = fbitFlushIntervalSecs
}
fbitTailBufferChunkSizeMBs := os.Getenv("FBIT_TAIL_BUFFER_CHUNK_SIZE")
if fbitTailBufferChunkSizeMBs != "" {
telemetryDimensions["FbitBufferChunkSizeMBs"] = fbitTailBufferChunkSizeMBs
}
fbitTailBufferMaxSizeMBs := os.Getenv("FBIT_TAIL_BUFFER_MAX_SIZE")
if fbitTailBufferMaxSizeMBs != "" {
telemetryDimensions["FbitBufferMaxSizeMBs"] = fbitTailBufferMaxSizeMBs
}
fbitTailMemBufLimitMBs := os.Getenv("FBIT_TAIL_MEM_BUF_LIMIT")
if fbitTailMemBufLimitMBs != "" {
telemetryDimensions["FbitMemBufLimitSizeMBs"] = fbitTailMemBufLimitMBs
}
SendEvent(eventNameDaemonSetHeartbeat, telemetryDimensions)
flushRateMetric := appinsights.NewMetricTelemetry(metricNameAvgFlushRate, flushRate)
TelemetryClient.Track(flushRateMetric)
logRateMetric := appinsights.NewMetricTelemetry(metricNameAvgLogGenerationRate, logRate)
logSizeMetric := appinsights.NewMetricTelemetry(metricNameLogSize, logSizeRate)
TelemetryClient.Track(logRateMetric)
Log("Log Size Rate: %f\n", logSizeRate)
TelemetryClient.Track(logSizeMetric)
logLatencyMetric := appinsights.NewMetricTelemetry(metricNameAgentLogProcessingMaxLatencyMs, logLatencyMs)
logLatencyMetric.Properties["Container"] = logLatencyMsContainer
TelemetryClient.Track(logLatencyMetric)
}
}
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameNumberofTelegrafMetricsSentSuccessfully, telegrafMetricsSentCount))
if telegrafMetricsSendErrorCount > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameNumberofSendErrorsTelegrafMetrics, telegrafMetricsSendErrorCount))
}
if telegrafMetricsSend429ErrorCount > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameNumberofSend429ErrorsTelegrafMetrics, telegrafMetricsSend429ErrorCount))
}
if containerLogsSendErrorsToMDSDFromFluent > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameErrorCountContainerLogsSendErrorsToMDSDFromFluent, containerLogsSendErrorsToMDSDFromFluent))
}
if containerLogsMDSDClientCreateErrors > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameErrorCountContainerLogsMDSDClientCreateError, containerLogsMDSDClientCreateErrors))
}
if containerLogsSendErrorsToADXFromFluent > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameErrorCountContainerLogsSendErrorsToADXFromFluent, containerLogsSendErrorsToADXFromFluent))
}
if containerLogsADXClientCreateErrors > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameErrorCountContainerLogsADXClientCreateError, containerLogsADXClientCreateErrors))
}
if insightsMetricsMDSDClientCreateErrors > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameErrorCountInsightsMetricsMDSDClientCreateError, insightsMetricsMDSDClientCreateErrors))
}
if kubeMonEventsMDSDClientCreateErrors > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameErrorCountKubeMonEventsMDSDClientCreateError, kubeMonEventsMDSDClientCreateErrors))
}
if winTelegrafMetricsCountWithTagsSize64KBorMore > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameNumberofWinTelegrafMetricsWithTagsSize64KBorMore, winTelegrafMetricsCountWithTagsSize64KBorMore))
}
if ContainerLogRecordCountWithEmptyTimeStamp > 0.0 {
TelemetryClient.Track(appinsights.NewMetricTelemetry(metricNameContainerLogRecordCountWithEmptyTimeStamp, containerLogRecordCountWithEmptyTimeStamp))
}
start = time.Now()
}
}