Überwachen des Azure AppService-Protokolldatenstroms vom Terminal aus (mithilfe von Docker)

Informationen für Benutzer, die Probleme beim Öffnen des Azure-Portals haben.

1. Aktivieren Sie den Logstream in Azure AppService

Unmittelbar nach dem Erstellen des AppService wurde dieser deaktiviert. Aktivieren Sie ihn daher über das linke Menü → App Service-Protokoll. Blob kann in Ordnung sein, und ich bin nicht sicher, was die "detaillierte Fehlermeldung" bedeutet.

image.png

2. Überprüfen Sie den Protokolldatenstrom

Wählen Sie im linken Menü die Option "Protokolldatenstrom" und stellen Sie sicher, dass Sie das Protokoll auf dem Webbildschirm anzeigen können. Die folgende Abbildung zeigt, wie der Bot bereitgestellt wird, während auf ein Protokoll gewartet wird.

image.png

3. Melden Sie sich am Terminal an

Von nun an arbeiten wir im Client-Terminal (PowerShell). Vielleicht können Sie die Eingabeaufforderung oder sogar macOS verwenden.

Verwenden Sie das bereitgestellte Docker-Image, da die Installation der Azure-CLI mühsam ist. Starten Sie im nächsten Moment den Azure CLI-Container und geben Sie bash ein.

docker run -it mcr.microsoft.com/azure-cli

bash-5.0#

4. Melden Sie sich bei Azure an und erstellen Sie einen sogenannten "Dienstprinzipal".

Sie müssen sich über die CLI bei Azure anmelden, um auf den AppService-Protokolldatenstrom zugreifen zu können. Erstellen Sie einen sogenannten "Dienstprinzipal", damit Sie sich ohne Interaktion mit dem Benutzer anmelden können.

Melden Sie sich zunächst interaktiv bei Azure an.

bash-5.0# az login

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code GD3M62X89 to authenticate.

Wird angezeigt, greifen Sie auf die URL zu, geben Sie den Code ein und melden Sie sich mit dem Browser an.

Führen Sie nach dem Anmelden den folgenden Befehl aus:

bash-5.0# az ad sp create-for-rbac --name <your-service-principal-name>

Geben Sie einen überschaubaren Namen, aber ehrlich gesagt bin ich mir nicht sicher. Lassen Sie ihn also als "Mein erster Auftraggeber".

Wenn ausgeführt,

image.png

Da mag das Ergebnis

Notieren.

5. Legen Sie die Berechtigungen des Dienstprinzips fest

Der erstellte Dienstprinzipal hat die Rolle "Mitwirkender" und möchte nur das Protokoll anzeigen, es ist jedoch überprivilegiert und gefährlich. Führen Sie daher den folgenden Befehl aus, um die Rolle zu ändern ..

bash-5.0# az role assignment create --assignee <appId> --role "Website Contributor"
bash-5.0# az role assignment delete --assignee <appId> --role "Contributor"

wurde im vorherigen Abschnitt notiert.

Die Rolle Website-Mitwirkender liest nur das AppService-Protokoll. Es scheint, dass Sie auch Websites erstellen und verwalten können, aber ich mache Kompromisse, weil ich keine anderen geeigneten integrierten Rollen gefunden habe. Es wäre möglich, nur die gewünschte Funktion durch eine andere Methode als die eingebaute Rolle zuzulassen.

6. Melden Sie sich mit der Azure-CLI mit AppId, Kennwort und Mandant an

Melden Sie sich "nicht interaktiv" mit der Azure-CLI an, indem Sie die in Schritt 4 angegebenen Informationen verwenden.

Melden Sie sich zuerst ab.

bash-5.0# az logout

Melden Sie sich mit AppId, Passwort, Mandant an.

bash-5.0# az login --service-principal --username <appId> --password "<password>" --tenant <tenant>

Da das Passwort Symbole usw. enthält, ist es sicherer, es in "" einzuschließen.

7. Überwachen Sie den AppService-Protokolldatenstrom vom Terminal aus

bash-5.0# az webapp log tail --name <Anwendungsname>--resource-Gruppe <Name der Ressourcengruppe>

und finden Sie in der AppService-Übersicht des Azure-Portals.

