Azure Monitor Betöltési ügyfélkódtár JS-hez

Az Azure Monitor betöltési ügyfélkódtárával egyéni naplókat küldhet az Azure Monitornak a Logs Ingestion API használatával.

Ez a kódtár lehetővé teszi, hogy gyakorlatilag bármilyen forrásból adatokat küldjön a támogatott beépített tábláknak vagy a Log Analytics-munkaterületen létrehozott egyéni tábláknak. A beépített táblák sémáját akár egyéni oszlopokkal is bővítheti.

Erőforrások:

Első lépések

Előfeltételek

A csomag telepítése

Telepítse a JS-hez készült Azure Monitor-betöltési ügyfélkódtárat az npm használatával:

npm install @azure/monitor-ingestion

Az ügyfél hitelesítése

Az adatok betöltéséhez hitelesített ügyfél szükséges. A hitelesítéshez hozzon létre egy TokenCredential osztálypéldányt (lásd a @azure/identitástDefaultAzureCredential és más TokenCredential implementációkat). Adja át az ügyfélosztály konstruktorának.

A hitelesítéshez az alábbi példa a @azure/identitáscsomagból használDefaultAzureCredential:

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

Fő fogalmak

Adatgyűjtési végpont

Az adatgyűjtési végpontok (DCE-k) lehetővé teszik az Azure Monitor betöltési beállításainak egyedi konfigurálását. Ez a cikk áttekintést nyújt az adatgyűjtési végpontokról, beleértve azok tartalmát és szerkezetét, valamint a létrehozásuk és a velük való munka módját.

Adatgyűjtési szabály

Az adatgyűjtési szabályok (DCR) meghatározzák az Azure Monitor által gyűjtött adatokat, és megadják az adatok küldésének vagy tárolásának módját és helyét. A REST API-hívásnak meg kell adnia egy használandó DCR-t. Egyetlen DCE több DCR-t is támogat, így különböző forrásokhoz és céltáblákhoz megadhat egy másik DCR-t.

A DCR-nek tisztában kell lennie a bemeneti adatok szerkezetével és a céltábla szerkezetével. Ha a kettő nem egyezik, átalakítással átalakíthatja a forrásadatokat a céltáblának megfelelően. Az átalakítással szűrheti a forrásadatokat, és bármilyen más számítást vagy átalakítást végezhet.

További részletekért lásd: Adatgyűjtési szabályok az Azure Monitorban. A DCR-azonosítók lekéréséről ebben az oktatóanyagban olvashat bővebben.

Log Analytics-munkaterület táblái

Az egyéni naplók bármilyen létrehozott egyéni táblába és a Log Analytics-munkaterület bizonyos beépített tábláiba küldhetnek adatokat. A céltáblának léteznie kell ahhoz, hogy adatokat küldjön neki. Jelenleg a következő beépített táblák támogatottak:

Példák

A minták használatával megismerkedhet a különböző API-kkal.

Egyéni naplók feltöltése

Létrehozhat egy ügyfelet, és meghívhatja az ügyfél metódusát Upload . Jegyezze fel az adatbetöltési korlátokat.

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

Naplók ellenőrzése

Az adatok helyes feltöltését a @azure/monitor-query kódtár használatával ellenőrizheti. A naplók ellenőrzése előtt először futtassa az Egyéni naplók feltöltése mintát.

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

Nagy mennyiségű napló feltöltése

Ha egyetlen hívásban több mint 1 MB naplót tölt fel a upload metódushoz, LogsIngestionClienta feltöltés több kisebb kötegre lesz felosztva, egyenként nem nagyobb, mint 1 MB. Alapértelmezés szerint ezek a kötegek párhuzamosan lesznek feltöltve, és egyszerre legfeljebb 5 köteg tölthető fel. Érdemes lehet csökkenteni a maximális egyidejűséget, ha a memóriahasználat aggodalomra ad okot. Az egyidejű feltöltések maximális száma szabályozható az maxConcurrency alábbi példában látható módon:

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

Naplók lekérése

A Monitor Ingestion ügyfélkódtár használatával feltöltött naplók a Lekérdezés figyelése ügyfélkódtár használatával kérhetők le.

Hibaelhárítás

Naplózás

A naplózás engedélyezése segíthet a hibákról szóló hasznos információk feltárásában. A HTTP-kérések és -válaszok naplójának megtekintéséhez állítsa a környezeti változót a AZURE_LOG_LEVEL értékre info. A naplózás futásidőben is engedélyezhető a következő hívással setLogLevel@azure/logger:

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

setLogLevel("info");

A naplók engedélyezéséről a @azure/logger csomag dokumentációjában talál részletes útmutatást.

Következő lépések

Az Azure Monitorral kapcsolatos további információkért tekintse meg az Azure Monitor szolgáltatás dokumentációját. A kódtár használatára vonatkozó részletes példákért tekintse meg a mintakönyvtárat.

Közreműködés

Ha hozzá szeretne járulni ehhez a kódtárhoz, olvassa el a közreműködői útmutatót , amelyből többet is megtudhat a kód összeállításáról és teszteléséről.

Megjelenések