Azure Monitor-klientbibliotek för inmatning för JS

Azure Monitor Ingestion-klientbiblioteket används för att skicka anpassade loggar till Azure Monitor med hjälp av LOGS Ingestion-API:et.

Med det här biblioteket kan du skicka data från praktiskt taget alla källor till inbyggda tabeller som stöds eller till anpassade tabeller som du skapar på Log Analytics-arbetsytan. Du kan till och med utöka schemat för inbyggda tabeller med anpassade kolumner.

Resurser:

Komma igång

Förutsättningar

Installera paketet

Installera Azure Monitor Ingestion-klientbiblioteket för JS med npm:

npm install @azure/monitor-ingestion

Autentisera klienten

En autentiserad klient krävs för att mata in data. Om du vill autentisera skapar du en instans av en TokenCredential-klass (se @azure/identitet för DefaultAzureCredential och andra TokenCredential implementeringar). Skicka den till konstruktorn för klientklassen.

För att autentisera använder DefaultAzureCredential följande exempel från paketet @azure/identitet :

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);

Viktiga begrepp

Slutpunkt för datainsamling

Med datainsamlingsslutpunkter (DCE) kan du unikt konfigurera inmatningsinställningar för Azure Monitor. Den här artikeln innehåller en översikt över slutpunkter för datainsamling, inklusive deras innehåll och struktur samt hur du kan skapa och arbeta med dem.

Datainsamlingsregel

Datainsamlingsregler (DCR) definierar data som samlas in av Azure Monitor och anger hur och var dessa data ska skickas eller lagras. REST API-anropet måste ange en DCR som ska användas. En enskild domänkontrollant kan ha stöd för flera domänkontrollanter, så du kan ange en annan DCR för olika källor och måltabeller.

DCR måste förstå strukturen för indata och måltabellens struktur. Om de två inte matchar kan den använda en transformering för att konvertera källdata till att matcha måltabellen. Du kan också använda transformeringen för att filtrera källdata och utföra andra beräkningar eller konverteringar.

Mer information finns i Datainsamlingsregler i Azure Monitor. Information om hur du hämtar ett DCR-ID finns i den här självstudien.

Log Analytics-arbetsytetabeller

Anpassade loggar kan skicka data till alla anpassade tabeller som du skapar och till vissa inbyggda tabeller på Log Analytics-arbetsytan. Måltabellen måste finnas innan du kan skicka data till den. Följande inbyggda tabeller stöds för närvarande:

Exempel

Du kan bekanta dig med olika API:er med hjälp av exempel.

Ladda upp anpassade loggar

Du kan skapa en klient och anropa klientens Upload -metod. Anteckna datainmatningsgränserna.

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 };

Verifiera loggar

Du kan kontrollera att dina data har laddats upp korrekt med hjälp av biblioteket @azure/monitor-query . Kör exemplet Ladda upp anpassade loggar först innan du verifierar loggarna.

// 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 };

Ladda upp stora batchar med loggar

När du laddar upp mer än 1 MB loggar i ett enda anrop till metoden på uploadLogsIngestionClientdelas uppladdningen upp i flera mindre batchar, var och en inte större än 1 MB. Som standard laddas dessa batchar upp parallellt, med högst 5 batchar som laddas upp samtidigt. Det kan vara önskvärt att minska den maximala samtidigheten om minnesanvändningen är ett problem. Det maximala antalet samtidiga uppladdningar kan styras med hjälp av maxConcurrency alternativet, som du ser i det här exemplet:

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 };

Hämta loggar

Loggar som laddas upp med klientbiblioteket Övervaka inmatning kan hämtas med hjälp av klientbiblioteket För övervakningsfråga.

Felsökning

Loggning

Aktivering av loggning kan hjälpa dig att hitta användbar information om fel. Om du vill se en logg över HTTP-begäranden och svar anger du AZURE_LOG_LEVEL miljövariabeln till info. Du kan också aktivera loggning vid körning genom att anropa setLogLevel i @azure/logger:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Detaljerade anvisningar om hur du aktiverar loggar finns i @azure/logger-paketdokumenten.

Nästa steg

Mer information om Azure Monitor finns i dokumentationen för Azure Monitor-tjänsten. Ta en titt på exempelkatalogen för detaljerade exempel på hur du använder det här biblioteket.

Bidra

Om du vill bidra till det här biblioteket kan du läsa bidragsguiden för att lära dig mer om hur du skapar och testar koden.

Visningar