Delen via


Azure Monitor-clientbibliotheek voor opname voor JS

De Azure Monitor-clientbibliotheek voor opname wordt gebruikt voor het verzenden van aangepaste logboeken naar Azure Monitor met behulp van de Logboekopname-API.

Met deze bibliotheek kunt u gegevens van vrijwel elke bron verzenden naar ondersteunde ingebouwde tabellen of naar aangepaste tabellen die u in de Log Analytics-werkruimte maakt. U kunt zelfs het schema van ingebouwde tabellen uitbreiden met aangepaste kolommen.

Bronnen:

Aan de slag

Vereisten

Het pakket installeren

Installeer de Azure Monitor Ingestion-clientbibliotheek voor JS met npm:

npm install @azure/monitor-ingestion

De client verifiëren

Een geverifieerde client is vereist om gegevens op te nemen. Als u wilt verifiëren, maakt u een exemplaar van een TokenCredential-klasse (zie @azure/identiteit voor DefaultAzureCredential en andere TokenCredential implementaties). Geef deze door aan de constructor van uw clientklasse.

Voor verificatie wordt in het volgende voorbeeld gebruikgemaakt DefaultAzureCredential van het pakket @azure/identity :

import { DefaultAzureCredential } from "@azure/identity";
import { LogsIngestionClient } from "@azure/monitor-ingestion";

import * as dotenv from "dotenv";
dotenv.config();

const logsIngestionEndpoint = process.env.LOGS_INGESTION_ENDPOINT || "logs_ingestion_endpoint";

const credential = new DefaultAzureCredential();
const logsIngestionClient = new LogsIngestionClient(logsIngestionEndpoint, credential);

Client configureren voor onafhankelijke Azure-cloud

De client is standaard geconfigureerd voor het gebruik van de openbare Azure-cloud. Als u in plaats daarvan een onafhankelijke cloud wilt gebruiken, geeft u het juiste eindpunt en de juiste doelgroepwaarde op bij het instantiëren van de client. Bijvoorbeeld:

import { DefaultAzureCredential } from "@azure/identity";
import { LogsIngestionClient } from "@azure/monitor-ingestion";

import * as dotenv from "dotenv";
dotenv.config();

const logsIngestionEndpoint = process.env.LOGS_INGESTION_ENDPOINT || "logs_ingestion_endpoint";

const credential = new DefaultAzureCredential();
const logsIngestionClient = new LogsIngestionClient(logsIngestionEndpoint, credential, {
  audience: "https://api.loganalytics.azure.cn/.default",
});

Belangrijkste concepten

Eindpunt voor gegevensverzameling

