Protokollierung für Containergruppen und -instanzen mit Azure Monitor-Protokollen

Log Analytics-Arbeitsbereiche bieten einen zentralen Ort zum Speichern und Abfragen von Protokolldaten – sowohl für Azure-Ressourcen als auch für lokale Ressourcen und Ressourcen in anderen Clouds. In Azure Container Instances ist die Unterstützung für das Senden von Protokollen und Ereignisdaten an Azure Monitor-Protokolle bereits integriert.

Um Containergruppenprotokolle und -ereignisdaten an Azure Monitor-Protokolle zu senden, geben Sie beim Konfigurieren einer Containergruppe eine ID und den Arbeitsbereichsschlüssel eines vorhandenen Log Analytics-Arbeitsbereichs an.

In den folgenden Abschnitten wird beschrieben, wie Sie eine Containergruppe mit aktivierter Protokollierung erstellen und Protokolle abfragen. Sie können eine Containergruppe auch mit einer Arbeitsbereichs-ID und einem Arbeitsbereichsschlüssel aktualisieren, um die Protokollierung zu aktivieren.

Hinweis

Dieser Artikel wurde kürzlich aktualisiert, um den Begriff Azure Monitor-Protokolle anstelle von Log Analytics aufzunehmen. Protokolldaten werden immer noch in einem Log Analytics-Arbeitsbereich gespeichert und weiterhin mit dem gleichen Log Analytics-Dienst erfasst und analysiert. Die Terminologie hat sich geändert, um der Rolle von Protokollen in Azure Monitor besser Rechnung zu tragen. Weitere Informationen finden Sie unter Terminologieänderungen bei Azure Monitor.

Voraussetzungen

Zum Aktivieren der Protokollierung in Ihren Containerinstanzen benötigen Sie Folgendes:

Abrufen der Log Analytics-Anmeldeinformationen

Azure Container Instances benötigt die Berechtigung zum Senden von Daten an Ihren Log Analytics-Arbeitsbereich. Wenn Sie diese Berechtigung erteilen und die Protokollierung aktivieren möchten, müssen Sie beim Erstellen der Containergruppe die Log Analytics-Arbeitsbereichs-ID und einen der Schlüssel (Primär- oder Sekundärschlüssel) angeben.

So erhalten Sie die Log Analytics-Arbeitsbereichs-ID und den Primärschlüssel:

  1. Navigieren Sie im Azure-Portal zu Ihrem Log Analytics-Arbeitsbereich.
  2. Wählen Sie unter Einstellungen die Option Agent-Verwaltung aus.
  3. Notieren Sie sich Folgendes:
    • Arbeitsbereichs-ID
    • Primärschlüssel

Erstellen einer Containergruppe

Mit der Log Analytics-Arbeitsbereichs-ID und dem Primärschlüssel können Sie nun eine protokollierungsfähige Containergruppe erstellen.

In den folgenden Beispielen werden zwei Möglichkeiten zum Erstellen einer Containergruppe gezeigt, die aus einem einzelnen fluentd-Container besteht: Azure CLI und Azure CLI mit einer YAML-Vorlage. Der fluentd-Container generiert mehrere Ausgabezeilen in der Standardkonfiguration. Da diese Ausgabe an Ihren Log Analytics-Arbeitsbereich gesendet wird, eignet sie sich gut zur Veranschaulichung der Anzeige und Abfrage von Protokollen.

Bereitstellen über die Azure-Befehlszeilenschnittstelle

Für eine Bereitstellung über die Azure-Befehlszeilenschnittstelle geben Sie im Befehl az container create die Parameter --log-analytics-workspace und --log-analytics-workspace-key an. Ersetzen Sie die beiden Arbeitsbereichswerte durch die Werten, die Sie im vorherigen Schritt erhalten haben (und aktualisieren Sie den Ressourcengruppennamen), bevor Sie den folgenden Befehl ausführen.

Hinweis

