Envie dados de log para o Azure Monitor usando a API do coletor de dados HTTP (preterida)
Este artigo mostra como usar a API do Coletor de Dados HTTP para enviar dados de log para o Azure Monitor a partir de um cliente API REST. Ele descreve como formatar dados coletados por seu script ou aplicativo, incluí-los em uma solicitação e ter essa solicitação autorizada pelo Azure Monitor. Fornecemos exemplos para Azure PowerShell, C# e Python.
Observação
A API do Coletor de Dados HTTP do Azure Monitor foi preterida e não será mais funcional a partir de 14/09/2026. Ela foi substituída pela API de ingestão de logs.
Conceitos
É possível usar a API do Coletor de Dados HTTP para enviar dados de log a um espaço de trabalho do Log Analytics no Azure Monitor de qualquer cliente que possa chamar uma API REST. O cliente pode ser um runbook na Automação do Azure que coleta dados de gerenciamento do Azure ou de outra nuvem ou um sistema de gerenciamento alternativo que usa o Azure Monitor para consolidar e analisar dados de log.
Todos os dados no espaço de trabalho do Log Analytics são armazenados como um registro com um tipo de registro específico. Você formata seus dados para enviar à API do coletor de dados HTTP como diversos registros em JSON (JavaScript Object Notation). Quando você envia os dados, um registro individual é criado no repositório de cada registro no conteúdo da solicitação.
Criar uma solicitação
Para usar a API do coletor de dados HTTP, crie uma solicitação POST que inclua os dados que serão enviados em JSON. As próximas três tabelas listam os atributos que são necessários para cada solicitação. Descrevemos cada atributo em mais detalhes posteriormente neste artigo.
URI da solicitação
Atributo | Propriedade |
---|---|
Método | POST |
URI | https://<CustomerId>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01 |
Tipo de conteúdo | aplicativo/json |
Solicitar parâmetros de URI (Uniform Resource Identifier)
Parâmetro | Descrição |
---|---|
CustomerID | O identificador exclusivo do espaço de trabalho do Log Analytics. |
Recurso | O nome do recurso de API: /api/logs. |
Versão da API | A versão da API a ser usada com esta solicitação. Atualmente, a versão é 2016-04-01. |
Cabeçalhos da solicitação
parâmetro | Descrição |
---|---|
Autorização | A assinatura de autorização. Posteriormente neste artigo, você pode ler sobre como criar um cabeçalho HMAC-SHA256. |
Log-Type | Especifique o tipo de registro dos dados que estão sendo enviados. Ele pode conter apenas letras, números e o caractere sublinhado (_) e não pode exceder 100 caracteres. |
x-ms-date | A data em que a solicitação foi processada, no formato RFC 1123. |
x-ms-AzureResourceId | A ID do recurso do Azure ao qual os dados devem ser associados. Preencherá a propriedade _ResourceId e permitirá que os dados sejam incluídos em consultas de contexto de recurso. Se este campo não for especificado, os dados não serão incluídos nas consultas de contexto de recurso. |
time-generated-field | O nome de um campo nos dados que contém o carimbo de data/hora do item de dados. Se você especificar um campo, o conteúdo dele será usado para TimeGenerated. Se esse campo não for especificado, o padrão para TimeGenerated será a hora em que a mensagem é incluída. O conteúdo do campo de mensagem deve seguir o formato ISO 8601 AAAA-MM-DDThh:mm:ssZ. O valor TimeGenerated não pode ter mais de 2 dias antes do horário recebido ou mais de um dia no futuro. Nesse caso, será utilizado o tempo em que a mensagem é ingerida. |
Autorização
Todas as solicitações para a API do Coletor de Dados HTTP do Azure Monitor devem incluir um cabeçalho de autorização. Para autenticar uma solicitação, assine-a com a chave primária ou secundária do workspace que está fazendo a solicitação. Em seguida, passe essa assinatura como parte da solicitação.
Aqui está o formato do cabeçalho de autorização:
Authorization: SharedKey <WorkspaceID>:<Signature>
WorkspaceID é o identificador exclusivo do espaço de trabalho do Log Analytics. Signature é um HMAC (Código de Autenticação de Mensagem Baseado em Hash) que é criado com solicitação e é calculado usando o algoritmo SHA256. Em seguida, você o codifica usando a codificação Base64.
Use este formato para codificar a cadeia de caracteres de assinatura SharedKey:
StringToSign = VERB + "\n" +
Content-Length + "\n" +
Content-Type + "\n" +
"x-ms-date:" + x-ms-date + "\n" +
"/api/logs";
Aqui está um exemplo de uma cadeia de caracteres de assinatura:
POST\n1024\napplication/json\nx-ms-date:Mon, 04 Apr 2016 08:00:00 GMT\n/api/logs
Quando você tiver a cadeia de caracteres de assinatura, codifique-a usando o algoritmo HMAC-SHA256 na sequência de caracteres codificada em UTF-8 e codifique o resultado em Base64. Use este formato:
Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))
Os exemplos nas seções a seguir têm o código de exemplo para ajudá-lo a criar um cabeçalho de autorização.
Corpo da solicitação
O corpo da mensagem deve ser em JSON. Ele deve incluir um ou mais registros com os pares de nome e valor de propriedade no formato a seguir. O nome da propriedade pode conter apenas letras, números e o caractere sublinhado (_).
[
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
}
]
Você pode criar lotes de vários registros em uma única solicitação usando o formato a seguir. Todos os registros devem ser do mesmo tipo de registro.
[
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
},
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
}
]
Propriedades e o tipo de registro
Você define um tipo de registro personalizado quando envia dados por meio da API do Coletor de Dados HTTP do Azure Monitor. No momento, você não pode gravar dados em tipos de registro existentes que foram criados por outras soluções e tipos de dados. O Azure Monitor lê os dados recebidos e, em seguida, cria propriedades que correspondem aos tipos de dados dos valores inseridos.
Cada solicitação para a API do Coletor de Dados deve incluir um cabeçalho Log-Type com o nome do tipo de registro. O sufixo _CL é acrescentado automaticamente ao nome inserido para distingui-lo de outros tipos de log como um log personalizado. Por exemplo, se você inserir o nome MyNewRecordType, o Azure Monitor criará um registro com o tipo MyNewRecordType_CL. Isso ajuda a garantir que não haja nenhum conflito entre os nomes de tipo criados pelo usuário e aqueles fornecidos nas soluções atuais ou futuras da Microsoft.
Para identificar o tipo de dados de uma propriedade, o Azure Monitor adiciona um sufixo ao nome da propriedade. Se uma propriedade contém um valor nulo, a propriedade não é incluída nesse registro. Esta tabela lista o tipo de dados de propriedade e o sufixo correspondente:
Tipo de dados de propriedade | Sufixo |
---|---|
Cadeia de caracteres | _s |
Booliano | _b |
Double | _d |
Data/hora | _t |
GUID (armazenado como uma cadeia de caracteres) | _g |
Observação
Os valores da cadeia de caracteres que parecem ser GUIDs recebem o sufixo _g e são formatados como GUID, mesmo que o valor de entrada não inclua traços. Por exemplo, "8145d822-13a7-44ad-859c-36f31a84f6dd" e "8145d82213a744ad859c36f31a84f6dd" são armazenados como "8145d822-13a7-44ad-859c-36f31a84f6dd". As únicas diferenças entre esta e outra cadeia de caracteres são o _g no nome e a inserção de traços caso eles não sejam fornecidos na entrada.
O tipo de dados que o Azure Monitor usa para cada propriedade depende se o tipo de registro para o novo registro já existe.
- Se o tipo de registro não existir, o Azure Monitor criará um novo usando a inferência de tipo JSON para determinar o tipo de dados de cada propriedade do novo registro.
- Se o tipo de registro existir, o Azure Monitor tentará criar um novo registro com base nas propriedades existentes. Se o tipo de dados de uma propriedade no novo registro não corresponder e não puder ser convertido no tipo existente, ou se o registro incluir uma propriedade que não existe, o Azure Monitor criará uma nova propriedade que tenha o sufixo relevante.
Por exemplo, a entrada de envio a seguir criaria um registro com três propriedades: number_d, boolean_b e string_s:
Se você enviar esta próxima entrada, com todos os valores formatados como cadeias de caracteres, as propriedades não mudarão. É possível converter os valores em tipos de dados existentes.
Mas, se você fizer este próximo envio, o Azure Monitor criará as novas propriedades boolean_d e string_d. Não é possível alterar esses valores.
Se, em seguida, você enviar a seguinte entrada, antes que o tipo de registro seja criado, o Azure Monitor criará um registro com três propriedades: number_s, boolean_s e string_s. Nesta entrada, cada um dos valores iniciais é formatado como uma cadeia de caracteres:
Propriedades reservadas
As propriedades a seguir são reservadas e não devem ser usadas em um tipo de registro personalizado. Você receberá um erro se sua carga útil incluir qualquer um destes nomes de propriedade:
- locatário
- TimeGenerated
- RawData
Limites de dados
Os dados postados na API de coleta de dados do Azure Monitor estão sujeitos a certas restrições:
- Máximo de 30 MB por post na API do Coletor de Dados do Azure Monitor. Este é um limite de tamanho para um único post. Se os dados de uma única postagem excederem 30 MB, divida-os em partes menores e envie-os simultaneamente.
- Limite máximo de 32 KB para valores de campo. Se o valor do campo for maior do que 32 KB, os dados serão truncados.
- É recomendado um máximo de 50 campos para um determinado tipo. Este é um limite prático de uma perspectiva de experiência de pesquisa e usabilidade.
- Só há suporte nas tabelas em workspaces do Log Analytics para até 500 colunas (chamadas de campos neste artigo).
- Máximo de 45 caracteres para nomes de colunas.
Códigos de retorno
O código de status HTTP 200 significa que a solicitação foi recebida para processamento. Isso indica que a operação foi concluída com êxito.
O conjunto completo de códigos de status que o serviço pode retornar está listado na tabela a seguir:
Código | Status | Código do erro | Descrição |
---|---|---|---|
200 | OK | A solicitação foi aceita com êxito. | |
400 | Solicitação incorreta | InactiveCustomer | O workspace foi fechado. |
400 | Solicitação incorreta | InvalidApiVersion | A versão da API que você especificou não foi reconhecida pelo serviço. |
400 | Solicitação incorreta | InvalidCustomerId | A ID do workspace especificada é inválida. |
400 | Solicitação incorreta | InvalidDataFormat | Um JSON inválido foi enviado. O corpo da resposta pode conter mais informações sobre como resolver o erro. |
400 | Solicitação incorreta | InvalidLogType | O tipo de log especificado continha caracteres especiais ou numéricos. |
400 | Solicitação incorreta | MissingApiVersion | A versão da API não foi especificada. |
400 | Solicitação incorreta | MissingContentType | O tipo de conteúdo não foi especificado. |
400 | Solicitação incorreta | MissingLogType | O tipo de log de valor necessário não foi especificado. |
400 | Solicitação incorreta | UnsupportedContentType | O tipo de conteúdo não foi definido como aplicativo/json. |
403 | Proibido | InvalidAuthorization | O serviço falhou ao autenticar a solicitação. Verifique se a chave de conexão e a ID do workspace são válidos. |
404 | Não encontrado | A URL fornecida está incorreta ou a solicitação é muito grande. | |
429 | Número Excessivo de Solicitações | O serviço está recebendo um alto volume de dados da sua conta. Tente fazer novamente a solicitação. | |
500 | Erro interno do servidor | UnspecifiedError | O serviço encontrou um erro interno. Tente novamente a solicitação. |
503 | Serviço indisponível | ServiceUnavailable | No momento, o serviço está indisponível para receber solicitações. Tente novamente a sua solicitação. |
Consultar dados
Para consultar os dados enviados pela API do coletor de dados HTTP do Azure Monitor, pesquise os registros cujoTipo é igual ao valor LogType especificado e anexado a _CL. Por exemplo, se você usar MyCustomLog, todos os registros serão retornados com MyCustomLog_CL
.
Solicitações de exemplo
Nesta seção, há amostras que demonstram como enviar dados para a API do Coletor de Dados HTTP do Azure Monitor usando várias linguagens de programação.
Para cada amostra, defina as variáveis para o cabeçalho de autorização fazendo o seguinte:
- No portal do Azure, localize seu espaço de trabalho do Log Analytics.
- Selecione Agentes.
- À direita da ID do workspace, selecione o ícone Copiar e cole a ID como o valor da variável ID do cliente.
- À direita da Chave primária, selecione o ícone Copiar e cole a ID como o valor da variável Chave compartilhada.
Como alternativa, você pode alterar as variáveis para o tipo de log e dados JSON.
# Replace with your Workspace ID
$CustomerId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Replace with your Primary Key
$SharedKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Specify the name of the record type that you'll be creating
$LogType = "MyRecordType"
# Optional name of a field that includes the timestamp for the data. If the time field is not specified, Azure Monitor assumes the time is the message ingestion time
$TimeStampField = ""
# Create two records with the same set of properties to create
$json = @"
[{ "StringValue": "MyString1",
"NumberValue": 42,
"BooleanValue": true,
"DateValue": "2019-09-12T20:00:00.625Z",
"GUIDValue": "9909ED01-A74C-4874-8ABF-D2678E3AE23D"
},
{ "StringValue": "MyString2",
"NumberValue": 43,
"BooleanValue": false,
"DateValue": "2019-09-12T20:00:00.625Z",
"GUIDValue": "8809ED01-A74C-4874-8ABF-D2678E3AE23D"
}]
"@
# Create the function to create the authorization signature
Function Build-Signature ($customerId, $sharedKey, $date, $contentLength, $method, $contentType, $resource)
{
$xHeaders = "x-ms-date:" + $date
$stringToHash = $method + "`n" + $contentLength + "`n" + $contentType + "`n" + $xHeaders + "`n" + $resource
$bytesToHash = [Text.Encoding]::UTF8.GetBytes($stringToHash)
$keyBytes = [Convert]::FromBase64String($sharedKey)
$sha256 = New-Object System.Security.Cryptography.HMACSHA256
$sha256.Key = $keyBytes
$calculatedHash = $sha256.ComputeHash($bytesToHash)
$encodedHash = [Convert]::ToBase64String($calculatedHash)
$authorization = 'SharedKey {0}:{1}' -f $customerId,$encodedHash
return $authorization
}
# Create the function to create and post the request
Function Post-LogAnalyticsData($customerId, $sharedKey, $body, $logType)
{
$method = "POST"
$contentType = "application/json"
$resource = "/api/logs"
$rfc1123date = [DateTime]::UtcNow.ToString("r")
$contentLength = $body.Length
$signature = Build-Signature `
-customerId $customerId `
-sharedKey $sharedKey `
-date $rfc1123date `
-contentLength $contentLength `
-method $method `
-contentType $contentType `
-resource $resource
$uri = "https://" + $customerId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01"
$headers = @{
"Authorization" = $signature;
"Log-Type" = $logType;
"x-ms-date" = $rfc1123date;
"time-generated-field" = $TimeStampField;
}
$response = Invoke-WebRequest -Uri $uri -Method $method -ContentType $contentType -Headers $headers -Body $body -UseBasicParsing
return $response.StatusCode
}
# Submit the data to the API endpoint
Post-LogAnalyticsData -customerId $customerId -sharedKey $sharedKey -body ([System.Text.Encoding]::UTF8.GetBytes($json)) -logType $logType
Alternativas e considerações
Embora a API do coletor de dados cubra a maioria de suas necessidades ao coletar dados de formato livre nos Logs do Azure, você pode exigir uma abordagem alternativa para superar algumas das limitações da API. Suas opções, incluindo considerações principais, estão listadas na tabela a seguir:
Alternativa | Descrição | Mais indicado para |
---|---|---|
Eventos personalizados: ingestão baseada em SDK nativo no Application Insights | O Application Insights, geralmente instrumentado por meio de um SDK em seu aplicativo, oferece a capacidade de enviar dados personalizados por meio de eventos personalizados. |
|
API do Coletor de Dados em logs do Azure Monitor | A API do Coletor de Dados em logs de Azure Monitor é uma maneira completamente aberta de ingerir dados. Todos os dados formatados em um objeto JSON podem ser enviados aqui. Depois de enviados, eles são processados e disponibilizados nos Logs do Monitor para correlação com outros dados nos Logs do Monitor ou outros dados do Application Insights. É bastante fácil carregar os dados como arquivos em um blob do Armazenamento de Blobs do Azure, onde os arquivos serão processados e carregados para o Log Analytics. Para obter um exemplo de implementação, veja Criar um pipeline de dados com a API do coletor de dados. |
|
Azure Data Explorer | O Azure Data Explorer, agora com disponibilidade geral pública, é a plataforma de dados que alimenta o Application Insights Analytics e os Logs do Azure Monitor. Ao usar a plataforma de dados na forma bruta, você tem flexibilidade completa (mas isso requer a sobrecarga do gerenciamento) sobre o cluster, com RBAC (controle de acesso baseado em função) do Kubernetes, taxa de retenção, esquema e assim por diante. O Azure Data Explorer fornece muitas opções de ingestão, como arquivos CSV, TSV e JSON. |
|
Próximas etapas
Use a API de Pesquisa de Logs para recuperar dados do espaço de trabalho do Log Analytics.
Saiba como criar um pipeline de dados com a API do coletor de dados usando um fluxo de trabalho de Aplicativos Lógicos para Azure Monitor.