Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Расширение диагностики Azure предоставляет возможности мониторинга и диагностики на виртуальной машине Azure под управлением Windows. Эти возможности можно включить на виртуальной машине, включив расширение как часть шаблона Azure Resource Manager. Дополнительные сведения о том, как включить любое расширение в шаблон виртуальной машины, см. в статье "Создание шаблонов Azure Resource Manager с помощью расширений виртуальных машин". В этой статье описывается, как добавить расширение диагностики Azure в шаблон виртуальной машины Windows.
Это важно
Миграция с расширения диагностики Azure
Диагностическое расширение Azure будет прекращено 31 марта 2026 г. После этой даты корпорация Майкрософт больше не будет предоставлять поддержку расширения диагностики Azure.
Чтобы обеспечить постоянную поддержку и доступ к новым функциям, необходимо перенести расширения диагностики Azure для Linux (LAD) и Windows (WAD) в агент Azure Monitor, который может собирать одни и те же данные и отправлять их в несколько назначений, включая рабочие области Log Analytics, Центры событий Azure и службу хранилища Azure. Удалите LAD или WAD после настройки агента Azure Monitor, чтобы избежать дублирования данных.
В качестве альтернативы хранилищу следует отправлять данные в таблицу с вспомогательным планом в рабочей области Log Analytics для эффективного ведения журнала.
Чтобы проверить, какие расширения установлены на одной виртуальной машине, выберите "Расширения и приложения " в разделе "Параметры " на виртуальной машине. Чтобы просмотреть расширения, установленные на всех виртуальных машинах в подписках, где у вас есть доступ, используйте следующий запрос в Azure Resource Graph:
resources
| where type contains "extension"
| extend parsedProperties = parse_json(properties)
| extend publisher = tostring(parsedProperties.publisher)
| project-away parsedProperties
| where publisher == "Microsoft.Azure.Diagnostics"
| distinct id
Это приводит к следующим результатам:
Замечание
Попробуйте использовать виртуальную машину для ускорения диагностики. Рекомендуется запустить Ассистент виртуальных машин для Windows или Ассистент виртуальных машин для Linux. Эти средства диагностики на основе скриптов помогают выявить распространенные проблемы, влияющие на гостевой агент виртуальной машины Azure и общую работоспособность виртуальных машин.
Если у вас возникли проблемы с производительностью виртуальных машин, перед обращением в службу поддержки запустите эти средства.
Добавление расширения диагностики Azure в определение ресурса виртуальной машины
Чтобы включить расширение диагностики на виртуальной машине Windows, необходимо добавить расширение в качестве ресурса виртуальной машины в шаблон Resource Manager.
Для простой виртуальной машины на основе Resource Manager добавьте конфигурацию расширения в массив ресурсов для виртуальной машины:
"resources": [
{
"name": "Microsoft.Insights.VMDiagnosticsSettings",
"type": "extensions",
"location": "[resourceGroup().location]",
"apiVersion": "2015-06-15",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
],
"tags": {
"displayName": "AzureDiagnostics"
},
"properties": {
"publisher": "Microsoft.Azure.Diagnostics",
"type": "IaaSDiagnostics",
"typeHandlerVersion": "1.5",
"autoUpgradeMinorVersion": true,
"settings": {
"xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), variables('vmName'), variables('wadcfgxend')))]",
"storageAccount": "[parameters('existingdiagnosticsStorageAccountName')]"
},
"protectedSettings": {
"storageAccountName": "[parameters('existingdiagnosticsStorageAccountName')]",
"storageAccountKey": "[listkeys(variables('accountid'), '2015-05-01-preview').key1]",
"storageAccountEndPoint": "https://core.windows.net"
}
}
}
]
Еще одним общим соглашением является добавление конфигурации расширения на корневом узле шаблона вместо определения его в узле ресурсов виртуальной машины. При таком подходе необходимо явно указать иерархическое отношение между расширением и виртуальной машиной со значениями имени и типа . Рассмотрим пример.
"name": "[concat(variables('vmName'),'Microsoft.Insights.VMDiagnosticsSettings')]",
"type": "Microsoft.Compute/virtualMachines/extensions",
Расширение всегда связано с виртуальной машиной, вы можете напрямую определить его в узле ресурса виртуальной машины или определить его на базовом уровне и использовать соглашение об именовании иерархии для связывания его с виртуальной машиной.
Для наборов масштабируемых виртуальных машин конфигурация расширений указана в свойстве extensionProfile профиля VirtualMachineProfile.
Свойство издателя со значением Microsoft.Azure.Diagnostics и свойством типа со значением IaaSDiagnostics однозначно определяет расширение диагностики Azure.
Значение свойства name можно использовать для ссылки на расширение в группе ресурсов. Настройка в значении Microsoft.Insights.VMDiagnosticsSettings позволяет его легко идентифицировать на портале Azure, обеспечивая правильное отображение диаграмм мониторинга в этом портале.
TypeHandlerVersion указывает версию расширения, которое вы хотите использовать. При установке autoUpgradeMinorVersion в значение true гарантируется получение последней доступной минорной версии расширения. Настоятельно рекомендуется всегда устанавливать параметр autoUpgradeMinorVersion в значение true, чтобы вы могли использовать последнее доступное расширение диагностики со всеми новыми функциями и исправлениями ошибок.
Элемент settings содержит свойства конфигураций для расширения, которое может быть задано и прочитано обратно из расширения (иногда называется общедоступной конфигурацией). Свойство xmlcfg содержит конфигурацию на основе XML для журналов диагностики, счетчиков производительности и т. д., собранных агентом диагностики. Дополнительные сведения о самой схеме xml см. в схеме конфигурации диагностики . Распространенная практика заключается в том, чтобы сохранить фактическую конфигурацию XML в качестве переменной в шаблоне Azure Resource Manager, а затем объединить и закодировать их, чтобы задать значение xmlcfg. Подробнее о том, как хранить xml в переменных, см. в разделе о переменных конфигурации диагностики. Свойство storageAccount указывает имя учетной записи хранения, в которую передаются диагностические данные.
Свойства в protectedSettings (иногда называются частной конфигурацией) могут быть заданы, но не могут быть прочитаны обратно после установки. Недоступность для чтения protectedSettings делает его полезным для хранения секретов, таких как ключ учетной записи хранения, куда записываются диагностические данные.
Указание учетной записи хранения диагностики в качестве параметров
В приведенном выше фрагменте расширения диагностики предполагается, что используются два параметра, existingdiagnosticsStorageAccountName и existingdiagnosticsStorageResourceGroup, чтобы указать учетную запись хранения, в которой сохраняются данные диагностики. Указание учетной записи хранения диагностики в качестве параметра позволяет легко изменять учетную запись хранения диагностики в разных средах, например использовать другую учетную запись хранения диагностики для тестирования и другую для рабочего развертывания.
"existingdiagnosticsStorageAccountName": {
"type": "string",
"metadata": {
"description": "The name of an existing storage account to which diagnostics data is transfered."
}
},
"existingdiagnosticsStorageResourceGroup": {
"type": "string",
"metadata": {
"description": "The resource group for the storage account specified in existingdiagnosticsStorageAccountName"
}
}
Рекомендуется указать учетную запись хранения диагностики в другой группе ресурсов, отличной от группы ресурсов для виртуальной машины. Группа ресурсов может рассматриваться как единица развертывания с собственным временем существования, виртуальная машина может быть развернута и повторно развернута, так как новые обновления конфигураций вносятся в него, но вы можете продолжить хранение диагностических данных в той же учетной записи хранения в этих развертываниях виртуальных машин. Наличие учетной записи хранения в другом ресурсе позволяет учетной записи хранения принимать данные из различных развертываний виртуальных машин, что упрощает устранение неполадок в различных версиях.
Замечание
Если вы создаете шаблон виртуальной машины Windows в Visual Studio, учетная запись хранения по умолчанию может быть настроена на использование той же учетной записи, куда загружается виртуальный жесткий диск виртуальной машины. Это позволяет упростить начальную настройку виртуальной машины. Подвергните шаблон рефакторингу, чтобы использовать другой аккаунт хранения, который можно передать в качестве параметра.
Переменные конфигурации диагностики
Приведенный выше фрагмент кода расширения диагностики json определяет переменную accountid , чтобы упростить получение ключа учетной записи хранения для хранилища диагностики:
"accountid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/',parameters('existingdiagnosticsStorageResourceGroup'), '/providers/','Microsoft.Storage/storageAccounts/', parameters('existingdiagnosticsStorageAccountName'))]"
Свойство xmlcfg для расширения диагностики определяется с помощью нескольких переменных, которые объединяются вместе. Значения этих переменных находятся в XML, поэтому их необходимо правильно экранировать при настройке переменных JSON.
В следующем примере описывается xml-файл конфигурации диагностики, который собирает стандартные счетчики производительности уровня системы, а также некоторые журналы событий Windows и журналы инфраструктуры диагностики. Он был экранирован и отформатирован правильно, чтобы конфигурация могла быть вставлена непосредственно в раздел переменных шаблона. См. схему конфигурации диагностики для более читаемого примера xml-файла конфигурации.
"wadlogs": "<WadCfg> <DiagnosticMonitorConfiguration overallQuotaInMB=\"4096\" xmlns=\"http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration\"> <DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter=\"Error\"/> <WindowsEventLog scheduledTransferPeriod=\"PT1M\" > <DataSource name=\"Application!*[System[(Level = 1 or Level = 2)]]\" /> <DataSource name=\"Security!*[System[(Level = 1 or Level = 2)]]\" /> <DataSource name=\"System!*[System[(Level = 1 or Level = 2)]]\" /></WindowsEventLog>",
"wadperfcounters1": "<PerformanceCounters scheduledTransferPeriod=\"PT1M\"><PerformanceCounterConfiguration counterSpecifier=\"\\Processor(_Total)\\% Processor Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU utilization\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor(_Total)\\% Privileged Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU privileged time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor(_Total)\\% User Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU user time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor Information(_Total)\\Processor Frequency\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"CPU frequency\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\System\\Processes\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Processes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Process(_Total)\\Thread Count\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Threads\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Process(_Total)\\Handle Count\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Handles\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\% Committed Bytes In Use\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Memory usage\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\Available Bytes\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\Committed Bytes\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory committed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\Commit Limit\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory commit limit\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\% Disk Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk active time\" locale=\"en-us\"/></PerformanceCounterConfiguration>",
"wadperfcounters2": "<PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\% Disk Read Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk active read time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\% Disk Write Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk active write time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Transfers/sec\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk operations\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Reads/sec\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk read operations\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Writes/sec\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk write operations\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Bytes/sec\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk speed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Read Bytes/sec\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk read speed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Write Bytes/sec\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk write speed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\LogicalDisk(_Total)\\% Free Space\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk free space (percentage)\" locale=\"en-us\"/></PerformanceCounterConfiguration></PerformanceCounters>",
"wadcfgxstart": "[concat(variables('wadlogs'), variables('wadperfcounters1'), variables('wadperfcounters2'), '<Metrics resourceId=\"')]",
"wadmetricsresourceid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name , '/providers/', 'Microsoft.Compute/virtualMachines/')]",
"wadcfgxend": "\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/><MetricAggregation scheduledTransferPeriod=\"PT1M\"/></Metrics></DiagnosticMonitorConfiguration></WadCfg>"
Xml-узел определения метрик в приведенной выше конфигурации является важным элементом конфигурации, так как определяет, как счетчики производительности, определенные ранее в узле PerformanceCounter xml, агрегируются и хранятся.
Это важно
Эти метрики управляют диаграммами мониторинга и оповещениями на портале Azure. Узел метрик с идентификатором ресурса и metricAggregation должен быть включен в конфигурацию диагностики для виртуальной машины, если вы хотите просмотреть данные мониторинга виртуальных машин на портале Azure.
В следующем примере показан xml для определений метрик:
<Metrics resourceId="/subscriptions/subscription().subscriptionId/resourceGroups/resourceGroup().name/providers/Microsoft.Compute/virtualMachines/vmName">
<MetricAggregation scheduledTransferPeriod="PT1H"/>
<MetricAggregation scheduledTransferPeriod="PT1M"/>
</Metrics>
Атрибут resourceID однозначно идентифицирует виртуальную машину в подписке. Обязательно используйте функции подписки() и resourceGroup(), чтобы шаблон автоматически обновлял эти значения на основе подписки и группы ресурсов, в которую выполняется развертывание.
Если вы создаете несколько виртуальных машин в цикле, необходимо заполнить значение resourceID функцией copyIndex(), чтобы правильно различать каждую отдельную виртуальную машину. Значение xmlCfg можно обновить для поддержки следующего:
"xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), concat(parameters('vmNamePrefix'), copyindex()), variables('wadcfgxend')))]",
Значение MetricAggregation PT1M и PT1H означает агрегирование за минуту и агрегирование в течение часа соответственно.
Таблицы WADMetrics в хранилище
В вышеуказанной настроечной конфигурации метрик создаются таблицы в учетной записи средства хранения диагностики со следующими соглашениями об именовании:
- WADMetrics: стандартный префикс для всех таблиц WADMetrics
- PT1H или PT1M: указывает, что таблица содержит статистические данные в течение 1 часа или 1 минуты
- P10D: означает, что таблица содержит данные в течение 10 дней после начала сбора данных в таблице
- V2S: строковая константа
- yymmd: дата начала сбора данных в таблице
Пример: WADMetricsPT1HP10DV2S2015108 содержит данные метрик, агрегированные в течение часа в течение 10 дней, начиная с 11 ноября 2015 г.
Каждая таблица WADMetrics содержит следующие столбцы:
-
PartitionKey: ключ секции создается на основе значения resourceID для уникальной идентификации ресурса виртуальной машины. Например:
002Fsubscriptions:<subscriptionID>:002FresourceGroups:002F<ResourceGroupName>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmName> -
RowKey: соответствует формату
<Descending time tick>:<Performance Counter Name>. Вычисление нисходящих временных тиков выполняется как разность между максимальным количеством временных тиков и временем начала периода агрегации. Например, если пример периода начался с 10 ноября 2015 г. и 00:00Hrs(UTC), то вычисление будет следующим:DateTime.MaxValue.Ticks - (new DateTime(2015,11,10,0,0,0,DateTimeKind.Utc).Ticks)Для производительности доступных байтов счетчик ключа строки выглядит следующим образом:2519551871999999999__:005CMemory:005CAvailable:0020Bytes - CounterName: имя счетчика производительности. Это соответствует counterSpecifier, определенному в XML конфигурации.
- Максимум: максимальное значение счетчика производительности за период агрегирования.
- Минимальное значение: минимальное значение счетчика производительности за период агрегирования.
- Итог: сумма всех значений счетчика производительности, сообщаемая за период агрегирования.
- Число: общее количество значений, сообщаемых для счетчика производительности.
- Среднее: среднее (общее или число) счетчика производительности за период агрегирования.
Дальнейшие шаги
- Полный шаблон примера виртуальной машины Windows с расширением диагностики смотрите в vm-monitoring-diagnostics-extension
- Развертывание шаблона Azure Resource Manager с помощью Azure PowerShell или командной строки Azure
- Дополнительные сведения о создании шаблонов Azure Resource Manager