Im folgenden Beispiel wird ein öffentliches Container-Image von Docker Hub abgerufen. Es wird empfohlen, ein Pullgeheimnis für die Authentifizierung mithilfe eines Docker Hub-Kontos einrichten, anstatt einen anonymen Pull Request zu verwenden. Um die Zuverlässigkeit bei der Arbeit mit öffentlichen Inhalten zu verbessern, sollten Sie das Image in eine private Azure-Containerregistrierung importieren und dort verwalten. Erfahren Sie mehr über die Arbeit mit öffentlichen Images.

az container create \
    --resource-group myResourceGroup \
    --name mycontainergroup001 \
    --image fluent/fluentd:v1.3-debian-1 \
    --log-analytics-workspace <WORKSPACE_ID> \
    --log-analytics-workspace-key <WORKSPACE_KEY>

Bereitstellen mit YAML

Verwenden Sie diese Methode, wenn Sie Containergruppen lieber mit YAML bereitstellen möchten. Der folgende YAML-Code definiert eine Containergruppe mit einem einzelnen Container. Kopieren Sie den YAML-Code in eine neue Datei, und ersetzen Sie LOG_ANALYTICS_WORKSPACE_ID und LOG_ANALYTICS_WORKSPACE_KEY durch die im vorherigen Schritt erhaltenen Werte. Speichern Sie die Datei unter dem Namen deploy-aci.yaml.

Hinweis

Im folgenden Beispiel wird ein öffentliches Container-Image von Docker Hub abgerufen. Es wird empfohlen, ein Pullgeheimnis für die Authentifizierung mithilfe eines Docker Hub-Kontos einrichten, anstatt einen anonymen Pull Request zu verwenden. Um die Zuverlässigkeit bei der Arbeit mit öffentlichen Inhalten zu verbessern, sollten Sie das Image in eine private Azure-Containerregistrierung importieren und dort verwalten. Erfahren Sie mehr über die Arbeit mit öffentlichen Images.

apiVersion: 2019-12-01
location: eastus
name: mycontainergroup001
properties:
  containers:
  - name: mycontainer001
    properties:
      environmentVariables: []
      image: fluent/fluentd:v1.3-debian-1
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
  osType: Linux
  restartPolicy: Always
  diagnostics:
    logAnalytics:
      workspaceId: LOG_ANALYTICS_WORKSPACE_ID
      workspaceKey: LOG_ANALYTICS_WORKSPACE_KEY
tags: null
type: Microsoft.ContainerInstance/containerGroups

Führen Sie als Nächstes den folgenden Befehl aus, um die Containergruppe bereitzustellen. Ersetzen Sie myResourceGroup durch eine Ressourcengruppe in Ihrem Abonnement (oder erstellen Sie zuerst eine Ressourcengruppe namens „myResourceGroup“):

az container create --resource-group myResourceGroup --name mycontainergroup001 --file deploy-aci.yaml

Sie sollten kurz nach Ausgabe des Befehls eine Antwort von Azure mit den Bereitstellungsdetails erhalten.

Anzeigen von Protokollen

Nach der Bereitstellung der Containergruppe kann es bis zu 10 Minuten dauern, bis die ersten Protokolleinträge im Azure-Portal angezeigt werden.

So zeigen Sie die Protokolle der Containergruppen in der Tabelle ContainerInstanceLog_CL an:

  1. Navigieren Sie im Azure-Portal zu Ihrem Log Analytics-Arbeitsbereich.
  2. Wählen Sie unter Allgemein die Option Protokolle aus.
  3. Geben Sie die folgende Abfrage ein: ContainerInstanceLog_CL | limit 50.
  4. Wählen Sie Ausführen aus.

Von der Abfrage sollten mehrere Ergebnisse angezeigt werden. Falls anfangs keine Ergebnisse angezeigt werden, warten Sie einige Minuten, und wählen Sie dann die Schaltfläche Ausführen aus, um die Abfrage erneut auszuführen. Protokolleinträge werden standardmäßig im Format Tabelle angezeigt. Sie können dann eine Zeile erweitern, um den Inhalt eines einzelnen Protokolleintrags anzuzeigen.

