Поделиться через


Пример кода для отправки данных в Azure Monitor с помощью API приема журналов

В этой статье приведен пример кода с помощью API приема журналов. Для каждого примера необходимо создать следующие компоненты перед выполнением кода. См. Руководство: как отправить данные в Azure Monitor с использованием API приема журналов (с помощью шаблонов Resource Manager) для полного пошагового руководства по созданию компонентов, настроенных для поддержки каждого из этих примеров.

  • Настраиваемая таблица в рабочей области Log Analytics
  • Правило сбора данных (DCR) для перенаправления данных в целевую таблицу
  • Приложение Microsoft Entra с доступом к DCR
  • Конечная точка сбора данных (DCE), если вы используете приватный канал. В противном случае используйте конечную точку журналов DCR.

Пример кода

В следующем скрипте используется клиентская библиотека Azure Monitor для .NET для сбора данных.

  1. Установите библиотеку клиента инжестирования Azure Monitor и библиотеку удостоверений Azure. Библиотека удостоверений Azure необходима для проверки подлинности, используемой в этом примере.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Создайте следующие переменные среды со значениями для приложения Microsoft Entra. Эти значения используются DefaultAzureCredential в библиотеке идентификации Azure.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Замените переменные в следующем примере кода значениями из DCR. Вы также можете заменить примеры данных собственными.

using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.Monitor.Ingestion;

// Initialize variables
var endpoint = new Uri("https://my-url.monitor.azure.com");
var ruleId = "dcr-00000000000000000000000000000000";
var streamName = "Custom-MyTableRawData";

// Create credential and client
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new LogsIngestionClient(endpoint, credential);

DateTime currentTime = DateTime.UtcNow;

// Use BinaryData to serialize instances of an anonymous type into JSON
BinaryData data = BinaryData.FromObjectAsJson(
   new[] {
	new
	{
	   Time = currentTime,
	   Computer = "Computer1",
	   AdditionalContext = new
	   {
	 	InstanceName = "user1",
		TimeZone = "Pacific Time",
		Level = 4,
		CounterName = "AppMetric1",
		CounterValue = 15.3
	   }
	},
	new
	{
	   Time = currentTime,
	   Computer = "Computer2",
	   AdditionalContext = new
	   {
		InstanceName = "user2",
		TimeZone = "Central Time",
		Level = 3,
		CounterName = "AppMetric1",
		CounterValue = 23.5
	   }
	},
   }
);

// Upload logs
try
{
   // ===== START: Use this block of code to upload compressed data
   byte[] dataBytes = data.ToArray();
   
   string contentEncoding = "gzip"; // Specify gzip if the content is already compressed

   using (MemoryStream memoryStream = new MemoryStream())
   {
	using (GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress))
	{
	   gzipStream.Write(dataBytes, 0, dataBytes.Length);
	}
	byte[] gzipBytes = memoryStream.ToArray();

	var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(gzipBytes), contentEncoding).ConfigureAwait(false);
	if (response.IsError)
	{
	   throw new Exception(response.ToString());
	}
   }
   // ===== End: code block to upload compressed data
 
   //** ===== START: Use this block of code to upload uncompressed data.
   var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(data)).ConfigureAwait(false);
   if (response.IsError)
   {
	throw new Exception(response.ToString());
   }
   //** ===== End: code block to upload uncompressed data.

}
catch (Exception ex)
{
	Console.WriteLine("Upload failed with Exception: " + ex.Message);
}
  1. Выполните код, и данные должны поступать в рабочую область Log Analytics в течение нескольких минут.

Устранение неполадок

В этом разделе описаны различные условия ошибки, которые могут возникнуть и как их исправить.

Ошибка Описание
Код ошибки 403 Убедитесь, что у вас есть необходимые разрешения для приложения в правиле сбора данных. Возможно, вам также придется подождать до 30 минут, пока разрешения распространятся.
Код ошибки 413 или предупреждение TimeoutExpired с сообщением ReadyBody_ClientConnectionAbort в ответе Сообщение слишком большое. Максимальный размер сообщения в настоящее время составляет 1 МБ на вызов.
Код ошибки 429 Превышены ограничения для API. Ограничения в настоящее время устанавливаются в 500 МБ данных в минуту для сжатых и несжатых данных и 300 000 запросов в минуту. Повторите попытку через интервал, указанный в заголовке Retry-After в ответе.
Нет данных. Данные могут занять некоторое время для приема, особенно при первом отправке данных в определенную таблицу. Это не должно занять больше 15 минут.
IntelliSense в Log Analytics не распознает новую таблицу. Кэш, управляющий IntelliSense, может обновляться до 24 часов.

Следующие шаги