Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mehrinstanzenfähige Protokollierung in Container Insights ist für Kunden nützlich, die freigegebene Clusterplattformen mit AKS betreiben. Möglicherweise benötigen Sie die Möglichkeit, die Sammlung von Containerkonsolenprotokollen so zu konfigurieren, dass Protokolle von verschiedenen Teams getrennt werden, sodass jeder Zugriff auf die Containerprotokolle der Container hat, die in K8s-Namespaces ausgeführt werden, und die Möglichkeit, auf die Abrechnung und Verwaltung zuzugreifen, die dem Azure Log Analytics-Arbeitsbereich zugeordnet ist. Containerprotokolle aus Infrastrukturnamespaces wie kube-system können beispielsweise an einen bestimmten Log Analytics-Arbeitsbereich für das Infrastrukturteam geleitet werden, während die Containerprotokolle jedes Anwendungsteams an die jeweiligen Arbeitsbereiche gesendet werden können.
In diesem Artikel wird beschrieben, wie die Mehrinstanzenprotokollierung in Containereinblicken funktioniert, welche Szenarien unterstützt werden, und wie Sie Ihren Cluster integrieren, um dieses Feature zu verwenden.
Szenarien
Das Feature für die mehrmandantenfähige Protokollierung in Container Insights unterstützt die folgenden Szenarien:
Mehrinstanzenfähigkeit. Sendet Containerprotokolle (stdout & stderr) von einem oder mehreren K8s-Namespaces an den entsprechenden Log Analytics-Arbeitsbereich.
Multihoming: Sendet den gleichen Satz von Containerprotokollen (stdout & stderr) aus einem oder mehreren K8s-Namespaces an mehrere Log Analytics-Arbeitsbereiche.
Funktionsweise
Containereinblicke verwenden eine Datensammlungsregel (Data Collection Rule, DCR), um die Datensammlungseinstellungen für Ihren AKS-Cluster zu definieren. Beim Aktivieren von Container Insights wird automatisch eine DCR für die standardmäßige ContainerInsights-Erweiterung erstellt. Dieser DCR ist ein Singleton, was bedeutet, dass ein DCR pro Kubernetes-Cluster vorhanden ist.
Für die mehrinstanzenfähige Protokollierung fügt Container Insights Unterstützung für ContainerLogV2Extension DCRs hinzu, die zum Definieren der Sammlung von Containerprotokollen für K8s-Namespaces verwendet werden. Mehrere ContainerLogV2Extension DCRs können mit unterschiedlichen Einstellungen für verschiedene Namespaces und alle mit demselben AKS-Cluster verknüpft werden.
Wenn Sie das Mehrinstanzen-Feature über eine ConfigMap aktivieren, ruft der Container Insights-Agent regelmäßig sowohl die Standarderweiterung ContainerInsights DCR als auch die ContainerLogV2Extension DCRs ab, die dem AKS-Cluster zugeordnet sind. Dieser Abruf wird alle 5 Minuten ausgeführt, beginnend beim Starten des Containers. Wenn zusätzliche ContainerLogV2Extension DCRs hinzugefügt werden, werden sie erkannt, wenn der Abruf das nächste Mal ausgeführt wird. Alle konfigurierten Datenströme im Standard-DCR, abgesehen von Containerprotokollen, werden weiterhin wie gewohnt an den Log Analytics-Arbeitsbereich im Standardmäßigen ContainerInsights DCR gesendet.
Die folgende Logik wird verwendet, um zu bestimmen, wie die einzelnen Protokolleinträge verarbeitet werden:
- Wenn ein ContainerLogV2Extension DCR für den Namespace des Protokolleintrags vorhanden ist, wird dieser DCR zum Verarbeiten des Eintrags verwendet. Dazu gehören das Log Analytics-Arbeitsbereichsziel und alle Transformationen zur Erfassungszeit.
- Wenn kein ContainerLogV2Extension DCR für den Namespace des Protokolleintrags vorhanden ist, wird der Standardmäßige ContainerInsights DCR zum Verarbeiten des Eintrags verwendet.
Einschränkungen
- Siehe Einschränkungen für die Sammlung von Protokollen mit hoher Skalierung in Container Insights.
- Pro Cluster werden maximal 30 ContainerLogV2Extension DCR-Zuordnungen unterstützt.
Voraussetzungen
- Der Modus für hohe Protokollskala muss für den Cluster mithilfe der Anleitungen zur Sammlung von Protokollen im hohen Maßstab in Container Insights (Vorschau) konfiguriert werden.
- Ein Datensammlungsendpunkt (DATA Collection Endpoint, DCE) wird mit dem DCR für jede Anwendung oder jedes Infrastrukturteam erstellt. Der Protokollaufnahmeendpunkt jeder DCE muss in der Firewall konfiguriert werden, wie in den Anforderungen der Netzwerkfirewall für die Sammlung von Protokollen in Container Insights im hohen Maßstab beschrieben.
Aktivieren von Mehrinstanzenfähigkeit für den Cluster
Befolgen Sie die Anweisungen unter Konfigurieren und Bereitstellen einer ConfigMap, um die ConfigMap für den Cluster herunterzuladen und zu aktualisieren.
Aktivieren Sie den Hochskalierungsmodus, indem Sie die
enabled
-Einstellung unteragent_settings.high_log_scale
wie folgt ändern.agent-settings: |- [agent_settings.high_log_scale] enabled = true
Aktivieren Sie die Mehrinstanzenfähigkeit, indem Sie die
enabled
Einstellung unterlog_collection_settings.multi_tenancy
wie folgt ändern.log-data-collection-settings: |- [log_collection_settings] [log_collection_settings.multi_tenancy] enabled = true
Wenden Sie die ConfigMap auf den Cluster mit den folgenden Befehlen an.
kubectl config set-context <cluster-name> kubectl apply -f <configmap_yaml_file.yaml>
Erstellen von DCR für jedes Anwendungs- oder Infrastrukturteam
Wiederholen Sie die folgenden Schritte, um einen separaten DCR für jede Anwendung oder jedes Infrastrukturteam zu erstellen. Jeder enthält eine Reihe von K8s-Namespaces und ein Log Analytics-Arbeitsbereichsziel.
Tipp
Stellen Sie für Multihoming eine separate DCR-Vorlage und -Parameterdatei für jeden Log Analytics-Arbeitsbereich bereit und schließen Sie denselben Satz von K8s-Namespaces ein. Dadurch können dieselben Protokolle an mehrere Arbeitsbereiche gesendet werden. Wenn Sie beispielsweise Protokolle für app-team-1, app-team-2 an LAW1 und LAW2 senden möchten,
- Erstellen von DCR1 und Einschließen von LAW1 für App-team-1- und App-team-2-Namespaces
- Erstellen von DCR2 und Einschließen von LAW2 für App-Team-1- und App-team-2-Namespaces
Rufen Sie die folgende ARM-Vorlage und -Parameterdatei ab.
Vorlage: https://aka.ms/aks-enable-monitoring-multitenancy-onboarding-template-file
Parameter: https://aka.ms/aks-enable-monitoring-multitenancy-onboarding-template-parameter-fileBearbeiten Sie die Parameterdatei mit Werten für die folgenden Werte.
Parametername BESCHREIBUNG aksResourceId
Azure-Ressourcen-ID des AKS-Clusters aksResourceLocation
Azure-Region des AKS-Clusters workspaceResourceId
Azure-Ressourcen-ID des Log Analytics-Arbeitsbereichs workspaceRegion
Azure-Region des Log Analytics-Arbeitsbereichs K8sNamespaces
Liste der K8s-Namespaces für Protokolle, die an den log Analytics-Arbeitsbereich gesendet werden sollen, der in dieser Parameterdatei definiert ist. resourceTagValues
Azure-Ressourcentags zur Verwendung für AKS, Datensammlungsregel (Data Collection Rule, DCR) und Datensammlungsendpunkt (Data Collection Endpoint, DCE). transformKql
KQL-Filter für die erweiterte Filterung mithilfe der Erfassungszeittransformation. Um beispielsweise die Protokolle für einen bestimmten Pod auszuschließen, verwenden Sie source \| where PodName != '<podName>'
. Details finden Sie unter Transformationen in Azure Monitor .useAzureMonitorPrivateLinkScope
Gibt an, ob azure Monitor Private Link Scope konfiguriert werden soll. azureMonitorPrivateLinkScopeResourceId
Azure-Ressourcen-ID des Azure Monitor Private Link Scope. Stellen Sie die Vorlage mithilfe der Parameterdatei mit dem folgenden Befehl bereit.
az deployment group create --name AzureMonitorDeployment --resource-group <aksClusterResourceGroup> --template-file existingClusterOnboarding.json --parameters existingClusterParam.json
Deaktivieren der Mehrinstanzenprotokollierung
Hinweis
Lesen Sie "Deaktivieren der Überwachung Ihres Kubernetes-Clusters ", wenn Sie Containereinblicke für den Cluster vollständig deaktivieren möchten.
Führen Sie die folgenden Schritte aus, um die Mehrinstanzenprotokollierung in einem Cluster zu deaktivieren.
Verwenden Sie den folgenden Befehl, um alle DCR-Zuordnungen für den Cluster auflisten.
az monitor data-collection rule association list-by-resource --resource /subscriptions/<subId>/resourcegroups/<rgName>/providers/Microsoft.ContainerService/managedClusters/<clusterName>
Verwenden Sie den folgenden Befehl, um alle DCR-Zuordnungen für die ContainerLogV2-Erweiterung zu löschen.
az monitor data-collection rule association delete --association-name <ContainerLogV2ExtensionDCRA> --resource /subscriptions/<subId>/resourcegroups/<rgName>/providers/Microsoft.ContainerService/managedClusters/<clusterName>
Löschen Sie den ContainerLogV2Extension DCR.
az monitor data-collection rule delete --name <ContainerLogV2Extension DCR> --resource-group <rgName>
Bearbeiten Sie
container-azm-ms-agentconfig
und ändern Sie den Wert fürenabled
unter[log_collection_settings.multi_tenancy]
vontrue
zufalse
.kubectl edit cm container-azm-ms-agentconfig -n kube-system -o yaml
Problembehandlung
Führen Sie die folgenden Schritte aus, um Probleme mit der Mehrinstanzenprotokollierung in Containereinblicken zu beheben.
Stellen Sie sicher, dass die Protokollierung mit hoher Skalierung für den Cluster aktiviert ist.
# get the list of ama-logs and these pods should be in Running state # If these are not in Running state, then this needs to be investigated kubectl get po -n kube-system | grep ama-logs # get the logs one of the ama-logs daemonset pod and check for log message indicating high scale enabled kubectl logs ama-logs-xxxxx -n kube-system -c ama-logs | grep high # output should be something like "Using config map value: enabled = true for high log scale config"
Stellen Sie sicher, dass das ContainerLogV2-Schema für den Cluster aktiviert ist.
# get the list of ama-logs and these pods should be in Running state # If these are not in Running state, then this needs to be investigated kubectl get po -n kube-system | grep ama-logs # exec into any one of the ama-logs daemonset pod and check for the environment variables kubectl exec -it ama-logs-xxxxx -n kube-system -c ama-logs -- bash # check if the containerlog v2 schema enabled or not env | grep AZMON_CONTAINER_LOG_SCHEMA_VERSION # output should be v2. If not v2, then check whether this is being enabled through DCR AZMON_CONTAINER_LOG_SCHEMA_VERSION=v2 # check if its enabled through DCR grep -r "enableContainerLogV2" /etc/mdsd.d/config-cache/configchunks/ # validate the enableContainerLogV2 configured with true or not from JSON output
Stellen Sie sicher, dass Mehrinstanzenfähigkeit für den Cluster aktiviert ist.
# get the list of ama-logs and these pods should be in Running state # If these are not in Running state, then this needs to be investigated kubectl get po -n kube-system | grep ama-logs # get the logs one of the ama-logs daemonset pod and check for log message indicating high scale enabled kubectl logs ama-logs-xxxxx -n kube-system -c ama-logs | grep multi_tenancy # output should be something like "config::INFO: Using config map setting multi_tenancy enabled: true, advanced_mode_enabled: false and namespaces: [] for Multitenancy log collection"
Überprüfen Sie, ob die DCRs und DCEs im Zusammenhang mit ContainerInsightsExtension und ContainerLogV2Extension erstellt werden.
az account set -s <clustersubscriptionId> az monitor data-collection rule association list-by-resource --resource "<clusterResourceId>" # output should list both ContainerInsightsExtension and ContainerLogV2Extension DCRs associated to the cluster # From the output, for each dataCollectionRuleId and check dataCollectionEndpoint associated or not az monitor data-collection rule show --ids <dataCollectionRuleId> # you can also check the extension settings for the K8s namespace configuration
Stellen Sie sicher, dass der Agent alle zugehörigen DCRs herunter lädt.
# get the list of ama-logs and these pods should be in Running state # If these are not in Running state, then this needs to be investigated kubectl get po -n kube-system | grep ama-logs # exec into any one of the ama-logs daemonset pod and check for the environment variables kubectl exec -it ama-logs-xxxxx -n kube-system -c ama-logs -- bash # check if its enabled through DCR grep -r "ContainerLogV2Extension" /etc/mdsd.d/config-cache/configchunks # output should list all the associated DCRs and configuration # if there are no DCRs downloaded then likely Agent has issues to pull associate DCRs and this could be missing network or firewall issue and check for errors in mdsd.err log file cat /var/opt/microsoft/linuxmonagent/log/mdsd.err
Überprüfen, ob fehler in fluent-bit-out-oms-runtime.log Datei vorhanden sind
# get the list of ama-logs and these pods should be in Running state # If these are not in Running state, then this needs to be investigated kubectl get po -n kube-system | grep ama-logs # exec into any one of the ama-logs daemonset pod and check for the environment variables kubectl exec -it ama-logs-xxxxx -n kube-system -c ama-logs -- bash # check for errors cat /var/opt/microsoft/docker-cimprov/log/fluent-bit-out-oms-runtime.log
Nächste Schritte
- Weitere Informationen zu Container-Einblicke.