Freigeben über


Erstellen einer Metrikwarnung in Azure Monitor-Protokollen

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Sie können Metrikwarnungsfunktionen für bestimmte vordefinierte Protokolle in Azure Monitor Logs verwenden. Die überwachten Protokolle, die von Azure-basierten oder lokalen Computern gesammelt werden können, werden in Metriken konvertiert und dann wie jede andere Metrik mithilfe von Metrikwarnungsregeln überwacht.

Ein Log Analytics-Arbeitsbereich unterstützt diese Protokolltypen:

Zu den Vorteilen der Verwendung von Metrikwarnungen für Protokolle über abfragebasierte Protokollsuchwarnungen in Azure gehören:

  • Metrikwarnungen ermöglichen eine Überwachung in Quasi-Echtzeit. Sie forken hierfür Daten aus der Protokollquelle.
  • Metrikwarnungen sind zustandsbehaftet. Sie benachrichtigen Sie einmal, wenn eine Warnung ausgelöst wird, und einmal, wenn die Warnung behandelt wurde. Protokollsuchwarnungen sind zustandslos und werden in jedem Intervall ausgelöst, wenn die Warnungsbedingung erfüllt ist.
  • Metrikwarnungen bieten mehrere Dimensionen. Sie ermöglichen das Filtern nach bestimmten Werten wie Computer und Betriebssystemtypen, ohne dass eine komplexe Abfrage in Log Analytics definiert werden muss.

Hinweis

Eine bestimmte Metrik oder Dimension wird nur angezeigt, wenn Daten für diese im ausgewählten Zeitraum vorhanden sind. Diese Metriken sind für Kunden mit Log Analytics-Arbeitsbereichen verfügbar.

Für Protokolle unterstützte Metriken und Dimensionen

Mit Metrikwarnungen können Sie Dimensionen verwenden, um Ihre Metrik nach der richtigen Ebene zu filtern. Die vollständige Liste der für Protokolle unterstützten Metriken entspricht der Liste der Log Analytics-Arbeitsbereichsmetriken.

Hinweis

Um eine unterstützte Metrik anzuzeigen, die über Azure Monitor-Metriken aus dem Log Analytics-Arbeitsbereich extrahiert werden können, müssen Sie für diese Metrik eine Metrikwarnung für Protokolle erstellen. Die in der Metrikwarnung für Protokolle ausgewählten Dimensionen werden nur für die Untersuchung über „Azure Monitor-Metriken“ angezeigt.

Erstellen einer Metrikwarnung für Protokolle

Bevor Metrikdaten aus gängigen Protokollen in Log Analytics verarbeitet werden, werden sie in Azure Monitor-Metriken weitergeleitet. Sie können dann zusätzlich zu Metrikwarnungen die Funktionen der Metrikplattform nutzen, einschließlich Warnungen mit einer Häufigkeit von nur einer Minute.

Der Prozess zum Erstellen von Metrikwarnungen aus Protokollen ist zweigliedrig:

  1. Erstellen einer Regel zum Extrahieren von Metriken aus unterstützten Protokollen mithilfe der API für geplante Abfrageregeln (scheduledQueryRules)
  2. Erstellen einer Metrikwarnung für die aus dem Protokoll (in Schritt 1) und dem Log Analytics-Arbeitsbereich als Zielressource extrahierte Metrik

Voraussetzungen

Bevor Sie eine Metrikwarnung für Protokolle erstellen, stellen Sie sicher, dass die folgenden Elemente eingerichtet und verfügbar sind:

Methoden zum Erstellen einer Metrikwarnung für Protokolle

Sie können Metrikwarnungen mithilfe des Azure-Portals, von Azure Resource Manager-Vorlagen, der REST-API, Azure PowerShell und der Azure CLI erstellen und verwalten.

Nachdem Sie Metrikwarnungen für Protokolle für einen angegebenen Log Analytics-Arbeitsbereich erstellt haben, verfügen diese über alle Merkmale und Funktionen von Metrikwarnungen, einschließlich dem Nutzdatenschema, der anwendbaren Kontingentgrenzwerte und dem abgerechneten Preis.

