Cargas úteis de exemplo 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 que é chamado deve suportar webhooks e saber como usar a carga útil que recebe.

É recomendável usar o esquema de alerta comum para suas integrações com o webhook. O esquema de alerta comum fornece a vantagem de ter um conteúdo de alerta extensível e unificado 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 para o descrito em Esquema de alerta comum. Se você quiser ter um conteúdo JSON personalizado definido, o webhook não poderá usar o esquema de alerta comum.

Os alertas com o esquema comum habilitado 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 estiverem incluídos, use LinkToFilteredSearchResultsAPI ou LinkToSearchResultsAPI para acessar os resultados da consulta através da API do Log Analytics.

O conteúdo de exemplo inclui exemplos de quando a carga é 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 ele é usado 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 conteúdo de exemplo a seguir é para uma ação de webhook padrão usada para alertas com base no Log Analytics:

Observação

O valor do campo "Severity" mudará se você mudou para a API scheduledQueryRules a partir 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 ele é usado 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)

Observação

Um webhook personalizado baseado em JSON não tem suporte na versão da API 2021-08-01.

A tabela a seguir lista as propriedades de ação do webhook padrão e seus nomes de parâmetro JSON personalizados.

Parâmetro Variável Descrição
AlertRuleName #alertrulename Nome da regra de alerta.
Severity #severity Severidade definida para o alerta de pesquisa de log acionado.
AlertThresholdOperator #thresholdoperator O operador de limite da regra de alerta.
AlertThresholdValue #thresholdvalue O valor de limite para a regra de alerta.
LinkToSearchResults #linktosearchresults Link para o portal do Analytics que retorna os registros da consulta que criou o alerta.
LinkToSearchResultsAPI #linktosearchresultsapi Link para a API do Analytics que retorna os registros da consulta que criou o alerta.
LinkToFilteredSearchResultsUI #linktofilteredsearchresultsui Link para o portal do Analytics que retorna os registros da consulta filtrada por combinações de valor de dimensões que criaram o alerta.
LinkToFilteredSearchResultsAPI #linktofilteredsearchresultsapi Link para a API do Analytics que retorna os registros da consulta filtrada por combinações de valor de dimensões que criaram o alerta.
ResultCount #searchresultcount Número de registros nos resultados da pesquisa.
Search Interval End time #searchintervalendtimeutc Hora de término para consultas em UTC, formato dd/mm/aaaa hh:mm:ss AM/PM.
Search Interval #searchinterval A janela de tempo para a regra de alerta, com formato HH:mm:ss.
Search Interval StartTime #searchintervalstarttimeutc Hora de início para consultas em UTC, formato dd/mm/aaaa hh:mm:ss AM/PM.
SearchQuery #searchquery A consulta da pesquisa de log usada pela regra de alerta.
SearchResults "IncludeSearchResults": true Registros retornados pela consulta como uma tabela JSON, limitados aos primeiros 1.000 registros. "IncludeSearchResults": true é adicionado em uma definição personalizada de webhook JSON como uma propriedade de nível superior.
Dimensions "IncludeDimensions": true Combinações de valores de dimensões que dispararam esse alerta como uma seção JSON. "IncludeDimensions": true é adicionado em uma definição personalizada de webhook JSON como uma propriedade de nível superior.
Alert Type #alerttype O tipo de regra de alerta de pesquisa de log configurada como Medição de 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 assinatura do Azure usada.

Você pode usar Incluir conteúdo JSON personalizado para webhook para obter um conteúdo JSON personalizado usando os parâmetros. Você também pode gerar mais propriedades.

Por exemplo, você pode especificar a seguinte carga personalizada que inclui um único parâmetro chamado text. O serviço que este webhook chama espera esse parâmetro:


    {
        "text":"#alertrulename fired with #searchresultcount over threshold of #thresholdvalue."
    }

Esse conteúdo de exemplo resolve algo semelhante ao que é mostrado no 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 em um enclosure JSON. Por exemplo, a referência #searchresultcount no exemplo de webhook gera uma saída com base nos resultados do alerta.

Para incluir os resultados da 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 definidos personalizados.

Observação

O botão Exibir webhook ao lado da opção Incluir conteúdo JSON personalizado para webhook exibe uma visualização do que foi fornecido. Ele não contém dados reais, mas representa o esquema JSON que será usado.

Por exemplo, para criar um conteúdo personalizado que inclui 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óximas etapas