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-01da 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&timespan=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&timespan=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-16da 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&timespan=2020-05-07T18%3a11%3a51.0000000Z%2f2020-05-07T18%3a16%3a51.0000000Z",
    "LinkToFilteredSearchResultsAPI": "https://api.loganalytics.io/v1/workspaces/workspaceID/query?query=Heartbeat&timespan=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-16da 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": "123123f0-01d3-12ab-123f-abc1ab01c0a1",
        "AlertType": "Metric measurement"
    }
}

Alerta de pesquisa de log com uma carga JSON personalizada (até a versão 2018-04-16da API)

Nota

Um webhook personalizado baseado em JSON não é suportado na versão 2021-08-01da 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