image.png

Die folgende Abbildung zeigt den AppService-Protokolldatenstrom, der im Windows-Terminal überwacht wird. Sie können jetzt die AppService-Konsolenausgabe sowie den Webbildschirm sehen.

image.png

8. Machen Sie es möglich, die Überwachung auf einmal aufzurufen

Docker-Ausführung, Az-Login und Az-Webapp-Protokoll sind mühsam. Führen Sie sie daher mit einem einzigen Befehl aus. Es ist einfacher, Docker-Compose zu verwenden.

Erstellen Sie ein geeignetes Verzeichnis (hier das Verzeichnis "log"), erstellen Sie "log_tail.sh" darin und schreiben Sie den folgenden Inhalt.

log_tail.sh

#!/bin/bash

az login --service-principal \
         --username "c22b88da-35d7-4044-xxx-xxxxxxxx" \
         --password "xxxxxxxxxxxxxxxxxxxxx" \
         --tenant "da519484-d2e7-4d6b-xxxx-xxxxxxxx" \
         --output none

az webapp log tail \
         --name mybot001 \
         --resource-group my_bot_001_rc

Ersetzen Sie den Parameterteil durch Ihre oben beschriebene eigene Umgebung. Wir haben auch --output none zu az login hinzugefügt. Ich habe es verloren, weil es ärgerlich war, dass das Ergebnis der Anmeldung abgeschlossen wurde.

Als nächstes erstellen Sie docker-compose.yml im selben Verzeichnis und schreiben den folgenden Inhalt.

docker-compose.yml

version: '2'
services:
  log-tail:
    image: mcr.microsoft.com/azure-cli
    volumes:
      - .:/work
    working_dir: /work
    command: bash log_tail.sh

Definieren Sie einen Container aus dem Azure CLI-Image und führen Sie beim Start log_tail.sh aus.

Tun Sie dies im Terminal.

#Gehen Sie zum Protokollverzeichnis und führen Sie es aus
cd log
docker-compose run --rm log-tail

#Von außerhalb des Protokollverzeichnisses ausführen
cd ..
docker-compose -f ./log/docker-compose.yml run --rm log-tail

Jetzt können Sie das AppService-Protokoll auf einmal überwachen. Ich mache die Bot-Entwicklung in node.js, also habe ich mich in den Skripten in package.json registriert für:

{
    "name": "my-bot",
    "version": "1.0.0",
    "scripts": {
        "log-tail": "docker-compose -f ./scripts/log/docker-compose.yml run --rm log-tail",
<Unten weggelassen>

Es kann mit npm run log-tail oder yarn log-tail aufgerufen werden. Es ist sehr bequem geworden.

** Achtung: ** Ich habe vertrauliche Informationen wie Passwörter direkt in log_tail.sh geschrieben, daher sollte ich zu Umgebungsvariablen gehen. .. ..

9. Löschen Sie den Service Principal

Wenn Sie es nicht mehr verwenden oder als missbraucht empfinden, entfernen Sie das Dienstprinzipal und deaktivieren Sie die nicht interaktive Anmeldung.

  1. Führen Sie zuerst den Dialog az login durch.
  2. Verwenden Sie als Nächstes az ad sp list --all, um die Liste der Dienstprinzipien anzuzeigen (Anpassen der Ausgabeergebnisse (https://dev.classmethod.jp/articles/form-aws-cli). -output-by-jmespath /) Es scheint, dass dies möglich ist. Wenn Sie es also anpassen, wird es leichter zu sehen, aber es war zu schwierig für mich ..., --display-name my-first ist leicht einzugrenzen).
  3. Suchen Sie den gewünschten Service-Principal und notieren Sie sich die AppID.
  4. Um das Passwort usw. zu ändern, führen Sie az ad sp credential reset --name <appID> aus. Ein neues Passwort wird ausgegeben.
  5. Um den Principal zu löschen, führen Sie az ad sp delete --id <appID> aus.

Referenz

Recommended Posts

Überwachen des Azure AppService-Protokolldatenstroms vom Terminal aus (mithilfe von Docker)
Verwenden von Docker von Java Gradle
Datenverarbeitung mit der Stream-API von Java 8