Exemples de charges utiles pour les alertes de recherche dans les journaux à l’aide d’actions de webhook

Vous pouvez utiliser des actions webhook dans une règle d’alerte de recherche de journal pour appeler une seule requête HTTP POST. Dans cet article, nous décrivons les propriétés disponibles lorsque vous configurez des groupes d’actions pour utiliser des webhooks. Le service appelé doit prendre en charge les webhooks et savoir comment utiliser la charge utile qu’il reçoit.

Nous vous recommandons d’utiliser le schéma d’alerte commun pour vos intégrations de webhook. Le schéma d’alerte commun offre l’avantage de générer une seule charge utile d’alerte extensible et unifiée sur tous les services d’alerte dans Azure Monitor.

Pour les règles d’alerte de recherche dans les journaux qui ont une charge utile JSON personnalisée définie, l’activation du schéma d’alerte commun rétablit le schéma de charge utile à celui décrit dans le schéma d’alerte commun. Si vous souhaitez définir une charge utile JSON personnalisée, le webhook ne peut pas utiliser le schéma d’alerte commun.

Les alertes sur lesquelles le schéma commun est activé ont une limite de taille maximale de 256 Ko par alerte. Une alerte plus importante n’inclut pas de résultats de la recherche. Quand les résultats de la recherche ne sont pas inclus, utilisez LinkToFilteredSearchResultsAPI ou LinkToSearchResultsAPI pour accéder aux résultats de la requête par le biais de l’API Log Analytics.

Les exemples de charge utile incluent des exemples lorsque la charge utile est standard et quand elle est personnalisée.

Alerte de recherche de journal pour tous les journaux de ressources (à partir de la version 2021-08-01de l’API)

L’exemple de charge utile suivant concerne un webhook standard lorsqu’il est utilisé pour les alertes de recherche dans les journaux de journal en fonction des journaux des ressources :

{
    "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"
            }
        }
    }
}

Alerte de recherche de journal pour Log Analytics (jusqu’à la version 2018-04-16de l’API)

L’exemple de charge utile suivant est destiné à une action webhook standard utilisée pour les alertes basées sur Log Analytics :

Notes

La valeur du champ "Severity" change si vous avez basculé sur l’API scheduledQueryRules actuelle à partir de l’API d’alerte Log Analytics héritée.

{
    "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"
}

Alerte de recherche de journal pour Application Insights (jusqu’à la version 2018-04-16de l’API)

L’exemple de charge utile suivant concerne un webhook standard lorsqu’il est utilisé pour les alertes de recherche dans les journaux en fonction des ressources 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"
    }
}

Alerte de recherche de journal avec une charge utile JSON personnalisée (jusqu’à la version 2018-04-16de l’API)

Remarque

Un webhook JSON personnalisé n’est pas pris en charge à partir de la version de l’API version 2021-08-01.

Le tableau ci-dessous répertorie les propriétés d’action webhook par défaut et les noms de paramètres JSON personnalisés correspondants.

Paramètre Variable Description
AlertRuleName #alertrulename Nom de la règle d’alerte.
Severity #severity Gravité définie pour l’alerte de recherche de journal déclenchée.
AlertThresholdOperator #thresholdoperator Opérateur de seuil de la règle d’alerte.
AlertThresholdValue #thresholdvalue Valeur de seuil de la règle d’alerte.
LinkToSearchResults #linktosearchresults Lien vers le portail Analytics qui retourne les enregistrements de la requête ayant créé l’alerte.
LinkToSearchResultsAPI #linktosearchresultsapi Lien vers l’API Analytics qui retourne les enregistrements de la requête ayant créé l’alerte.
LinkToFilteredSearchResultsUI #linktofilteredsearchresultsui Lien vers le portail Analytics qui retourne les enregistrements de la requête filtrés par combinaisons de valeurs de dimensions ayant créé l’alerte.
LinkToFilteredSearchResultsAPI #linktofilteredsearchresultsapi Lien vers l’API Analytics qui retourne les enregistrements de la requête filtrés par combinaisons de valeurs de dimensions ayant créé l’alerte.
ResultCount #searchresultcount Nombre d’enregistrements dans les résultats de recherche.
Search Interval End time #searchintervalendtimeutc Heure de fin de la requête au format UTC, au format mm/jj/aaaa HH:mm:ss AM/PM.
Search Interval #searchinterval Fenêtre de temps de la règle d’alerte, au format HH:mm:ss.
Search Interval StartTime #searchintervalstarttimeutc Heure de début de la requête au format UTC, au format mm/jj/aaaa HH:mm:ss AM/PM.
SearchQuery #searchquery Requête de recherche de journal utilisée par la règle d’alerte.
SearchResults "IncludeSearchResults": true Enregistrements retournés par la requête sous forme de table JSON, limitée aux 1 000 premiers enregistrements. « IncludeSearchResults » : true est ajouté à une définition de webhook JSON personnalisée en tant que propriété de niveau supérieur.
Dimensions « IncludeDimension »" : true Combinaisons de valeurs de dimensions ayant déclenché une alerte en tant que section JSON. « IncludeDimensions » : true est ajouté à une définition de webhook JSON personnalisée en tant que propriété de niveau supérieur.
Alert Type #alerttype Type de règle d’alerte de recherche de journal configurée comme mesure de métrique ou nombre de résultats.
WorkspaceID #workspaceid ID de votre espace de travail Log Analytics.
Application ID #applicationid ID de votre application Application Insights.
Subscription ID #subscriptionid ID de votre abonnement Azure utilisé.

Vous pouvez utiliser l’option Inclure une charge utile JSON personnalisée pour webhook pour obtenir une charge utile JSON personnalisée à l’aide des paramètres. Vous pouvez également générer des propriétés supplémentaires.

Par exemple, vous pouvez spécifier la charge utile personnalisée suivante qui inclut un paramètre unique appelé text. Le service appelé par ce webhook s’attend à recevoir ce paramètre :


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

Cet exemple de charge utile donne ce qui suit quand il est envoyée au webhook :

    {
        "text":"My Alert Rule fired with 18 records over threshold of 10 ."
    }

Les variables d’un webhook personnalisé doivent être spécifiées dans un boîtier JSON. Par exemple, le fait de référencer #searchresultcount dans l’exemple de webhook génère une sortie en fonction des résultats de l’alerte.

Pour inclure les résultats de la recherche, ajoutez IncludeSearchResults en tant que propriété de niveau supérieur dans le JSON personnalisé. Les résultats de la recherche sont inclus en tant que structure JSON, ce qui signifie que les résultats ne peuvent pas être référencés dans des champs définis personnalisés.

Notes

Le bouton Afficher le webhook à côté de l’option Inclure une charge utile JSON personnalisée pour webhook affiche un aperçu de ce qui a été fourni. Il ne contient aucune donnée réelle, mais il est représentatif du schéma JSON utilisé.

Par exemple, pour créer une charge utile personnalisée qui inclut uniquement le nom de l’alerte et les résultats de la recherche, utilisez cette configuration :

    {
       "alertname":"#alertrulename",
       "IncludeSearchResults":true
    }

L’exemple de charge utile suivant est destiné à une action de webhook personnalisée pour toute alerte de recherche dans les journaux :

    {
    "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"]
                        ]
                    }
                ]
        }
    }

Étapes suivantes