Biblioteca de clientes de ingestão do Azure Monitor para .NET – versão 1.1.1
A biblioteca de clientes de Ingestão do Azure Monitor é usada para enviar logs personalizados para o Azure Monitor.
Essa biblioteca permite que você envie dados de praticamente qualquer fonte para tabelas internas com suporte ou para tabelas personalizadas criadas no workspace do Log Analytics. Você pode até mesmo estender o esquema de tabelas internas com colunas personalizadas.
Recursos:
Introdução
Pré-requisitos
- Uma assinatura do Azure
- Uma implementação de TokenCredential, como um tipo de credencial de biblioteca de identidade do Azure.
- Um ponto de extremidade de coleta de dados
- Uma regra de coleta de dados
- Um workspace do Log Analytics
Instalar o pacote
Instale a biblioteca de clientes de Ingestão do Azure Monitor para .NET com o NuGet:
dotnet add package Azure.Monitor.Ingestion
Autenticar o cliente
Um cliente autenticado é necessário para ingerir dados. Para autenticar, crie uma instância de uma TokenCredential
classe . Passe-o para o construtor da LogsIngestionClient
classe .
Para autenticar, o exemplo a seguir usa DefaultAzureCredential
do Azure.Identity
pacote:
var endpoint = new Uri("<data_collection_endpoint_uri>");
var credential = new DefaultAzureCredential();
var client = new LogsIngestionClient(endpoint, credential);
Configurar o cliente para a nuvem soberana do Azure
Por padrão, LogsIngestionClient
é configurado para se conectar à nuvem pública do Azure. Para se conectar a uma nuvem soberana, defina a LogsIngestionClientOptions.Audience
propriedade . Por exemplo:
var endpoint = new Uri("<data_collection_endpoint_uri>");
var credential = new DefaultAzureCredential();
var clientOptions = new LogsIngestionClientOptions
{
Audience = LogsIngestionAudience.AzureChina
};
var client = new LogsIngestionClient(endpoint, credential, clientOptions);
Carregar os logs
Para obter exemplos de ingestão de logs, consulte a seção Exemplos .
Principais conceitos
Ponto de extremidade da coleta de dados
Os DCEs (pontos de extremidade de coleta de dados) permitem definir exclusivamente as configurações de ingestão para o Azure Monitor. Este artigo fornece uma visão geral dos DCEs, incluindo seu conteúdo, estrutura e como você pode criar e trabalhar com eles.
Regra de coleta de dados
As DCRs (regras de coleta de dados) definem os dados coletados pelo Azure Monitor e especificam como e onde esses dados devem ser enviados ou armazenados. A chamada à API REST deve especificar uma DCR a ser usada. Um único DCE pode dar suporte a várias DCRs, para que você possa especificar uma DCR diferente para fontes diferentes e tabelas de destino.
A DCR deve entender a estrutura dos dados de entrada e a estrutura da tabela de destino. Se as duas não forem correspondentes, ela poderá usar uma transformação para converter os dados de origem a fim de fazer uma correspondência à tabela de destino. Você também pode usar a transformação para filtrar os dados de origem e executar quaisquer outros cálculos ou conversões.
Para obter mais informações, consulte Regras de coleta de dados no Azure Monitor.
Tabelas do workspace do Log Analytics
Os logs personalizados podem enviar dados para qualquer tabela personalizada que você criar e para determinadas tabelas internas no workspace do Log Analytics. A tabela de destino deve existir para que você possa enviar dados a ela. As seguintes tabelas internas têm suporte no momento:
Acesso thread-safe
Garantimos que todos os métodos de instância do cliente sejam thread-safe e independentes uns dos outros (diretriz). Esse design garante que a recomendação de reutilizações de instâncias de cliente seja sempre segura, mesmo entre threads.
Conceitos adicionais
Opções do | clienteAcessando a resposta | Operações de execução longa | Tratamento de falhas | Diagnostics | Zombando | Tempo de vida do cliente
Exemplos
- Registrar o cliente com injeção de dependência
- Carregar logs personalizados
- Carregar logs personalizados como IEnumerable
- Carregar logs personalizados como IEnumerable com EventHandler
- Verificar logs
Você pode se familiarizar com diferentes APIs usando exemplos.
Registrar o cliente com injeção de dependência
Para registrar-se LogsIngestionClient
com o contêiner de DI (injeção de dependência), invoque o AddLogsIngestionClient
método . Para obter mais informações, consulte Registrar cliente.
Carregar logs personalizados
Você pode carregar logs usando o LogsIngestionClient.Upload
método ou LogsIngestionClient.UploadAsync
. Observe os limites de ingestão de dados. Esse método tem um parâmetro opcional: string contentEncoding. Isso se refere à codificação do RequestContent que está sendo passado. Se você estiver passando conteúdo que já foi manipulado, defina o parâmetro contentEncoding. Por exemplo, se o conteúdo for gzipped, defina contentEncoding como "gzip". Se esse parâmetro não estiver definido, o comportamento padrão será gzip de todas as entradas.
var endpoint = new Uri("<data_collection_endpoint>");
var ruleId = "<data_collection_rule_id>";
var streamName = "<stream_name>";
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new(endpoint, credential);
DateTimeOffset currentTime = DateTimeOffset.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 our logs
Response response = await client.UploadAsync(
ruleId,
streamName,
RequestContent.Create(data)).ConfigureAwait(false);
Carregar logs personalizados como IEnumerable
Você também pode carregar logs usando o LogsIngestionClient.Upload
ou o método no qual os LogsIngestionClient.UploadAsync
logs são passados em um tipo genérico IEnumerable
junto com um parâmetro opcional LogsUploadOptions
. O LogsUploadOptions
parâmetro inclui um serializador, simultaneidade e um EventHandler.
var endpoint = new Uri("<data_collection_endpoint_uri>");
var ruleId = "<data_collection_rule_id>";
var streamName = "<stream_name>";
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new(endpoint, credential);
DateTimeOffset currentTime = DateTimeOffset.UtcNow;
var entries = new List<Object>();
for (int i = 0; i < 100; i++)
{
entries.Add(
new {
Time = currentTime,
Computer = "Computer" + i.ToString(),
AdditionalContext = i
}
);
}
// Upload our logs
Response response = await client.UploadAsync(ruleId, streamName, entries).ConfigureAwait(false);
Carregar logs personalizados como IEnumerable com EventHandler
Você pode carregar logs usando o LogsIngestionClient.Upload
método ou LogsIngestionClient.UploadAsync
. Nesses dois métodos, os logs são passados em um tipo genérico IEnumerable
. Além disso, há um LogsUploadOptions
parâmetro com tipo em que um serializador, simultaneidade e EventHandler podem ser definidos. O serializador padrão é definido System.Text.Json
como , mas você pode passar o serializador que deseja usar. A MaxConcurrency
propriedade define o número de threads que serão usados no UploadAsync
método . O valor padrão é 5 e esse parâmetro não é usado no Upload
método . O EventHandler é usado para tratamento de erros. Ele dá ao usuário a opção de anular o upload se um lote falhar e acessar os logs com falha e a exceção correspondente. Sem o EventHandler, se um upload falhar, um AggregateException
será lançado.
var endpoint = new Uri("<data_collection_endpoint_uri>");
var ruleId = "<data_collection_rule_id>";
var streamName = "<stream_name>";
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new(endpoint, credential);
DateTimeOffset currentTime = DateTimeOffset.UtcNow;
var entries = new List<Object>();
for (int i = 0; i < 100; i++)
{
entries.Add(
new {
Time = currentTime,
Computer = "Computer" + i.ToString(),
AdditionalContext = i
}
);
}
// Set concurrency and EventHandler in LogsUploadOptions
LogsUploadOptions options = new LogsUploadOptions();
options.MaxConcurrency = 10;
options.UploadFailed += Options_UploadFailed;
// Upload our logs
Response response = await client.UploadAsync(ruleId, streamName, entries, options).ConfigureAwait(false);
Task Options_UploadFailed(LogsUploadFailedEventArgs e)
{
// Throw exception from EventHandler to stop Upload if there is a failure
IReadOnlyList<object> failedLogs = e.FailedLogs;
// 413 status is RequestTooLarge - don't throw here because other batches can successfully upload
if ((e.Exception is RequestFailedException) && (((RequestFailedException)e.Exception).Status != 413))
throw e.Exception;
else
return Task.CompletedTask;
}
Verificar logs
Você pode verificar se os dados foram carregados corretamente usando a biblioteca de Consultas do Azure Monitor . Execute o exemplo Carregar logs personalizados primeiro antes de verificar os logs.
var workspaceId = "<log_analytics_workspace_id>";
var tableName = "<table_name>";
var credential = new DefaultAzureCredential();
LogsQueryClient logsQueryClient = new(credential);
LogsBatchQuery batch = new();
string query = tableName + " | Count;";
string countQueryId = batch.AddWorkspaceQuery(
workspaceId,
query,
new QueryTimeRange(TimeSpan.FromDays(1)));
Response<LogsBatchQueryResultCollection> queryResponse =
await logsQueryClient.QueryBatchAsync(batch).ConfigureAwait(false);
Console.WriteLine("Table entry count: " +
queryResponse.Value.GetResult<int>(countQueryId).Single());
Solução de problemas
Para obter detalhes sobre como diagnosticar vários cenários de falha, consulte nosso guia de solução de problemas.
Próximas etapas
Para saber mais sobre o Azure Monitor, confira a documentação do serviço Azure Monitor.
Contribuição
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite https://cla.microsoft.com.
Quando você envia uma solicitação de pull, um bot CLA determina automaticamente se você precisa fornecer um CLA e decorar o PR adequadamente. Por exemplo, rótulos e comentários. Basta seguir as instruções fornecidas pelo bot. Você só precisa assinar o CLA uma vez em todos os repositórios usando nosso CLA.
Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, consulte as Perguntas frequentes sobre o Código de Conduta ou entre em contato opencode@microsoft.com com perguntas ou comentários.
Azure SDK for .NET