Verwenden des Azure SDK, um aktuelle Ressourcenvorgänge aufzulisten

Verwenden Sie das Azure Monitor SDK, um die neuesten Ressourcenvorgänge in Ihrem Abonnement aufzulisten. Vorgänge können nach einem Datumsbereich (innerhalb der letzten zehn Tage) und einer Ressourcengruppe gefiltert werden. Beispiele für Vorgänge können das Erstellen von Ressourcen, das Beenden oder Starten einer Ressource wie einer Web-App oder eines virtuellen Computers und das Abrufen einer Verbindungszeichenfolge sein.

Einrichten der Entwicklungsumgebung

Erstellen von Azure-Vorgängen

Damit Azure Monitor Ergebnisse mit diesem Beispielcode zurückgeben kann, muss Ihr Abonnement über Ressourcen mit Vorgängen verfügen. Ein Vorgang kann so einfach sein wie das Starten einer Web-App oder das Abrufen einer Verbindungszeichenfolge. Diese Vorgänge können über jede von Azure verwendete Quelle ausgeführt werden, u. a. über das Azure-Portal und Ihre lokale Installation der Azure CLI, oder über programmgesteuerten Zugriff auf Ihre Ressourcen über REST-APIs oder das Azure SDK.

Wenn Sie noch nicht mit Azure vertraut sind, ist das Azure-Portal die schnellste Methode zum Erstellen von Überwachungseinträgen für die Verwendung dieses Beispielcodes.

Suchen Sie eine kostenlose Ressource, und erstellen Sie sie dann im Azure-Portal.

Verwenden des Azure Monitor SDK mit JavaScript

  1. Erstellen Sie eine Datei, oder kopieren Sie die Datei von GitHub.

    const {
      ClientSecretCredential,
      DefaultAzureCredential,
    } = require("@azure/identity");
    const { MonitorManagementClient } = require("@azure/arm-monitor");
    const dayjs = require("dayjs");
    const { prettyPrint } = require("@base2/pretty-print-object");
    
    // resource group - returns all resource groups if not specified
    const resourceGroupName = "";
    
    // days needs to be less than or equal to 90
    const daysAgo = 10;
    
    // filter
    // https://docs.microsoft.com/en-us/javascript/api/@azure/arm-monitor/activitylogs?view=azure-node-latest#list_string__ActivityLogsListOptionalParams__ServiceCallback_EventDataCollection__
    const greaterThanIsoTime = dayjs().subtract(daysAgo, "day").toISOString();
    const lessThanIsoTime = new Date().toISOString();
    let filter = `eventTimestamp ge '${greaterThanIsoTime}' and eventTimestamp le '${lessThanIsoTime}'`;
    filter += resourceGroupName
      ? ` and resourceGroupName eq '${resourceGroupName}'`
      : null;
    
    // Azure authentication in environment variables for DefaultAzureCredential
    let credentials = null;
    const tenantId =
      process.env["AZURE_TENANT_ID"] || "REPLACE-WITH-YOUR-TENANT-ID";
    const clientId =
      process.env["AZURE_CLIENT_ID"] || "REPLACE-WITH-YOUR-CLIENT-ID";
    const secret =
      process.env["AZURE_CLIENT_SECRET"] || "REPLACE-WITH-YOUR-CLIENT-SECRET";
    const subscriptionId =
      process.env["AZURE_SUBSCRIPTION_ID"] || "REPLACE-WITH-YOUR-SUBSCRIPTION_ID";
    
    if (process.env.production) {
      // production
      credentials = new DefaultAzureCredential();
    } else {
      // development
      credentials = new ClientSecretCredential(tenantId, clientId, secret);
      console.log("development");
    }
    
    try {
      // use credential to authenticate with Azure SDKs
      const client = new MonitorManagementClient(credentials, subscriptionId);
    
      const arrObjects = new Array();
      for await (const element of client.activityLogs.list(filter)) {
        arrObjects.push({
          resourceGroupName: element?.resourceGroupName,
          action: element?.authorization?.action,
          user:
            element?.claims?.[
              "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"
            ],
          resourceProviderName: element?.resourceProviderName,
          resourceType: element?.resourceType,
          operationName: element.operationName,
          status: element.status,
          eventTimestamp: element.eventTimestamp,
        });
      }
      console.log(prettyPrint(arrObjects));
    } catch (err) {
      console.log("An error occurred:");
      console.log(err);
    }
    
    /*
    
    Example element:
    
      {
        resourceGroupName: 'johnsmith-temp',
        action: 'Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/action',
        user: 'johnsmith@contoso.com',
        resourceProviderName: {
          value: 'Microsoft.DocumentDB',
          localizedValue: 'Microsoft.DocumentDB'
        },
        resourceType: {
          value: 'Microsoft.DocumentDB/databaseAccounts',
          localizedValue: 'Microsoft.DocumentDB/databaseAccounts'
        },
        operationName: {
          value: 'Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/action',
          localizedValue: 'Get Connection Strings'
        },
        status: { value: 'Succeeded', localizedValue: 'Succeeded' },
        eventTimestamp: 2021-09-21T17:27:22.727Z
      },
    
    */
    
  2. Installieren Sie die in Azure verwendeten npm-Pakete:

    npm init -y && install @azure/identity @azure/arm-monitor
    
  3. Installieren Sie die npm-Pakete, die zur Unterstützung der Filterung nach Tag und der automatischen Strukturierung und Einrückung des JSON-Codes verwendet werden:

    npm install dayjs @base2/pretty-print-object
    
  4. Führen Sie den Code aus, um den Vorgangsverlauf Ihres Abonnements anzuzeigen:

    node resource-creation-history.js
    

Nächste Schritte