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 upload
LogsIngestionClient
tek 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.
Azure SDK for JavaScript
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin