Управление несколькими параметрами диагностики Azure с помощью Azure CLI вместо PowerShell.

Опубликовано: 3 Марта, 2023
Управление несколькими параметрами диагностики Azure с помощью Azure CLI вместо PowerShell.

Microsoft Azure интегрировала всю платформу мониторинга в единое место и интерфейс. Мы немного рассмотрели Azure Monitor в предыдущей статье на TechGenix. В настоящее время мы можем настроить параметры диагностики Azure для подавляющего большинства ресурсов, используя согласованный интерфейс, и это можно сделать из свойств данного ресурса или с помощью функции монитора. При использовании нескольких параметров диагностики Azure мы можем отправлять диагностические данные либо в , либо , либо .

В этой статье вы увидите, что у нас есть небольшая проблема с настройкой нескольких диагностических параметров Azure с помощью PowerShell, поэтому мы собираемся понять проблему и использовать альтернативное решение с помощью Azure CLI для устранения текущего ограничения.

Понимание проблемы

Обычно, прежде чем пытаться автоматизировать и использовать PowerShell, мне нравится проверять функцию с помощью Azure Portal, а после понимания того, как она работает, я начинаю создавать логику для реализации тех же настроек с помощью PowerShell. В зависимости от сценария нам нужно добавить такие функции, как файлы CSV, или добавить некоторую логику, чтобы реализовать решение.

Мы можем использовать любой ресурс, чтобы начать играть с функцией . В этой статье мы собираемся использовать группы безопасности сети (NSG), и в свойствах ресурса мы можем щелкнуть журналы диагностики и в колонке справа мы можем добавить несколько параметров диагностики. В приведенном ниже примере настроены два диагностических параметра, где одна информация отправляется в Log Analytics, а другая — в учетные записи хранения.

В каждом параметре диагностики администратор облака может выбрать одну из доступных целей для получения диагностических данных, а именно и/или . В приведенном ниже примере у нас есть журналы NetworkSecurityGroupEvent, которые отправляются в концентратор событий под названием ops.

Примечание. Если мы выбираем более одного целевого объекта в одних и тех же диагностических настройках, мы отправляем один и тот же набор журналов всем определенным целевым объектам. Если мы хотим, чтобы разные журналы отправлялись на конкретную цель, использование нескольких диагностических настроек — это то, что нужно, поскольку они обеспечивают эту гибкость.

Это здорово — в теории. Нам просто нужно получить командлет PowerShell и начать настраивать параметры диагностики для любого данного ресурса, верно? Ну, вот в чем проблема. На данном этапе командлеты PowerShell используют старую версию API, которая не позволяет управлять несколькими параметрами диагностики с помощью PowerShell.

Для наглядности предположим, что мы хотим добавить параметры диагностики с помощью приведенного ниже командлета. Мы поймем, что мы не можем определить имя, а это значит, что любая конфигурация PowerShell всегда будет идти к диагностическому параметру, называемому сервисом, — и это не позволяет нам создавать дополнительные.

Set-AzureRmDiagnosticSetting -ResourceId "/subscriptions/xxx/resourceGroups/AP-RG-Diag/providers/Microsoft.Network/networkSecurityGroups/NSGTest6" -Enabled $True -Categories "NetworkSecurityGroupEvent" -StorageAccountId "/subscriptions/xxx/resourceGroups/AP-RG-Diag/providers/Microsoft.Storage/storageAccounts/apstgenterprises"

Я упомянул, что версия API является виновником текущей проблемы. Вы можете спросить, как мне узнать, какой API использует мой командлет PowerShell в любой момент времени? Это просто. Просто добавьте -debug, и он расскажет вам, что происходит за кулисами. В приведенном ниже примере мы видим, что используется версия API 2016-09-01.

Если вы выполните поиск поставщика в документации Microsoft, мы увидим, что текущая версия API для этого же поставщика — 2017-05-01-preview. Вы можете проверить это здесь.

Это своего рода тупик при попытке использовать PowerShell для управления несколькими параметрами диагностики. Однако у нас есть несколько интерфейсов для управления Azure. Azure CLI спешит на помощь! Моя следующая попытка — использовать Azure CLI (кроссплатформенная командная строка), которая работает в macOS, Linux, Windows и в Azure Cloud Shell.

