Exemplos de cargas úteis para alertas de pesquisa de log usando ações de webhook
Você pode usar ações de webhook em uma regra de alerta de pesquisa de log para invocar uma única solicitação HTTP POST. Neste artigo, descrevemos as propriedades que estão disponíveis quando você configura grupos de ação para usar webhooks. O serviço chamado deve suportar webhooks e saber como usar a carga útil que recebe.
Recomendamos que você use um esquema de alerta comum para suas integrações de webhook. O esquema de alerta comum oferece a vantagem de ter uma única carga útil de alerta extensível e unificada em todos os serviços de alerta no Azure Monitor.
Para regras de alerta de pesquisa de log que têm uma carga JSON personalizada definida, habilitar o esquema de alerta comum reverte o esquema de carga útil para o descrito em Esquema de alerta comum. Se você quiser ter uma carga JSON personalizada definida, o webhook não poderá usar o esquema de alerta comum.
Os alertas com o esquema comum ativado têm um limite de tamanho superior de 256 KB por alerta. Um alerta maior não inclui os resultados da pesquisa. Quando os resultados da pesquisa não forem incluídos, use LinkToFilteredSearchResultsAPI
ou LinkToSearchResultsAPI
acesse os resultados da consulta por meio da API do Log Analytics.
As cargas úteis de amostra incluem exemplos quando a carga útil é padrão e quando é personalizada.
Alerta de pesquisa de log para todos os logs de recursos (da versão 2021-08-01
da API)
A carga útil de exemplo a seguir é para um webhook padrão quando é usada para alertas de pesquisa de log com base em logs de recursos:
{
"schemaId": "azureMonitorCommonAlertSchema",
"data": {
"essentials": {
"alertId": "/subscriptions/12345a-1234b-123c-123d-12345678e/providers/Microsoft.AlertsManagement/alerts/12345a-1234b-123c-123d-12345678e",
"alertRule": "AcmeRule",
"severity": "Sev4",
"signalType": "Log",
"monitorCondition": "Fired",
"monitoringService": "Log Alerts V2",
"alertTargetIDs": [
"/subscriptions/12345a-1234b-123c-123d-12345678e/resourcegroups/ai-engineering/providers/microsoft.compute/virtualmachines/testvm"
],
"originAlertId": "123c123d-1a23-1bf3-ba1d-dd1234ff5a67",
"firedDateTime": "2020-07-09T14:04:49.99645Z",
"description": "log alert rule V2",
"essentialsVersion": "1.0",
"alertContextVersion": "1.0"
},
"alertContext": {
"properties": {
"name1": "value1",
"name2": "value2"
},
"conditionType": "LogQueryCriteria",
"condition": {
"windowSize": "PT10M",
"allOf": [
{
"searchQuery": "Heartbeat",
"metricMeasureColumn": "CounterValue",
"targetResourceTypes": "['Microsoft.Compute/virtualMachines']",
"operator": "LowerThan",
"threshold": "1",
"timeAggregation": "Count",
"dimensions": [
{
"name": "ResourceId",
"value": "/subscriptions/12345a-1234b-123c-123d-12345678e/resourceGroups/TEST/providers/Microsoft.Compute/virtualMachines/testvm"
}
],
"metricValue": 0.0,
"failingPeriods": {
"numberOfEvaluationPeriods": 1,
"minFailingPeriodsToAlert": 1
},
"linkToSearchResultsUI": "https://portal.azure.com#@12f345bf-12f3-12af-12ab-1d2cd345db67/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/source/Alerts.EmailLinks/scope/%7B%22resources%22%3A%5B%7B%22resourceId%22%3A%22%2Fsubscriptions%2F12345a-1234b-123c-123d-12345678e%2FresourceGroups%2FTEST%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Ftestvm%22%7D%5D%7D/q/eJzzSE0sKklKTSypUSjPSC1KVQjJzE11T81LLUosSU1RSEotKU9NzdNIAfJKgDIaRgZGBroG5roGliGGxlYmJlbGJnoGEKCpp4dDmSmKMk0A/prettify/1/timespan/2020-07-07T13%3a54%3a34.0000000Z%2f2020-07-09T13%3a54%3a34.0000000Z",
"linkToFilteredSearchResultsUI": "https://portal.azure.com#@12f345bf-12f3-12af-12ab-1d2cd345db67/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/source/Alerts.EmailLinks/scope/%7B%22resources%22%3A%5B%7B%22resourceId%22%3A%22%2Fsubscriptions%2F12345a-1234b-123c-123d-12345678e%2FresourceGroups%2FTEST%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Ftestvm%22%7D%5D%7D/q/eJzzSE0sKklKTSypUSjPSC1KVQjJzE11T81LLUosSU1RSEotKU9NzdNIAfJKgDIaRgZGBroG5roGliGGxlYmJlbGJnoGEKCpp4dDmSmKMk0A/prettify/1/timespan/2020-07-07T13%3a54%3a34.0000000Z%2f2020-07-09T13%3a54%3a34.0000000Z",
"linkToSearchResultsAPI": "https://api.loganalytics.io/v1/subscriptions/12345a-1234b-123c-123d-12345678e/resourceGroups/TEST/providers/Microsoft.Compute/virtualMachines/testvm/query?query=Heartbeat%7C%20where%20TimeGenerated%20between%28datetime%282020-07-09T13%3A44%3A34.0000000%29..datetime%282020-07-09T13%3A54%3A34.0000000%29%29×pan=2020-07-07T13%3a54%3a34.0000000Z%2f2020-07-09T13%3a54%3a34.0000000Z",
"linkToFilteredSearchResultsAPI": "https://api.loganalytics.io/v1/subscriptions/12345a-1234b-123c-123d-12345678e/resourceGroups/TEST/providers/Microsoft.Compute/virtualMachines/testvm/query?query=Heartbeat%7C%20where%20TimeGenerated%20between%28datetime%282020-07-09T13%3A44%3A34.0000000%29..datetime%282020-07-09T13%3A54%3A34.0000000%29%29×pan=2020-07-07T13%3a54%3a34.0000000Z%2f2020-07-09T13%3a54%3a34.0000000Z"
}
],
"windowStartTime": "2020-07-07T13:54:34Z",
"windowEndTime": "2020-07-09T13:54:34Z"
}
}
}
}
Alerta de pesquisa de log para o Log Analytics (até a versão 2018-04-16
da API)
O exemplo de carga útil a seguir é para uma ação de webhook padrão usada para alertas baseados no Log Analytics:
Nota
O "Severity"
valor do campo será alterado se você tiver alternado para a API scheduledQueryRules atual da API de alerta do Log Analytics herdada.
{
"SubscriptionId": "12345a-1234b-123c-123d-12345678e",
"AlertRuleName": "AcmeRule",
"SearchQuery": "Perf | where ObjectName == \"Processor\" and CounterName == \"% Processor Time\" | summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 5m), Computer",
"SearchIntervalStartTimeUtc": "2018-03-26T08:10:40Z",
"SearchIntervalEndtimeUtc": "2018-03-26T09:10:40Z",
"AlertThresholdOperator": "Greater Than",
"AlertThresholdValue": 0,
"ResultCount": 2,
"SearchIntervalInSeconds": 3600,
"LinkToSearchResults": "https://portal.azure.com/#Analyticsblade/search/index?_timeInterval.intervalEnd=2018-03-26T09%3a10%3a40.0000000Z&_timeInterval.intervalDuration=3600&q=Usage",
"LinkToFilteredSearchResultsUI": "https://portal.azure.com/#Analyticsblade/search/index?_timeInterval.intervalEnd=2018-03-26T09%3a10%3a40.0000000Z&_timeInterval.intervalDuration=3600&q=Usage",
"LinkToSearchResultsAPI": "https://api.loganalytics.io/v1/workspaces/workspaceID/query?query=Heartbeat×pan=2020-05-07T18%3a11%3a51.0000000Z%2f2020-05-07T18%3a16%3a51.0000000Z",
"LinkToFilteredSearchResultsAPI": "https://api.loganalytics.io/v1/workspaces/workspaceID/query?query=Heartbeat×pan=2020-05-07T18%3a11%3a51.0000000Z%2f2020-05-07T18%3a16%3a51.0000000Z",
"Description": "log alert rule",
"Severity": "Warning",
"AffectedConfigurationItems": [
"INC-Gen2Alert"
],
"Dimensions": [
{
"name": "Computer",
"value": "INC-Gen2Alert"
}
],
"SearchResult": {
"tables": [
{
"name": "PrimaryResult",
"columns": [
{
"name": "$table",
"type": "string"
},
{
"name": "Computer",
"type": "string"
},
{
"name": "TimeGenerated",
"type": "datetime"
}
],
"rows": [
[
"Fabrikam",
"33446677a",
"2018-02-02T15:03:12.18Z"
],
[
"Contoso",
"33445566b",
"2018-02-02T15:16:53.932Z"
]
]
}
]
},
"WorkspaceId": "12345a-1234b-123c-123d-12345678e",
"AlertType": "Metric measurement"
}
Alerta de pesquisa de log para o Application Insights (até a versão 2018-04-16
da API)
A carga útil de exemplo a seguir é para um webhook padrão quando é usada para alertas de pesquisa de log com base nos recursos do Application Insights:
{
"schemaId": "Microsoft.Insights/LogAlert",
"data": {
"SubscriptionId": "12345a-1234b-123c-123d-12345678e",
"AlertRuleName": "AcmeRule",
"SearchQuery": "requests | where resultCode == \"500\" | summarize AggregatedValue = Count by bin(Timestamp, 5m), IP",
"SearchIntervalStartTimeUtc": "2018-03-26T08:10:40Z",
"SearchIntervalEndtimeUtc": "2018-03-26T09:10:40Z",
"AlertThresholdOperator": "Greater Than",
"AlertThresholdValue": 0,
"ResultCount": 2,
"SearchIntervalInSeconds": 3600,
"LinkToSearchResults": "https://portal.azure.com/AnalyticsBlade/subscriptions/12345a-1234b-123c-123d-12345678e/?query=search+*+&timeInterval.intervalEnd=2018-03-26T09%3a10%3a40.0000000Z&_timeInterval.intervalDuration=3600&q=Usage",
"LinkToFilteredSearchResultsUI": "https://portal.azure.com/AnalyticsBlade/subscriptions/12345a-1234b-123c-123d-12345678e/?query=search+*+&timeInterval.intervalEnd=2018-03-26T09%3a10%3a40.0000000Z&_timeInterval.intervalDuration=3600&q=Usage",
"LinkToSearchResultsAPI": "https://api.applicationinsights.io/v1/apps/0MyAppId0/metrics/requests/count",
"LinkToFilteredSearchResultsAPI": "https://api.applicationinsights.io/v1/apps/0MyAppId0/metrics/requests/count",
"Description": null,
"Severity": "3",
"Dimensions": [
{
"name": "IP",
"value": "1.1.1.1"
}
],
"SearchResult": {
"tables": [
{
"name": "PrimaryResult",
"columns": [
{
"name": "$table",
"type": "string"
},
{
"name": "Id",
"type": "string"
},
{
"name": "Timestamp",
"type": "datetime"
}
],
"rows": [
[
"Fabrikam",
"33446677a",
"2018-02-02T15:03:12.18Z"
],
[
"Contoso",
"33445566b",
"2018-02-02T15:16:53.932Z"
]
]
}
]
},
"ApplicationId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"AlertType": "Metric measurement"
}
}
Alerta de pesquisa de log com uma carga JSON personalizada (até a versão 2018-04-16
da API)
Nota
Um webhook personalizado baseado em JSON não é suportado na versão 2021-08-01
da API.
A tabela a seguir lista as propriedades de ação padrão do webhook e seus nomes de parâmetros JSON personalizados.
Parâmetro | Variável | Description |
---|---|---|
AlertRuleName |
#alertrulename | Nome da regra de alerta. |
Severity |
#severity | Severidade definida para o alerta de pesquisa de log disparado. |
AlertThresholdOperator |
#thresholdoperator | Operador de limiar para a regra de alerta. |
AlertThresholdValue |
#thresholdvalue | Valor limite para a regra de alerta. |
LinkToSearchResults |
#linktosearchresults | Link para o portal do Google Analytics que retorna os registros da consulta que criou o alerta. |
LinkToSearchResultsAPI |
#linktosearchresultsapi | Link para a API do Google Analytics que retorna os registros da consulta que criou o alerta. |
LinkToFilteredSearchResultsUI |
#linktofilteredsearchresultsui | Link para o portal do Google Analytics que retorna os registros da consulta filtrada por combinações de valores de dimensões que criaram o alerta. |
LinkToFilteredSearchResultsAPI |
#linktofilteredsearchresultsapi | Link para a API do Google Analytics que retorna os registros da consulta filtrada por combinações de valores de dimensões que criaram o alerta. |
ResultCount |
#searchresultcount | Número de registos nos resultados da pesquisa. |
Search Interval End time |
#searchintervalendtimeutc | Hora de fim da consulta em UTC, com o formato mm/dd/aaaa HH:mm:ss AM/PM. |
Search Interval |
#searchinterval | Janela de tempo para a regra de alerta, com o formato HH:mm:ss. |
Search Interval StartTime |
#searchintervalstarttimeutc | Hora de início da consulta em UTC, com o formato mm/dd/aaaa HH:mm:ss AM/PM. |
SearchQuery |
#searchquery | Consulta de pesquisa de log usada pela regra de alerta. |
SearchResults |
"IncludeSearchResults": verdadeiro | Registros retornados pela consulta como uma tabela JSON, limitados aos primeiros 1.000 registros. "IncludeSearchResults": true é adicionado em uma definição de webhook JSON personalizada como uma propriedade de nível superior. |
Dimensions |
"IncludeDimensions": verdadeiro | Combinações de valores de dimensões que dispararam esse alerta como uma seção JSON. "IncludeDimensions": true é adicionado em uma definição de webhook JSON personalizada como uma propriedade de nível superior. |
Alert Type |
#alerttype | O tipo de regra de alerta de pesquisa de log configurada como Medição métrica ou Número de resultados. |
WorkspaceID |
#workspaceid | ID do seu espaço de trabalho do Log Analytics. |
Application ID |
#applicationid | ID do seu aplicativo Application Insights. |
Subscription ID |
#subscriptionid | ID da sua subscrição do Azure utilizada. |
Você pode usar Incluir carga JSON personalizada para webhook para obter uma carga JSON personalizada usando os parâmetros. Você também pode gerar mais propriedades.
Por exemplo, você pode especificar a seguinte carga útil personalizada que inclui um único parâmetro chamado text
. O serviço que este webhook chama espera este parâmetro:
{
"text":"#alertrulename fired with #searchresultcount over threshold of #thresholdvalue."
}
Este exemplo de carga útil é resolvido para algo como o exemplo a seguir quando é enviado para o webhook:
{
"text":"My Alert Rule fired with 18 records over threshold of 10 ."
}
As variáveis em um webhook personalizado devem ser especificadas dentro de um compartimento JSON. Por exemplo, a referência #searchresultcount
no exemplo de webhook gera saída com base nos resultados do alerta.
Para incluir resultados de pesquisa, adicione IncludeSearchResults como uma propriedade de nível superior no JSON personalizado. Os resultados da pesquisa são incluídos como uma estrutura JSON, portanto, os resultados não podem ser referenciados em campos personalizados definidos.
Nota
O botão Exibir Webhook ao lado da opção Incluir carga JSON personalizada para webhook exibe uma visualização do que foi fornecido. Ele não contém dados reais, mas é representativo do esquema JSON que será usado.
Por exemplo, para criar uma carga personalizada que inclua apenas o nome do alerta e os resultados da pesquisa, use esta configuração:
{
"alertname":"#alertrulename",
"IncludeSearchResults":true
}
A carga útil de exemplo a seguir é para uma ação de webhook personalizada para qualquer alerta de pesquisa de log:
{
"alertname":"AcmeRule","IncludeSearchResults":true,
"SearchResults":
{
"tables":[
{"name":"PrimaryResult","columns":
[
{"name":"$table","type":"string"},
{"name":"Id","type":"string"},
{"name":"TimeGenerated","type":"datetime"}
],
"rows":
[
["Fabrikam","33446677a","2018-02-02T15:03:12.18Z"],
["Contoso","33445566b","2018-02-02T15:16:53.932Z"]
]
}
]
}
}
Próximos passos
- Saiba mais sobre os alertas do Azure Monitor.
- Crie e gerencie grupos de ações no Azure.
- Saiba mais sobre consultas de log.