Schritt-für-Schritt-Details und Beispiele finden Sie unter Erstellen oder Bearbeiten einer Metrikwarnungsregel. Befolgen Sie die Anweisungen zum Verwalten von Metrikwarnungen, und beachten Sie die folgenden Überlegungen:

  • Das Ziel für eine Metrikwarnung muss ein gültiger Log Analytics-Arbeitsbereich sein.

  • Das Signal, das für eine Metrikwarnung für einen ausgewählten Log Analytics-Arbeitsbereich ausgewählt wurde, muss vom Typ Metrik sein.

  • Sie können nach bestimmten Bedingungen oder Ressourcen filtern, indem Sie Dimensionsfilter verwenden, da Metriken für Protokolle multidimensional sind.

  • Wenn Sie die Signallogik konfigurieren, können Sie eine einzelne Warnung erstellen, um mehrere Dimensionswerte (z. B. Computer) zu umfassen.

  • Bei der Erstellung einer Metrikwarnung für Protokolle über das Azure-Portal wird im Hintergrund automatisch eine entsprechende Regel für die Konvertierung von Protokolldaten in Metrik über scheduledQueryRules erstellt, ohne dass ein Benutzereingriff oder eine Aktion erforderlich ist.

    Wenn Sie nicht das Azure-Portal verwenden, um eine Metrikwarnung für einen ausgewählten Log Analytics-Arbeitsbereich zu erstellen, müssen Sie zunächst manuell eine explizite Regel zum Konvertieren von Protokolldaten in eine Metrik erstellen, indem Sie scheduledQueryRules verwenden.

Resource Manager-Vorlagen

Zum Erstellen einer Metrikwarnung für Protokolle können Sie die folgenden Resource Manager-Beispielvorlagen verwenden.

Für Metrikwarnungen für Protokolle, die über das Azure-Portal erstellt wurden, können Sie diese Beispielvorlagen verwenden, um eine scheduledQueryRules-basierte Protokoll-zu-Metrik-Konvertierungsregel zu erstellen, bevor Sie eine Metrikwarnung erstellen. Wenn Sie das nicht tun, werden keine Daten für die Metrikwarnung in den Protokollen angezeigt.

Metrikwarnungen für Protokolle mit statischem Schwellenwert

