다음을 통해 공유


Azure Monitor 로그에서 메트릭 경고 만들기

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

Azure Monitor 로그의 미리 정의된 로그 집합에 대해 메트릭 경고 기능을 사용할 수 있습니다. Azure 또는 온-프레미스 컴퓨터에서 수집할 수 있는 모니터링된 로그는 메트릭으로 변환된 다음 다른 메트릭과 마찬가지로 메트릭 경고 규칙으로 모니터링됩니다.

Log Analytics 작업 영역은 다음 로그 형식을 지원합니다.

Azure의 쿼리 기반 로그 검색 경고에 비해 로그에 대한 메트릭 경고를 사용하면 다음과 같은 이점이 있습니다.

  • 메트릭 경고는 거의 실시간 모니터링 기능을 제공합니다. 이 기능을 보장하기 위해 로그 원본에서 데이터를 포크합니다.
  • 메트릭 경고는 상태 저장입니다. 경고가 발생하면 한 번, 경고가 해결되면 한 번 알려 줍니다. 로그 검색 경고는 상태 비저장이며 경고 조건이 충족되면 매 간격마다 계속 실행됩니다.
  • 메트릭 경고는 다양한 차원을 제공합니다. Log Analytics에서 복잡한 쿼리를 정의할 필요 없이 컴퓨터 및 OS 형식과 같은 특정 값으로 필터링할 수 있습니다.

참고 항목

특정 메트릭이나 차원은 해당 데이터가 선택한 기간에 존재하는 경우에만 표시됩니다. 이러한 메트릭은 Log Analytics 작업 영역이 있는 고객이 사용할 수 있습니다.

로그에 지원되는 메트릭 및 차원

메트릭 경고를 사용하면 차원을 사용하여 메트릭을 올바른 수준으로 필터링할 수 있습니다. 로그에 대해 지원되는 메트릭의 전체 목록은 Log Analytics 작업 영역 메트릭 목록과 같습니다.

참고 항목

Azure Monitor 메트릭을 통해 Log Analytics 작업 영역에서 추출된 지원 메트릭을 보려면 해당 특정 메트릭에 대한 로그에 대한 메트릭 경고를 만들어야 합니다. 로그에 대한 메트릭 경고에서 선택한 차원은 Azure Monitor 메트릭을 통해서만 탐색할 수 있도록 표시됩니다.

로그에 대한 메트릭 경고 만들기

인기 있는 로그의 메트릭 데이터가 Log Analytics에서 처리되기 전에 Azure Monitor 메트릭으로 파이프됩니다. 그런 다음 메트릭 경고 외에도 1분 정도의 낮은 빈도로 경고를 표시하는 등 메트릭 플랫폼의 기능을 활용할 수 있습니다.

로그에 대한 메트릭 경고를 만드는 프로세스는 두 가지로 나누어집니다.

  1. 예약된 쿼리 규칙 API(scheduledQueryRules)를 사용하여 지원되는 로그에서 메트릭을 추출하기 위한 규칙을 만듭니다.
  2. 로그(1단계) 및 Log Analytics 작업 영역에서 추출된 메트릭에 대한 메트릭 경고를 대상 리소스로 만듭니다.

필수 조건

로그에 대한 메트릭 경고를 만들기 전에 다음 항목이 설정되어 있고 사용 가능한지 확인합니다.

로그에 대한 메트릭 경고를 만드는 방법

Azure Portal, Azure Resource Manager 템플릿, REST API, Azure PowerShell 및 Azure CLI를 사용하여 메트릭 경고를 만들고 관리할 수 있습니다.

지정된 Log Analytics 작업 영역에 대한 로그에 대한 메트릭 경고를 만들면 페이로드 스키마, 적용 가능한 할당량 한도, 청구 가격을 포함하여 메트릭 경고의 모든 특성과 기능을 갖게 됩니다.

