diff --git a/providers/azure/aci.go b/providers/azure/aci.go index f21abd413..07c52a9ee 100644 --- a/providers/azure/aci.go +++ b/providers/azure/aci.go @@ -220,6 +220,16 @@ func NewACIProvider(config string, rm *manager.ResourceManager, nodeName, operat } } + if clusterResourceID := os.Getenv("CLUSTER_RESOURCE_ID"); clusterResourceID != "" { + if p.diagnostics != nil && p.diagnostics.LogAnalytics != nil { + p.diagnostics.LogAnalytics.LogType = aci.LogAnlyticsLogTypeContainerInsights + p.diagnostics.LogAnalytics.Metadata = map[string]string{ + aci.LogAnalyticsMetadataKeyClusterResourceID: clusterResourceID, + aci.LogAnalyticsMetadataKeyNodeName: nodeName, + } + } + } + if rg := os.Getenv("ACI_RESOURCE_GROUP"); rg != "" { p.resourceGroup = rg } @@ -654,6 +664,15 @@ func formDNSSearchFitsLimits(searches []string) string { return strings.Join(searches, " ") } +func (p *ACIProvider) getDiagnostics(pod *v1.Pod) *aci.ContainerGroupDiagnostics { + if p.diagnostics != nil && p.diagnostics.LogAnalytics != nil && p.diagnostics.LogAnalytics.LogType == aci.LogAnlyticsLogTypeContainerInsights { + d := *p.diagnostics + d.LogAnalytics.Metadata[aci.LogAnalyticsMetadataKeyPodUUID] = string(pod.ObjectMeta.UID) + return &d + } + return p.diagnostics +} + func containerGroupName(pod *v1.Pod) string { return fmt.Sprintf("%s-%s", pod.Namespace, pod.Name) } diff --git a/providers/azure/client/aci/types.go b/providers/azure/client/aci/types.go index 7c359868d..8788e7ca5 100644 --- a/providers/azure/client/aci/types.go +++ b/providers/azure/client/aci/types.go @@ -340,8 +340,10 @@ type ContainerGroupDiagnostics struct { // LogAnalyticsWorkspace defines details for a Log Analytics workspace type LogAnalyticsWorkspace struct { - WorkspaceID string `json:"workspaceID,omitempty"` - WorkspaceKey string `json:"workspaceKey,omitempty"` + WorkspaceID string `json:"workspaceID,omitempty"` + WorkspaceKey string `json:"workspaceKey,omitempty"` + LogType LogAnalyticsLogType `json:"logType,omitempty"` + Metadata map[string]string `json:"metadata,omitempty"` } // ContainerGroupMetricsResult stores all the results for a container group metrics request. @@ -470,3 +472,19 @@ type DNSConfig struct { SearchDomains string `json:"searchDomains,omitempty"` Options string `json:"options,omitempty"` } + +// LogAnalyticsLogType is an enum type for defining supported log analytics log types +type LogAnalyticsLogType string + +// Supported log analytics log types +const ( + LogAnlyticsLogTypeContainerInsights LogAnalyticsLogType = "ContainerInsights" + LogAnlyticsLogTypeContainerInstance LogAnalyticsLogType = "ContainerInstance" +) + +// Supported log analytics metadata keys +const ( + LogAnalyticsMetadataKeyPodUUID string = "pod-uuid" + LogAnalyticsMetadataKeyNodeName string = "node-name" + LogAnalyticsMetadataKeyClusterResourceID string = "cluster-resource-id" +)