In der folgenden Beispielvorlage hängt die Erstellung einer Metrikwarnung für einen statischen Schwellenwert von der erfolgreichen Erstellung der Regel zum Extrahieren von Metriken aus Protokollen über scheduledQueryRules ab.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the rule to convert a log to a metric"
            }
        },
        "convertRuleDescription": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Description for the log converted to a metric."
            }
        },
        "convertRuleRegion": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the region used by the workspace."
            }
        },
        "convertRuleStatus": {
            "type": "string",
            "defaultValue": "true",
            "metadata": {
                "description": "Specifies whether the log conversion rule is enabled."
            }
        },
        "convertRuleMetric": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric after extraction is done from logs."
            }
        },
        "alertName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the alert."
            }
        },
        "alertDescription": {
            "type": "string",
            "defaultValue": "This is a metric alert",
            "metadata": {
                "description": "Description of the alert."
            }
        },
        "alertSeverity": {
            "type": "int",
            "defaultValue": 3,
            "allowedValues": [
                0,
                1,
                2,
                3,
                4
            ],
            "metadata": {
                "description": "Severity of the alert {0,1,2,3,4}."
            }
        },
        "isEnabled": {
            "type": "bool",
            "defaultValue": true,
            "metadata": {
                "description": "Specifies whether the alert is enabled."
            }
        },
        "resourceId": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Full resource ID of the resource emitting the metric that will be used for the comparison. For example: /subscriptions/00000000-0000-0000-0000-0000-00000000/resourceGroups/ResourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
            }
        },
        "metricName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric used in the comparison to activate the alert."
            }
        },
        "operator": {
            "type": "string",
            "defaultValue": "GreaterThan",
            "allowedValues": [
                "Equals",
                "NotEquals",
                "GreaterThan",
                "GreaterThanOrEqual",
                "LessThan",
                "LessThanOrEqual"
            ],
            "metadata": {
                "description": "Operator comparing the current value with the threshold value."
            }
        },
        "threshold": {
            "type": "string",
            "defaultValue": "0",
            "metadata": {
                "description": "The threshold value at which the alert is activated."
            }
        },
        "timeAggregation": {
            "type": "string",
            "defaultValue": "Average",
            "allowedValues": [
                "Average",
                "Minimum",
                "Maximum",
                "Total"
            ],
            "metadata": {
                "description": "How the data that's collected should be combined over time."
            }
        },
        "windowSize": {
            "type": "string",
            "defaultValue": "PT5M",
            "metadata": {
                "description": "Period of time used to monitor alert activity based on the threshold. Must be between five minutes and one day. ISO 8601 duration format."
            }
        },
        "evaluationFrequency": {
            "type": "string",
            "defaultValue": "PT1M",
            "metadata": {
                "description": "How often the metric alert is evaluated, represented in ISO 8601 duration format."
            }
        },
        "actionGroupId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The ID of the action group that's triggered when the alert is activated or deactivated."
            }
        }
    },
    "variables": {
        "convertRuleSourceWorkspace": {
            "SourceId": "/subscriptions/1234-56789-1234-567a/resourceGroups/resourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        }
    },
    "resources": [
        {
            "name": "[parameters('convertRuleName')]",
            "type": "Microsoft.Insights/scheduledQueryRules",
            "apiVersion": "2018-04-16",
            "location": "[parameters('convertRuleRegion')]",
            "properties": {
                "description": "[parameters('convertRuleDescription')]",
                "enabled": "[parameters('convertRuleStatus')]",
                "source": {
                    "dataSourceId": "[variables('convertRuleSourceWorkspace').SourceId]"
                },
                "action": {
                    "odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.LogToMetricAction",
                    "criteria": [{
                            "metricName": "[parameters('convertRuleMetric')]",
                            "dimensions": []
                        }
                    ]
                }
            }
        },
        {
            "name": "[parameters('alertName')]",
            "type": "Microsoft.Insights/metricAlerts",
            "location": "global",
            "apiVersion": "2018-03-01",
            "tags": {},
            "dependsOn":["[resourceId('Microsoft.Insights/scheduledQueryRules',parameters('convertRuleName'))]"],
            "properties": {
                "description": "[parameters('alertDescription')]",
                "severity": "[parameters('alertSeverity')]",
                "enabled": "[parameters('isEnabled')]",
                "scopes": ["[parameters('resourceId')]"],
                "evaluationFrequency":"[parameters('evaluationFrequency')]",
                "windowSize": "[parameters('windowSize')]",
                "criteria": {
                    "odata.type": "Microsoft.Azure.Monitor.SingleResourceMultipleMetricCriteria",
                    "allOf": [
                        {
                            "name" : "1st criterion",
                            "metricName": "[parameters('metricName')]",
                            "dimensions":[],
                            "operator": "[parameters('operator')]",
                            "threshold" : "[parameters('threshold')]",
                            "timeAggregation": "[parameters('timeAggregation')]"
                        }
                    ]
                },
                "actions": [
                    {
                        "actionGroupId": "[parameters('actionGroupId')]"
                    }
                ]
            }
        }
    ]
}

Wenn Sie den vorherigen JSON-Code als metricfromLogsAlertStatic.json speichern, können Sie ihn mit einer JSON-Parameterdatei für die Erstellung basierend auf einer Resource Manager-Vorlage koppeln. Hier ist ein Beispiel für eine JSON-Parameterdatei:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "value": "TestLogtoMetricRule" 
        },
        "convertRuleDescription": {
            "value": "Test rule to extract metrics from logs via template"
        },
        "convertRuleRegion": {
            "value": "West Central US"
        },
        "convertRuleStatus": {
            "value": "true"
        },
        "convertRuleMetric": {
            "value": "Average_% Idle Time"
        },
        "alertName": {
            "value": "TestMetricAlertonLog"
        },
        "alertDescription": {
            "value": "New multidimensional metric alert created via template"
        },
        "alertSeverity": {
            "value":3
        },
        "isEnabled": {
            "value": true
        },
        "resourceId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        },
        "metricName":{
            "value": "Average_% Idle Time"
        },
        "operator": {
            "value": "GreaterThan"
        },
        "threshold":{
            "value": "1"
        },
        "timeAggregation":{
            "value": "Average"
        },
        "actionGroupId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/microsoft.insights/actionGroups/actionGroupName"
        }
    }
}

Davon ausgehend, dass Sie die vorangehende Parameterdatei als metricfromLogsAlertStatic.parameters.json gespeichert haben, können Sie Metrikwarnungen für Protokolle erstellen, indem Sie die Resource Manager-Vorlage zum Erstellen im Azure-Portal verwenden.

Alternativ können Sie diesen Azure PowerShell-Befehl verwenden:

