Aracılığıyla paylaş


JS için Azure İzleyici Alımı istemci kitaplığı

Azure İzleyici Alma istemci kitaplığı, Günlük Alımı API'sini kullanarak Azure İzleyici'ye özel günlükler göndermek için kullanılır.

Bu kitaplık, neredeyse tüm kaynaklardan desteklenen yerleşik tablolara veya Log Analytics çalışma alanında oluşturduğunuz özel tablolara veri göndermenizi sağlar. Yerleşik tabloların şemasını özel sütunlarla da genişletebilirsiniz.

Kaynaklar:

Başlarken

Önkoşullar

Paketi yükleme

npm ile JS için Azure İzleyici Alımı istemci kitaplığını yükleyin:

npm install @azure/monitor-ingestion

İstemcinin kimliğini doğrulama

Verileri almak için kimliği doğrulanmış bir istemci gerekir. Kimlik doğrulaması yapmak için TokenCredential sınıfının bir örneğini oluşturun (bkz. ve diğer TokenCredential uygulamalar için DefaultAzureCredential@azure/kimlik). Bunu istemci sınıfınızın oluşturucusna geçirin.

Aşağıdaki örnekte kimlik doğrulaması için @azure/kimlik paketinden kullanılırDefaultAzureCredential:

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

Azure bağımsız bulutu için istemci yapılandırma

Varsayılan olarak, istemci Azure Genel Bulutu kullanacak şekilde yapılandırılır. Bunun yerine bağımsız bir bulut kullanmak için istemci örneği oluştururken doğru uç nokta ve hedef kitle değerini sağlayın. Örnek:

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

Önemli kavramlar

Veri Toplama Uç Noktası

Veri Toplama Uç Noktaları (DCE' ler), Azure İzleyici için alım ayarlarını benzersiz olarak yapılandırmanıza olanak sağlar. Bu makalede , veri toplama uç noktalarına içeriklerini ve yapısını ve bunları nasıl oluşturup bunlarla çalışabileceğinizi içeren bir genel bakış sunulmaktadır.

Veri Toplama Kuralı

Veri toplama kuralları (DCR), Azure İzleyici tarafından toplanan verileri tanımlar ve bu verilerin nasıl ve nerede gönderileceğini veya depolanması gerektiğini belirtir. REST API çağrısı kullanılacak bir DCR belirtmelidir. Tek bir DCE birden çok DCR'yi destekleyebilir, böylece farklı kaynaklar ve hedef tablolar için farklı bir DCR belirtebilirsiniz.

DCR, giriş verilerinin yapısını ve hedef tablonun yapısını anlamalıdır. İkisi eşleşmiyorsa, kaynak verileri hedef tabloyla eşleşecek şekilde dönüştürmek için bir dönüştürme kullanabilir. Dönüştürmeyi kaynak verileri filtrelemek ve diğer hesaplamaları veya dönüştürmeleri gerçekleştirmek için de kullanabilirsiniz.

Diğer ayrıntılar için bkz. Azure İzleyici'de veri toplama kuralları. DCR kimliğini alma hakkında bilgi için bu öğreticiye bakın.

Log Analytics çalışma alanı tabloları

Özel günlükler, oluşturduğunuz herhangi bir özel tabloya ve Log Analytics çalışma alanınızdaki bazı yerleşik tablolara veri gönderebilir. Hedef tabloya veri gönderebilmeniz için önce var olması gerekir. Şu anda aşağıdaki yerleşik tablolar desteklenmektedir:

Örnekler

Örnekleri kullanarak farklı API'ler hakkında bilgi edinebilirsiniz.

Özel günlükleri karşıya yükleme

bir istemci oluşturabilir ve istemcinin Upload yöntemini çağırabilirsiniz. Veri alımı sınırlarını not alın.

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

Günlükleri doğrulama

@azure/monitor-query kitaplığını kullanarak verilerinizin doğru şekilde karşıya yüklendiğini doğrulayabilirsiniz. Günlükleri doğrulamadan önce Özel günlükleri karşıya yükleme örneğini çalıştırın.

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

Büyük toplu günlükleri karşıya yükleme

üzerinde yöntemine uploadLogsIngestionClienttek bir çağrıda 1 MB'tan fazla günlük yüklenirken, karşıya yükleme her biri 1 MB'tan büyük olmayan birkaç küçük toplu iş grubuna bölünür. Varsayılan olarak, bu toplu işler paralel olarak yüklenir ve eş zamanlı olarak en fazla 5 toplu iş yüklenir. Bellek kullanımı önemliyse en yüksek eşzamanlılığı azaltmak tercih edilebilir. Bu örnekte gösterildiği gibi, en fazla eşzamanlı karşıya yükleme sayısı seçeneği kullanılarak maxConcurrency denetlenebilir:

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

Günlük alma

Alma İzleyicisi istemci kitaplığı kullanılarak karşıya yüklenen günlükler İzleyici Sorgusu istemci kitaplığı kullanılarak alınabilir.

Sorun giderme

Çeşitli hata senaryolarını tanılama hakkında ayrıntılı bilgi için sorun giderme kılavuzumuza bakın.

Sonraki adımlar

Azure İzleyici hakkında daha fazla bilgi edinmek için Azure İzleyici hizmeti belgelerine bakın. Bu kitaplığın nasıl kullanılacağına ilişkin ayrıntılı örnekler için lütfen samples dizinine göz atın.

Katkıda bulunma

Bu kitaplığa katkıda bulunmak isterseniz, kodu derleme ve test etme hakkında daha fazla bilgi edinmek için lütfen katkıda bulunma kılavuzunu okuyun.

İzlenimler