Met eindpunten voor gegevensverzameling (DCE's) kunt u de opname-instellingen voor Azure Monitor uniek configureren. Dit artikel biedt een overzicht van eindpunten voor gegevensverzameling, inclusief de inhoud en structuur ervan en hoe u deze kunt maken en ermee kunt werken.

Regel voor gegevensverzameling

Regels voor gegevensverzameling (DCR) definiëren gegevens die worden verzameld door Azure Monitor en geven aan hoe en waar die gegevens moeten worden verzonden of opgeslagen. De REST API-aanroep moet een DCR opgeven die moet worden gebruikt. Eén DCE kan meerdere DCR's ondersteunen, zodat u een andere DCR voor verschillende bronnen en doeltabellen kunt opgeven.

De DCR moet de structuur van de invoergegevens en de structuur van de doeltabel begrijpen. Als de twee niet overeenkomen, kan een transformatie worden gebruikt om de brongegevens te converteren zodat deze overeenkomen met de doeltabel. U kunt de transformatie ook gebruiken om brongegevens te filteren en andere berekeningen of conversies uit te voeren.

Raadpleeg Regels voor gegevensverzameling in Azure Monitor voor meer informatie. Zie deze zelfstudie voor meer informatie over het ophalen van een DCR-id.

Tabellen in Log Analytics-werkruimte

Aangepaste logboeken kunnen gegevens verzenden naar elke aangepaste tabel die u maakt en naar bepaalde ingebouwde tabellen in uw Log Analytics-werkruimte. De doeltabel moet bestaan voordat u er gegevens naar kunt verzenden. De volgende ingebouwde tabellen worden momenteel ondersteund:

Voorbeelden

U kunt uzelf vertrouwd maken met verschillende API's met behulp van Voorbeelden.

Aangepaste logboeken uploaden

U kunt een client maken en de methode van Upload de client aanroepen. Noteer de limieten voor gegevensopname.

const { isAggregateLogsUploadError, DefaultAzureCredential } = require("@azure/identity");
const { LogsIngestionClient } = require("@azure/monitor-ingestion");

require("dotenv").config();

async function main() {
  const logsIngestionEndpoint = process.env.LOGS_INGESTION_ENDPOINT || "logs_ingestion_endpoint";
  const ruleId = process.env.DATA_COLLECTION_RULE_ID || "data_collection_rule_id";
  const streamName = process.env.STREAM_NAME || "data_stream_name";
  const credential = new DefaultAzureCredential();
  const client = new LogsIngestionClient(logsIngestionEndpoint, credential);
  const logs = [
    {
      Time: "2021-12-08T23:51:14.1104269Z",
      Computer: "Computer1",
      AdditionalContext: "context-2",
    },
    {
      Time: "2021-12-08T23:51:14.1104269Z",
      Computer: "Computer2",
      AdditionalContext: "context",
    },
  ];
  try{
    await client.upload(ruleId, streamName, logs);
  }
  catch(e){
    let aggregateErrors = isAggregateLogsUploadError(e) ? e.errors : [];
    if (aggregateErrors.length > 0) {
      console.log("Some logs have failed to complete ingestion");
      for (const error of aggregateErrors) {
        console.log(`Error - ${JSON.stringify(error.cause)}`);
        console.log(`Log - ${JSON.stringify(error.failedLogs)}`);
      }
    } else {
      console.log(e);
    }
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
  process.exit(1);
});

module.exports = { main };

Logboeken verifiëren

U kunt controleren of uw gegevens correct zijn geüpload met behulp van de bibliotheek @azure/monitor-query . Voer eerst het voorbeeld Aangepaste logboeken uploaden uit voordat u de logboeken verifieert.

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.

/**
 * @summary Demonstrates how to run query against a Log Analytics workspace to verify if the logs were uploaded
 */

const { DefaultAzureCredential } = require("@azure/identity");
const { LogsQueryClient } = require("@azure/monitor-query");

const monitorWorkspaceId = process.env.MONITOR_WORKSPACE_ID || "workspace_id";
const tableName = process.env.TABLE_NAME || "table_name";
require("dotenv").config();

async function main() {
  const credential = new DefaultAzureCredential();
  const logsQueryClient = new LogsQueryClient(credential);
  const queriesBatch = [
    {
      workspaceId: monitorWorkspaceId,
      query: tableName + " | count;",
      timespan: { duration: "P1D" },
    },
  ];

  const result = await logsQueryClient.queryBatch(queriesBatch);
  if (result[0].status === "Success") {
    console.log("Table entry count: ", JSON.stringify(result[0].tables));
  } else {
    console.log(
      `Some error encountered while retrieving the count. Status = ${result[0].status}`,
      JSON.stringify(result[0])
    );
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
  process.exit(1);
});

module.exports = { main };

Grote batches met logboeken uploaden

Bij het uploaden van meer dan 1 MB aan logboeken in één aanroep naar de upload methode op LogsIngestionClient, wordt het uploaden gesplitst in verschillende kleinere batches, elk niet groter dan 1 MB. Standaard worden deze batches parallel geüpload, waarbij maximaal 5 batches gelijktijdig worden geüpload. Het kan wenselijk zijn om de maximale gelijktijdigheid te verlagen als het geheugengebruik een probleem is. Het maximum aantal gelijktijdige uploads kan worden bepaald met behulp van de maxConcurrency optie, zoals in dit voorbeeld wordt weergegeven:

const { DefaultAzureCredential } = require("@azure/identity");
const { isAggregateLogsUploadError, LogsIngestionClient } = require("@azure/monitor-ingestion");

require("dotenv").config();

async function main() {
  const logsIngestionEndpoint = process.env.LOGS_INGESTION_ENDPOINT || "logs_ingestion_endpoint";
  const ruleId = process.env.DATA_COLLECTION_RULE_ID || "data_collection_rule_id";
  const streamName = process.env.STREAM_NAME || "data_stream_name";
  const credential = new DefaultAzureCredential();
  const client = new LogsIngestionClient(logsIngestionEndpoint, credential);

  // Constructing a large number of logs to ensure batching takes place
  const logs = [];
  for (let i = 0; i < 100000; ++i) {
    logs.push({
      Time: "2021-12-08T23:51:14.1104269Z",
      Computer: "Computer1",
      AdditionalContext: `context-${i}`,
    });
  }

  try{
    // Set the maximum concurrency to 1 to prevent concurrent requests entirely
    await client.upload(ruleId, streamName, logs, { maxConcurrency: 1 });
  }
  catch(e){
    let aggregateErrors = isAggregateLogsUploadError(e) ? e.errors : [];
    if (aggregateErrors.length > 0) {
      console.log("Some logs have failed to complete ingestion");
      for (const error of aggregateErrors) {
        console.log(`Error - ${JSON.stringify(error.cause)}`);
        console.log(`Log - ${JSON.stringify(error.failedLogs)}`);
      }
    } else {
      console.log(e);
    }
  }
}
main().catch((err) => {
  console.error("The sample encountered an error:", err);
  process.exit(1);
});

module.exports = { main };

Logboeken ophalen

Logboeken die zijn geüpload met behulp van de clientbibliotheek Voor opname bewaken, kunnen worden opgehaald met behulp van de clientbibliotheek Query bewaken.

Problemen oplossen

Zie onze handleiding voor probleemoplossing voor meer informatie over het diagnosticeren van verschillende foutscenario's.

Volgende stappen

Zie de documentatie voor de Azure Monitor-service voor meer informatie over Azure Monitor. Bekijk de map met voorbeelden voor gedetailleerde voorbeelden van het gebruik van deze bibliotheek.

Bijdragen

Als u een bijdrage wilt leveren aan deze bibliotheek, leest u de handleiding voor bijdragen voor meer informatie over het bouwen en testen van de code.

Weergaven