Sdílet prostřednictvím


Klientská knihovna pro příjem dat služby Azure Monitor pro JS

The Azure Monitor Ingestion client library is used to send custom logs to Azure Monitor using the Logs Ingestion API.

Tato knihovna umožňuje odesílat data prakticky z libovolného zdroje do podporovaných předdefinovaných tabulek nebo do vlastních tabulek, které vytvoříte v pracovním prostoru služby Log Analytics. Schéma vestavěných tabulek můžete dokonce rozšířit o vlastní sloupce.

Resources:

Getting started

Prerequisites

Nainstalujte balíček

Install the Azure Monitor Ingestion client library for JS with npm:

npm install @azure/monitor-ingestion

Ověření klienta

K ingestování dat se vyžaduje ověřený klient. To authenticate, create an instance of a TokenCredential class (see @azure/identity for DefaultAzureCredential and other TokenCredential implementations). Předejte jej konstruktoru vaší klientské třídy.

To authenticate, the following example uses DefaultAzureCredential from the @azure/identity package:

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

const logsIngestionEndpoint = "https://<my-endpoint>.azure.com";

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

Konfigurace klienta pro suverénní cloud Azure

Ve výchozím nastavení je klient nakonfigurovaný tak, aby používal veřejný cloud Azure. Pokud chcete místo toho použít suverénní cloud, zadejte při vytváření instance klienta správný koncový bod a hodnotu cílové skupiny. For example:

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

const logsIngestionEndpoint = "https://<my-endpoint>.azure.cn";

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

Key concepts

Koncový bod shromažďování dat

Koncové body shromažďování dat (DCE) umožňují jednoznačně konfigurovat nastavení příjmu dat pro Azure Monitor. This article provides an overview of data collection endpoints including their contents and structure and how you can create and work with them.

Pravidlo shromažďování dat

Pravidla shromažďování dat (DCR) definují data shromážděná službou Azure Monitor a určují, jak a kde se mají tato data odesílat nebo ukládat. Volání rozhraní REST API musí specifikovat DCR, který se má použít. Jeden řadič DCE může podporovat více dcr, takže můžete zadat jiný DCR pro různé zdroje a cílové tabulky.

DCR musí rozumět struktuře vstupních dat a struktuře cílové tabulky. Pokud se tyto dva soubory neshodují, může použít transformaci k převodu zdrojových dat tak, aby odpovídala cílové tabulce. Transformaci můžete také použít k filtrování zdrojových dat a provádění dalších výpočtů nebo převodů.

Další podrobnosti najdete v tématu Pravidla shromažďování dat ve službě Azure Monitor. Informace o tom, jak získat ID DCR, najdete v tomto kurzu.

Tabulky pracovních prostorů služby Log Analytics

Vlastní protokoly mohou odesílat data do libovolné vlastní tabulky, kterou vytvoříte, a do určitých předdefinovaných tabulek v pracovním prostoru služby Log Analytics. Cílová tabulka musí existovat před odesláním dat. V současné době jsou podporovány následující předdefinované tabulky:

Examples

You can familiarize yourself with different APIs using Samples.

Nahrání vlastních protokolů

Můžete vytvořit klienta a volat jeho metodu Upload . Take note of the data ingestion limits.

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

const logsIngestionEndpoint = "https://<my-endpoint>.azure.com";
const ruleId = "data_collection_rule_id";
const streamName = "data_stream_name";

const credential = new DefaultAzureCredential();
const logsIngestionClient = 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 logsIngestionClient.upload(ruleId, streamName, logs);
} catch (e) {
  const 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(`An error occurred: ${e}`);
  }
}

Verify logs

You can verify that your data has been uploaded correctly by using the @azure/monitor-query library. Před ověřením protokolů nejprve spusťte ukázku Upload vlastních protokolů .

import { DefaultAzureCredential } from "@azure/identity";
import { LogsQueryClient } from "@azure/monitor-query";

const monitorWorkspaceId = "workspace_id";
const tableName = "table_name";

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]),
  );
}

Nahrávání velkých dávek logů

Při nahrávání více než 1 MB protokolů v jednom volání metody upload on LogsIngestionClientbude nahrávání rozděleno do několika menších dávek, z nichž každá nebude větší než 1 MB. Ve výchozím nastavení se tyto dávky nahrávají paralelně, přičemž současně se nahrává maximálně 5 dávek. Pokud je využití paměti problémem, může být žádoucí snížit maximální souběžnost. Maximální počet souběžných nahrávání lze řídit pomocí této maxConcurrency možnosti, jak je znázorněno v tomto příkladu:

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

const logsIngestionEndpoint = "https://<my-endpoint>.azure.com";
const ruleId = "data_collection_rule_id";
const streamName = "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);
  }
}

Retrieve logs

Protokoly nahrané pomocí klientské knihovny Monitorování příjmu dat lze načíst pomocí klientské knihovny Monitorování dotazů.

Troubleshooting

For details on diagnosing various failure scenarios, see our troubleshooting guide.

Next steps

Další informace o službě Azure Monitor najdete v dokumentaci ke službě Azure Monitor. Please take a look at the samples directory for detailed examples on how to use this library.

Contributing

If you'd like to contribute to this library, please read the contributing guide to learn more about how to build and test the code.