Моей первой попыткой было прочитать диагностические данные из любого заданного ресурса (в нашем случае из той же NSG, которую мы использовали для обеспечения согласованности результатов между интерфейсами), и при использовании Azure CLI мы заметили, что вывод команды ниже завел все настроенные параметры, что является хорошим признаком.

az monitor diagnostic-settings list --resource "/subscriptions/xxx/resourceGroups/AP-RG-Diag/providers/Microsoft.Network/networkSecurityGroups/NSGTest6"

На всякий случай добавим отладку в ту же команду и проверим, какая версия API используется. К моему удивлению, это последняя версия, поэтому мы можем использовать этот интерфейс для управления несколькими диагностическими настройками.

Управление параметрами диагностики Azure с помощью Azure CLI

Теперь, когда мы определились с интерфейсом для этой задачи, мы можем изучить доступные команды, которые помогут нам управлять параметрами диагностики Azure с помощью Azure CLI. Одно различие между PowerShell и Azure CLI заключается в том, что конфигурация журнала в PowerShell выполняется с помощью параметров в командной строке. Однако в Azure CLI это код JSON. Хороший совет — сначала настроить его на портале Azure, а затем перечислить ресурс в Azure CLI. На выходе будет предоставлен файл JSON, который необходимо использовать при определении параметров диагностики. Сравните этот вывод с параметром, который вы указываете, и они должны быть одинаковыми.

Любая конфигурация потребует для объекта в качестве параметра. Используя Azure CLI, мы можем запустить список ресурсов az — имя <имя>, и на выходе будет формат JSON для данного ресурса.

Наличие ResourceID любого заданного объекта упрощает получение параметров диагностики. Следующая команда показывает, как получить информацию о параметрах диагностики.

az monitor diagnostic-settings list --resource "/subscriptions/xxx/resourceGroups/AP-RG-Diag/providers/Microsoft.Network/networkSecurityGroups/NSGTest6"

Если вам нужно добавить параметр диагностики с помощью концентраторов событий, вот формат, который мы можем использовать для перемещения журналов, связанных с , в концентратор событий с именем ops. Имя диагностических настроек — DiagEventHub. Все элементы, выделенные жирным шрифтом, являются статическими и должны быть добавлены как часть команды.

az monitor diagnostic-settings create -n DiagEventHub --resource "/subscriptions/xxx/resourceGroups/RGName/providers/Microsoft.KeyVault/vaults/KeyVault000000" --event-hub-rule "/subscriptions/xxx/resourceGroups/RG-EH/providers/Microsoft.EventHub/namespaces/EHName/authorizationrules/RootManageSharedAccessKey" --event-hub ops --logs "[{"category":"AuditEvent","Enabled":true}]"

Если мы хотим добавить диагностический параметр в Log Analytics, можно использовать следующую команду:

az monitor diagnostic-settings create -n DiagLogAnalytics --resource "/subscriptions/xxx/resourceGroups/RG-Name/providers/Microsoft.KeyVault/vaults/KV0000" --workspace "/subscriptions/xxx/resourcegroups/RG-OMS/providers/microsoft.operationalinsights/workspaces/LogAnalytics000" --logs "[{"category":"AuditEvent","Enabled":true}]"

Если вместо этого вы хотите настроить учетную запись хранения, мы можем использовать следующую команду для определенной учетной записи хранения. В этом примере мы настраиваем дополнительный диагностический параметр под названием DiagStorage. Одна вещь, которую можно настроить с помощью учетной записи хранения, — это количество дней для хранения информации (эту информацию можно найти в последней части команды).

az monitor diagnostic-settings create -n DiagStorage --resource "/subscriptions/xxx/resourceGroups/RGName/providers/Microsoft.Network/networkSecurityGroups/NSGTest6" --storage-account "/subscriptions/xxx/resourceGroups/RGName/providers/Microsoft.Storage/storageAccounts/storageaccountname" --logs "[{"category":"NetworkSecurityGroupRuleCounter","Enabled":true,"retentionPolicy":{"days":"6","enabled":true}}]"

Методом проб и ошибок

Microsoft Azure динамична и постоянно получает обновления и новые функции, и иногда нам нужно поиграть с доступными интерфейсами, чтобы внедрить желаемое решение сейчас, а не ждать обновления.

В этой статье показан простой сценарий, в котором доступные командлеты PowerShell не использовали последнюю версию API, но мы смогли завершить задачу, чтобы включить несколько параметров диагностики Azure с помощью Azure CLI.