New-AzResourceGroupDeployment -ResourceGroupName "myRG" -TemplateFile metricfromLogsAlertStatic.json TemplateParameterFile metricfromLogsAlertStatic.parameters.json

Sie können die Resource Manager-Vorlage auch mithilfe der Azure CLI bereitstellen:

az deployment group create --resource-group myRG --template-file metricfromLogsAlertStatic.json --parameters @metricfromLogsAlertStatic.parameters.json

Metrikwarnungen für Protokolle mit dynamischen Schwellenwerten

In der folgenden Beispielvorlage hängt die Erstellung einer Metrikwarnung für dynamische Schwellenwerte von der erfolgreichen Erstellung der Regel zum Extrahieren von Metriken aus Protokollen über scheduledQueryRules ab.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the rule to convert a log to a metric."
            }
        },
        "convertRuleDescription": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Description for the log converted to a metric."
            }
        },
        "convertRuleRegion": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the region used by the workspace."
            }
        },
        "convertRuleStatus": {
            "type": "string",
            "defaultValue": "true",
            "metadata": {
                "description": "Specifies whether the log conversion rule is enabled."
            }
        },
        "convertRuleMetric": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric after extraction is done from logs."
            }
        },
        "alertName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the alert."
            }
        },
        "alertDescription": {
            "type": "string",
            "defaultValue": "This is a metric alert",
            "metadata": {
                "description": "Description of the alert."
            }
        },
        "alertSeverity": {
            "type": "int",
            "defaultValue": 3,
            "allowedValues": [
                0,
                1,
                2,
                3,
                4
            ],
            "metadata": {
                "description": "Severity of the alert {0,1,2,3,4}."
            }
        },
        "isEnabled": {
            "type": "bool",
            "defaultValue": true,
            "metadata": {
                "description": "Specifies whether the alert is enabled."
            }
        },
        "resourceId": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Full resource ID of the resource emitting the metric that will be used for the comparison. For example: /subscriptions/00000000-0000-0000-0000-0000-00000000/resourceGroups/ResourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
            }
        },
        "metricName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric used in the comparison to activate the alert."
            }
        },
        "operator": {
            "type": "string",
            "defaultValue": "GreaterOrLessThan",
            "allowedValues": [
                "GreaterThan",
                "LessThan",
                "GreaterOrLessThan"
            ],
            "metadata": {
                "description": "Operator comparing the current value with the threshold value."
            }
        },
        "alertSensitivity": {
            "type": "string",
            "defaultValue": "Medium",
            "allowedValues": [
                "High",
                "Medium",
                "Low"
            ],
            "metadata": {
                "description": "Tunes how 'noisy' the alerts for dynamic thresholds will be. 'High' will result in more alerts. 'Low' will result in fewer alerts."
            }
        },
        "numberOfEvaluationPeriods": {
            "type": "string",
            "defaultValue": "4",
            "metadata": {
                "description": "The number of periods to check in the alert evaluation."
            }
        },
        "minFailingPeriodsToAlert": {
            "type": "string",
            "defaultValue": "3",
            "metadata": {
                "description": "The number of unhealthy periods to alert on (must be lower or equal to numberOfEvaluationPeriods)."
            }
        },
        "timeAggregation": {
            "type": "string",
            "defaultValue": "Average",
            "allowedValues": [
                "Average",
                "Minimum",
                "Maximum",
                "Total"
            ],
            "metadata": {
                "description": "How the data that's collected should be combined over time."
            }
        },
        "windowSize": {
            "type": "string",
            "defaultValue": "PT5M",
            "metadata": {
                "description": "Period of time used to monitor alert activity based on the threshold. Must be between five minutes and one day. ISO 8601 duration format."
            }
        },
        "evaluationFrequency": {
            "type": "string",
            "defaultValue": "PT1M",
            "metadata": {
                "description": "How often the metric alert is evaluated, represented in ISO 8601 duration format."
            }
        },
        "actionGroupId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The ID of the action group that's triggered when the alert is activated or deactivated."
            }
        }
    },
    "variables": {
        "convertRuleSourceWorkspace": {
            "SourceId": "/subscriptions/1234-56789-1234-567a/resourceGroups/resourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        }
    },
    "resources": [
        {
            "name": "[parameters('convertRuleName')]",
            "type": "Microsoft.Insights/scheduledQueryRules",
            "apiVersion": "2018-04-16",
            "location": "[parameters('convertRuleRegion')]",
            "properties": {
                "description": "[parameters('convertRuleDescription')]",
                "enabled": "[parameters('convertRuleStatus')]",
                "source": {
                    "dataSourceId": "[variables('convertRuleSourceWorkspace').SourceId]"
                },
                "action": {
                    "odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.LogToMetricAction",
                    "criteria": [{
                            "metricName": "[parameters('convertRuleMetric')]",
                            "dimensions": []
                        }
                    ]
                }
            }
        },
        {
            "name": "[parameters('alertName')]",
            "type": "Microsoft.Insights/metricAlerts",
            "location": "global",
            "apiVersion": "2018-03-01",
            "tags": {},
            "dependsOn":["[resourceId('Microsoft.Insights/scheduledQueryRules',parameters('convertRuleName'))]"],
            "properties": {
                "description": "[parameters('alertDescription')]",
                "severity": "[parameters('alertSeverity')]",
                "enabled": "[parameters('isEnabled')]",
                "scopes": ["[parameters('resourceId')]"],
                "evaluationFrequency":"[parameters('evaluationFrequency')]",
                "windowSize": "[parameters('windowSize')]",
                "criteria": {
                    "odata.type": "Microsoft.Azure.Monitor.MultipleResourceMultipleMetricCriteria",
                    "allOf": [
                        {
                            "criterionType": "DynamicThresholdCriterion",
                            "name" : "1st criterion",
                            "metricName": "[parameters('metricName')]",
                            "dimensions":[],
                            "operator": "[parameters('operator')]",
                            "alertSensitivity": "[parameters('alertSensitivity')]",
                            "failingPeriods": {
                                "numberOfEvaluationPeriods": "[parameters('numberOfEvaluationPeriods')]",
                                "minFailingPeriodsToAlert": "[parameters('minFailingPeriodsToAlert')]"
                            },
                            "timeAggregation": "[parameters('timeAggregation')]"
                        }
                    ]
                },
                "actions": [
                    {
                        "actionGroupId": "[parameters('actionGroupId')]"
                    }
                ]
            }
        }
    ]
}