Protokollsuchergebnisse im Azure-Portal

Anzeigen von Ereignissen

Sie können auch Ereignisse für Containerinstanzen im Azure-Portal anzeigen. Die Ereignisse beinhalten den Erstellungszeitpunkt und die Startzeit der Instanz. So zeigen Sie die Ereignisdaten in der Tabelle ContainerEvent_CL an:

  1. Navigieren Sie im Azure-Portal zu Ihrem Log Analytics-Arbeitsbereich.
  2. Wählen Sie unter Allgemein die Option Protokolle aus.
  3. Geben Sie die folgende Abfrage ein: ContainerEvent_CL | limit 50.
  4. Wählen Sie Ausführen aus.

Von der Abfrage sollten mehrere Ergebnisse angezeigt werden. Falls anfangs keine Ergebnisse angezeigt werden, warten Sie einige Minuten, und wählen Sie dann die Schaltfläche Ausführen aus, um die Abfrage erneut auszuführen. Einträge werden standardmäßig im Tabellenformat angezeigt. Sie können dann eine Zeile erweitern, um den Inhalt eines einzelnen Eintrags anzuzeigen.

Ereignissuchergebnisse im Azure-Portal

Abfragen von Containerprotokollen

Azure Monitor-Protokolle beinhalten eine umfassende Abfragesprache, um Informationen aus Tausenden von Protokollausgabezeilen abzurufen.

Die Grundstruktur einer Abfrage ist die Quelltabelle (in diesem Artikel ContainerInstanceLog_CL oder ContainerEvent_CL), gefolgt von einer Reihe von Operatoren, die durch einen senkrechten Strich (|) getrennt sind. Sie können mehrere Operatoren verketten, um die Ergebnisse einzugrenzen und erweiterte Funktionen auszuführen.

Fügen Sie zum Anzeigen von Beispielabfrageergebnissen die folgende Abfrage in das Abfragetextfeld ein, und wählen Sie die Schaltfläche Ausführen aus, um die Abfrage auszuführen. Diese Abfrage zeigt alle Protokolleinträge an, deren Feld „Message“ das Wort „warn“ enthält:

ContainerInstanceLog_CL
| where Message contains "warn"

Komplexere Abfragen werden ebenfalls unterstützt. Diese Abfrage zeigt beispielsweise nur die Protokolleinträge für die Containergruppe „mycontainergroup001“ an, die innerhalb der letzten Stunde generiert wurden:

ContainerInstanceLog_CL
| where (ContainerGroup_s == "mycontainergroup001")
| where (TimeGenerated > ago(1h))

Protokollschema

Hinweis

Einige der in der folgenden Tabelle aufgeführten Spalten sind nur als Teil des Schemas vorhanden und enthalten keine Daten, die in Protokollen ausgegeben werden. Diese Spalten sind mit der Beschreibung „Leer“ angegeben.

ContainerInstanceLog_CL

Spalte Type BESCHREIBUNG
Computer string Leer
ContainerGroup_s Zeichenfolge Der Name der Containergruppe, der der Datensatz zugeordnet ist
ContainerID_s Zeichenfolge Ein eindeutiger Bezeichner für den Container, dem der Datensatz zugeordnet ist
ContainerImage_s Zeichenfolge Der Name des Container-Images, dem der Datensatz zugeordnet ist
Location_s Zeichenfolge Der Speicherort der Ressource, der der Datensatz zugeordnet ist
`Message` Zeichenfolge Falls zutreffend, die Nachricht von dem Container
OSType_s Zeichenfolge Der Name des Betriebssystems, auf dem der Container basiert
RawData string Leer
ResourceGroup Zeichenfolge Name der Ressourcengruppe, der der Datensatz zugeordnet ist
Source_s Zeichenfolge Name der Protokollierungskomponente, „LoggingAgent“
SubscriptionId Zeichenfolge Ein eindeutiger Bezeichner für das Abonnement, dem der Datensatz zugeordnet ist.
TimeGenerated datetime Zeitstempel der Ereignisgenerierung durch den Azure-Dienst, der die zum Ereignis gehörende Anforderung verarbeitet hat
type Zeichenfolge Der Name der Tabelle.
_ResourceId Zeichenfolge Ein eindeutiger Bezeichner für die Ressource, der der Datensatz zugeordnet ist.
_SubscriptionId Zeichenfolge Ein eindeutiger Bezeichner für das Abonnement, dem der Datensatz zugeordnet ist.