단계별 세부 정보 및 샘플을 보려면 메트릭 경고 규칙 만들기 또는 편집을 참조하세요. 메트릭 경고 관리 지침을 따르고 다음 고려 사항에 유의해야 합니다.

  • 메트릭 경고의 대상은 유효한 Log Analytics 작업 영역이어야 합니다.

  • 선택한 Log Analytics 작업 영역에 대한 메트릭 경고에 대해 선택한 신호는 메트릭 형식이어야 합니다.

  • 로그 메트릭은 다차원적이므로 차원 필터를 사용하여 특정 조건이나 리소스를 필터링할 수 있습니다.

  • 신호 논리를 구성할 때 여러 차원 값(예: 컴퓨터)에 걸쳐 단일 경고를 만들 수 있습니다.

  • Azure Portal을 사용하여 로그에 대한 메트릭 경고를 만드는 경우 사용자 개입이나 작업이 필요 없이 scheduledQueryRules를 통해 로그 데이터를 메트릭으로 변환하는 규칙이 백그라운드에서 자동으로 만들어집니다.

    선택한 Log Analytics 작업 영역에 대한 메트릭 경고를 만들기 위해 Azure Portal을 사용하지 않는 경우 먼저 scheduledQueryRules를 사용하여 로그 데이터를 메트릭으로 변환하기 위한 명시적 규칙을 수동으로 만들어야 합니다.

리소스 관리자 템플릿

로그에 대한 메트릭 경고를 만들기 위해 다음 샘플 Resource Manager 템플릿을 사용할 수 있습니다.

Azure Portal 이외의 수단을 통해 만들어진 로그에 대한 메트릭 경고의 경우 메트릭 경고를 만들기 전에 이러한 샘플 템플릿을 사용하여 scheduledQueryRules 기반 로그-메트릭 변환 규칙을 만들 수 있습니다. 그렇지 않으면 로그에 메트릭 경고에 대한 데이터가 없습니다.

정적 임계값을 사용한 로그 메트릭 경고

다음 샘플 템플릿에서 정적 임계값에 대한 메트릭 경고 만들기는 scheduledQueryRules를 통해 로그에서 메트릭을 추출하기 위한 성공적인 규칙 만들기에 따라 달라집니다.

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

이전 JSON을 metricfromLogsAlertStatic.json으로 저장하면 Resource Manager 템플릿을 기반으로 만들기 위해 이를 매개 변수 JSON 파일과 결합할 수 있습니다. 샘플 매개 변수 JSON 파일은 다음과 같습니다.

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

이전 매개 변수 파일을 metricfromLogsAlertStatic.parameters.json으로 저장했다고 가정하면 Azure Portal에서 만들기 위한 Resource Manager 템플릿을 사용하여 로그에 대한 메트릭 경고를 만들 수 있습니다.

또는 다음 Azure PowerShell 명령을 사용할 수 있습니다.

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

또는 Azure CLI를 사용하여 Resource Manager 템플릿을 배포할 수 있습니다.

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

동적 임계값을 사용한 로그 메트릭 경고

다음 샘플 템플릿에서 동적 임계값에 대한 메트릭 경고 만들기는 scheduledQueryRules를 통해 로그에서 메트릭을 추출하기 위한 성공적인 규칙 만들기에 따라 달라집니다.

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

이전 JSON을 metricfromLogsAlertDynamic.json으로 저장하면 Resource Manager 템플릿을 기반으로 만들기 위해 매개 변수 JSON 파일과 결합할 수 있습니다. 샘플 매개 변수 JSON 파일은 다음과 같습니다.

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

앞의 매개 변수 파일을 metricfromLogsAlertDynamic.parameters.json으로 저장했다고 가정하면 Azure Portal을 만들기 위한 Resource Manager 템플릿을 사용하여 로그에 대한 메트릭 경고를 만들 수 있습니다.

또는 다음 Azure PowerShell 명령을 사용할 수 있습니다.

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

또는 Azure CLI를 사용하여 Resource Manager 템플릿을 배포할 수 있습니다.

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