Wenn Sie den vorherigen JSON-Code als metricfromLogsAlertDynamic.json speichern, können Sie ihn mit einer JSON-Parameterdatei für die Erstellung basierend auf einer Resource Manager-Vorlage koppeln. Hier ist ein Beispiel für eine JSON-Parameterdatei:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "value": "TestLogtoMetricRule"
        },
        "convertRuleDescription": {
            "value": "Test rule to extract metrics from logs via template"
        },
        "convertRuleRegion": {
            "value": "West Central US"
        },
        "convertRuleStatus": {
            "value": "true"
        },
        "convertRuleMetric": {
            "value": "Average_% Idle Time"
        },
        "alertName": {
            "value": "TestMetricAlertonLog"
        },
        "alertDescription": {
            "value": "New multidimensional metric alert created via template"
        },
        "alertSeverity": {
            "value":3
        },
        "isEnabled": {
            "value": true
        },
        "resourceId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        },
        "metricName":{
            "value": "Average_% Idle Time"
        },
        "operator": {
            "value": "GreaterOrLessThan"
          },
          "alertSensitivity": {
              "value": "Medium"
          },
          "numberOfEvaluationPeriods": {
              "value": "4"
          },
          "minFailingPeriodsToAlert": {
              "value": "3"
          },
        "timeAggregation":{
            "value": "Average"
        },
        "actionGroupId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/microsoft.insights/actionGroups/actionGroupName"
        }
    }
}

Davon ausgehend, dass Sie die vorangehende Parameterdatei als metricfromLogsAlertDynamic.parameters.json gespeichert haben, können Sie Metrikwarnungen für Protokolle erstellen, indem Sie die Resource Manager-Vorlage zum Erstellen im Azure-Portal verwenden.

Alternativ können Sie diesen Azure PowerShell-Befehl verwenden:

New-AzResourceGroupDeployment -ResourceGroupName "myRG" -TemplateFile metricfromLogsAlertDynamic.json TemplateParameterFile metricfromLogsAlertDynamic.parameters.json

Sie können die Resource Manager-Vorlage auch mithilfe der Azure CLI bereitstellen:

az deployment group create --resource-group myRG --template-file metricfromLogsAlertDynamic.json --parameters @metricfromLogsAlertDynamic.parameters.json