ContainerEvent_CL

Spalte Type BESCHREIBUNG
Computer string Leer
ContainerGroupInstanceId_g Zeichenfolge Ein eindeutiger Bezeichner für die Containergruppe, der der Datensatz zugeordnet ist
ContainerGroup_s Zeichenfolge Der Name der Containergruppe, der der Datensatz zugeordnet ist
ContainerName_s Zeichenfolge Der Name des Containers, dem der Datensatz zugeordnet ist
Count_d real Wie oft das Ereignis seit der letzten Abfrage aufgetreten ist
FirstTimestamp_t datetime Der Zeitstempel des ersten Auftretens des Ereignisses
Location_s Zeichenfolge Der Speicherort der Ressource, der der Datensatz zugeordnet ist
`Message` Zeichenfolge Falls zutreffend, die Nachricht von dem Container
OSType_s Zeichenfolge Der Name des Betriebssystems, auf dem der Container basiert
RawData string Leer
Reason_s Zeichenfolge Der aktuelle Status der Containergruppe
ResourceGroup Zeichenfolge Der Name der Ressourcengruppe, der der Datensatz zugeordnet ist
SubscriptionId Zeichenfolge Ein eindeutiger Bezeichner für das Abonnement, dem der Datensatz zugeordnet ist.
TimeGenerated datetime Zeitstempel der Ereignisgenerierung durch den Azure-Dienst, der die zum Ereignis gehörende Anforderung verarbeitet hat
type Zeichenfolge Der Name der Tabelle.
_ResourceId Zeichenfolge Ein eindeutiger Bezeichner für die Ressource, der der Datensatz zugeordnet ist.
_SubscriptionId Zeichenfolge Ein eindeutiger Bezeichner für das Abonnement, dem der Datensatz zugeordnet ist.

Verwenden von Azure-Diagnoseeinstellungen

Die Diagnoseeinstellungen für Containergruppen sind eine Previewfunktion, die über Previewfunktionsoptionen im Azure-Portal aktiviert werden kann. Sobald dieses Feature für ein Abonnement aktiviert ist, können Diagnoseeinstellungen auf eine Containergruppe angewendet werden. Das Anwenden von Diagnoseeinstellungen führt dazu, dass eine Containergruppe neu gestartet wird.

Im folgenden Beispiel wird angezeigt, wie der Befehl „New-AzDiagnosticSetting“ verwendet werden kann, um ein Diagnoseeinstellungsobjekt auf eine Containergruppe anzuwenden.

$log = @()
$log += New-AzDiagnosticSettingLogSettingsObject -Enabled $true -Category ContainerInstanceLog -RetentionPolicyDay 7 -RetentionPolicyEnabled $true
 
New-AzDiagnosticSetting -Name test-setting -ResourceId <container-group-resource-id> -WorkspaceId <log-analytics-workspace-id> -Log $log

Nächste Schritte

Azure Monitor-Protokolle

Weitere Informationen zum Abfragen von Protokollen und Konfigurieren von Warnungen in Azure Monitor-Protokollen finden Sie in den folgenden Themen:

Überwachen von Container-CPU und -Arbeitsspeicher

Informationen zur Überwachung der CPU- und Arbeitsspeicherressourcen von Containerinstanzen finden Sie unter folgendem Link: