Поделиться через


Уведомления по электронной почте об автоматической настройке

Применимо к:База данных SQL AzureУправляемый экземпляр SQL Azure

Рекомендации по настройке базы данных SQL Azure создаются автоматической настройкой базы данных SQL Azure. Это решение постоянно отслеживает и анализирует рабочие нагрузки баз данных, предоставляя для каждой отдельной базы данных специализированные рекомендации по настройке, связанные с созданием индексов, удалением индексов и оптимизацией планов выполнения запросов.

Рекомендации по автоматической настройке базы данных SQL Azure можно просматривать на портале Azure, получать с помощью вызовов REST API или с помощью команд T-SQL и PowerShell . Эта статья основана на использовании сценария PowerShell для получения рекомендаций по автоматической настройке.

Примечание.

В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы приступить к работе с модулем Az PowerShell, см. статью "Установка Azure PowerShell". Сведения о миграции в модуль Az PowerShell см. в статье "Миграция Azure PowerShell из AzureRM в Az".

Внимание

Модуль PowerShell Azure Resource Manager (AzureRM) был признан устаревшим 29 февраля 2024 г. Все будущие разработки должны использовать модуль Az.Sql. Пользователям рекомендуется перейти с AzureRM на модуль Az PowerShell, чтобы обеспечить продолжение поддержки и обновлений. Модуль AzureRM больше не обслуживается и не поддерживается. Аргументы команд в модуле Az PowerShell и в модулях AzureRM существенно идентичны. Дополнительные сведения о совместимости см. в статье "Знакомство с новым модулем Az PowerShell".

Автоматизация уведомлений по электронной почте о рекомендациях по автоматической настройке

Приведенное ниже решение автоматизирует отправку уведомлений по электронной почте, содержащих рекомендации по автоматической настройке. Описанное решение состоит из автоматизации выполнения скрипта PowerShell для получения рекомендаций по настройке с помощью службы автоматизации Azure и автоматизации планирования задания доставки электронной почты с помощью Microsoft Power Automate.

Создание учетной записи службы автоматизации Azure

Чтобы использовать службу автоматизации Azure, сначала следует создать учетную запись службы автоматизации и настроить для нее ресурсы Azure, чтобы выполнять сценарий PowerShell. Дополнительные сведения о службе автоматизации Azure и ее возможностях см. в статье "Приступая к работе с службой автоматизации Azure".

Выполните следующие действия, чтобы создать учетную запись службы автоматизации Azure, выбрав и настроив приложение Automation из Azure Marketplace:

  1. Войдите на портал Azure.

  2. Выберите +Создать ресурс в меню ресурсов.

  3. Поиск автоматизации.

  4. Выберите приложение службы автоматизации в результатах поиска.

    Снимок экрана: поиск службы автоматизации на портале Azure.

  5. В области "Создание учетной записи службы автоматизации" нажмите кнопку "Создать".

  6. Выберите подписку и группу ресурсов, которая будет использоваться для выполнения скрипта PowerShell. Введите имя этой учетной записи службы автоматизации.

  7. Выберите "Дополнительно". Убедитесь, что системное назначение установлено, чтобы было создано управляемое удостоверение, назначенное системой (SAMI), для аутентификации в ресурсов Azure.

  8. Выберите теги. Рассмотрите возможность использования тегов Azure. Например, тег "Владелец" или "CreatedBy", чтобы определить, кто создал ресурс, и тег "Среда", чтобы определить, находится ли этот ресурс в рабочей среде, разработке и т. д. Дополнительные сведения см. в статье "Разработка стратегии именования и тегов для ресурсов Azure".

  9. Выберите "Рецензирование и создание".

  10. Завершите создание учетной записи службы автоматизации, нажав кнопку "Создать".

Назначение ролей Azure для учетной записи управляемого удостоверения, присваиваемого системой

Учетная запись службы автоматизации может использовать управляемое удостоверение, назначаемое системой, для получения маркеров для доступа к другим ресурсам, защищенным идентификатором Microsoft Entra ID, например Базой данных SQL Azure. Эти маркеры не представляют конкретного пользователя приложения. Они представляют само приложение, которое получает доступ к ресурсу. Например, в этом случае маркер представляет учетную запись службы автоматизации.

Перед созданием модуля Runbook службы автоматизации Azure важно предоставить соответствующий уровень разрешений учетной записи службы автоматизации, следуя принципу наименьших привилегий. При использовании управляемого удостоверения, назначаемого системой, добавление ролей участника базы данных SQL и участника SQL Server в SAMI достаточно для автоматизации задач базы данных SQL Azure. Для большинства сценариев, если автоматизация предназначена только для определенных баз данных, используйте область уровня группы ресурсов. Если она должна работать по всей подписке, используйте область уровня подписки.

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

$roleAssignmentParams = @{
     ObjectId = "<automation-Identity-object-id>"
     Scope = "/subscriptions/<subscription-id>"
     RoleDefinitionName = "SQL DB Contributor"
}

New-AzRoleAssignment @roleAssignmentParams

Чтобы добавить эти роли в управляемое удостоверение, назначаемое системой, на портале Azure, выполните следующие действия.

  1. Войдите на портал Azure.
  2. Найдите только что созданную учетную запись службы автоматизации Azure.
  3. В разделе "Параметры учетной записи" выберите "Удостоверение".
  4. В разделе "Разрешения" выберите поле "Назначения ролей Azure ".
  5. Выберите "Добавить назначение ролей" (предварительная версия).
  6. В раскрывающемся списке "Область" выберите набор ресурсов, которые применяет назначение роли: подписка, группа ресурсов, роль и область.
  7. В раскрывающемся списке ролей выберите роль участника базы данных SQL.
  8. Нажмите кнопку "Сохранить".

Повторите шаги из раздела "Добавление назначения роли", чтобы добавить роль SQL Server Contributor.

Совет

Запишите имя учетной записи службы автоматизации Azure, идентификатор подписки и ресурсы (например, скопировав и вставив их в Блокнот), введенные при создании приложения Automation. Эти сведения потребуются вам позже.

Если у вас несколько подписок Azure, для которых вы хотите использовать одинаковые параметры автоматизации, необходимо повторить эту процедуру для других подписок.

Обновление модулей службы автоматизации Azure

Скрипт PowerShell для получения рекомендации по автоматической настройке использует команды Get-AzResource и Get-AzSqlDatabaseRecommendedAction , для которых требуется модуль Azure версии 4 и выше.

Создание модуля runbook службы автоматизации Azure

Следующим шагом является создание модуля runbook в службе автоматизации Azure, содержащего сценарий PowerShell для получения рекомендаций по настройке.

Выполните приведенные ниже действия, чтобы создать runbook службы автоматизации Azure

  1. Перейдите к учетной записи службы автоматизации Azure, созданной на предыдущем шаге.
  2. В области учетной записи службы автоматизации выберите пункт меню Runbooks слева, чтобы создать модуль Runbook службы автоматизации Azure с помощью скрипта PowerShell. Чтобы узнать больше о создании руководств по автоматизации, см. Создание нового руководства по автоматизации.
  3. Чтобы добавить новый модуль Runbook, выберите пункт меню "+Добавить модуль Runbook ", а затем нажмите кнопку быстрого создания — создать модуль Runbook.
  4. В области Runbook введите имя модуля Runbook (в этом примере используется AutomaticTuningEmailAutomation ), выберите тип runbook в качестве PowerShell и напишите описание этого модуля Runbook, чтобы описать ее назначение.
  5. Нажмите кнопку "Создать ", чтобы завершить создание модуля Runbook.

Выполните следующие действия, чтобы загрузить сценарий PowerShell в созданный runbook.

  1. В области "Изменить Runbook PowerShell " выберите RUNBOOKS в дереве меню и разверните представление, пока не увидите имя модуля Runbook (в этом примере AutomaticTuningEmailAutomation). Выберите этот runbook.
  2. На первой строке редактора "Изменить Runbook PowerShell" (начиная с номера 1) скопируйте и вставьте следующий код скрипта PowerShell. Этот сценарий PowerShell предоставляется "как есть" и дает возможность приступить к работе. Измените его в соответствии со своими потребностями.

В заголовке предоставленного сценария PowerShell необходимо заменить <SUBSCRIPTION_ID_WITH_DATABASES> своим идентификатором подписки Azure. Сведения о том, как получить идентификатор подписки Azure, см. в статье "Получение GUID подписки Azure".

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

# PowerShell script to retrieve Azure SQL Database automatic tuning recommendations.
#
# Provided "as-is" with no implied warranties or support.
# The script is released to the public domain.
#
# Replace <SUBSCRIPTION_ID_WITH_DATABASES> in the header with your Azure subscription ID.
#
# Microsoft Azure SQL Database team, 2018-01-22.

# Set subscriptions : IMPORTANT – REPLACE <SUBSCRIPTION_ID_WITH_DATABASES> WITH YOUR SUBSCRIPTION ID
$subscriptions = ("<SUBSCRIPTION_ID_WITH_DATABASES>", "<SECOND_SUBSCRIPTION_ID_WITH_DATABASES>", "<THIRD_SUBSCRIPTION_ID_WITH_DATABASES>")

# Get credentials
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# Define the resource types
$resourceTypes = ("Microsoft.Sql/servers/databases")
$advisors = ("CreateIndex", "DropIndex");
$results = @()

# Loop through all subscriptions
foreach ($subscriptionId in $subscriptions) {
    Select-AzSubscription -SubscriptionId $subscriptionId
    $rgs = Get-AzResourceGroup

    # Loop through all resource groups
    foreach ($rg in $rgs) {
        $rgname = $rg.ResourceGroupName;

        # Loop through all resource types
        foreach ($resourceType in $resourceTypes) {
            $resources = Get-AzResource -ResourceGroupName $rgname -ResourceType $resourceType

            # Loop through all databases
            # Extract resource groups, servers and databases
            foreach ($resource in $resources) {
                $resourceId = $resource.ResourceId
                if ($resourceId -match ".*RESOURCEGROUPS/(?<content>.*)/PROVIDERS.*") {
                    $ResourceGroupName = $matches['content']
                }
                else {
                    continue
                }
                if ($resourceId -match ".*SERVERS/(?<content>.*)/DATABASES.*") {
                    $ServerName = $matches['content']
                }
                else {
                    continue
                }
                if ($resourceId -match ".*/DATABASES/(?<content>.*)") {
                    $DatabaseName = $matches['content']
                }
                else {
                    continue
                }

                # Skip if master
                if ($DatabaseName -eq "master") {
                    continue
                }

                # Loop through all automatic tuning recommendation types
                foreach ($advisor in $advisors) {
                    $recs = Get-AzSqlDatabaseRecommendedAction -ResourceGroupName $ResourceGroupName -ServerName $ServerName  -DatabaseName $DatabaseName -AdvisorName $advisor
                    foreach ($r in $recs) {
                        if ($r.State.CurrentValue -eq "Active") {
                            $object = New-Object -TypeName PSObject
                            $object | Add-Member -Name 'SubscriptionId' -MemberType Noteproperty -Value $subscriptionId
                            $object | Add-Member -Name 'ResourceGroupName' -MemberType Noteproperty -Value $r.ResourceGroupName
                            $object | Add-Member -Name 'ServerName' -MemberType Noteproperty -Value $r.ServerName
                            $object | Add-Member -Name 'DatabaseName' -MemberType Noteproperty -Value $r.DatabaseName
                            $object | Add-Member -Name 'Script' -MemberType Noteproperty -Value $r.ImplementationDetails.Script
                            $results += $object
                        }
                    }
                }
            }
        }
    }
}

# Format and output results for the email
$table = $results | Format-List
Write-Output $table

Нажмите кнопку "Сохранить", чтобы сохранить скрипт. Когда вы удовлетворены скриптом, выберите Опубликовать, чтобы опубликовать этот документ.

На главной панели runbook можно выбрать команду "Пуск " для тестирования скрипта. Выберите выходные данные для просмотра результатов выполняемого скрипта. Эти выходные данные будут отображаться в получаемых электронных сообщениях.

Обязательно измените содержимое, настроив сценарий PowerShell в соответствии со своими потребностями.

После выполнения указанных выше шагов в службу автоматизации Azure загружается сценарий PowerShell для получения рекомендаций по автоматической настройке. Следующим шагом является автоматизация и планирование задания доставки электронных сообщений.

Автоматизация заданий доставки электронных сообщений с помощью Microsoft Power Automate

Для завершения решения последним шагом является создание потока автоматизации в Microsoft Power Automate, состоящего из трех действий (заданий).

  • Azure Automation - Создать задание — используется для выполнения скрипта PowerShell для получения рекомендаций по автоматической настройке внутри служебной книги Azure Automation.
  • Azure Automation — получение выходных данных задания, которое используется для извлечения данных из выполненного скрипта PowerShell.
  • Office 365 Outlook — отправка сообщения электронной почты , используемая для отправки электронной почты. Электронные сообщения отправляются с помощью рабочей или учебной учетной записи пользователя, создавшего поток.

Дополнительные сведения о возможностях Microsoft Power Automate см. в статье "Начало работы с Microsoft Power Automate".

Для этого шага необходимо зарегистрироваться для учетной записи Microsoft Power Automate и войти в систему. Оказавшись в решении, выполните следующие действия, чтобы настроить новый поток:

  1. Доступ к элементу меню "Мои потоки ".
  2. В разделе "Мои потоки" выберите ссылку +Создать с нуля в верхней части страницы.
  3. Выберите ссылку для поиска сотен соединителей и триггеров.
  4. В поле поиска введите повторение и выберите расписание — повторение из результатов поиска, чтобы запланировать выполнение задания доставки электронной почты.
  5. В области "Повторение" в поле "Частота" выберите частоту планирования для выполнения этого потока. Например, можно настроить отправку автоматизированных электронных сообщений каждую минуту, час, день, неделю и т. д.

Следующим шагом является добавление трех заданий (создание, получение выходных данных и отправка электронной почты) в только что созданный повторяющийся поток. Чтобы добавить необходимые задания в поток, выполните следующие действия.

  1. Создайте действие для выполнения сценария PowerShell, который получает рекомендации по настройке.

    1. Выберите +Создать шаг, а затем добавьте действие в область потока повторения.
    2. В поле поиска введите автоматизацию и выберите службу автоматизации Azure — создать задание из результатов поиска.
    3. В области "Создание задания" настройте свойства задания. Для этой конфигурации вам потребуются сведения об идентификаторе подписки Azure, группе ресурсов и учетной записи службы автоматизации, ранее записанной на панели учетной записи службы автоматизации. Дополнительные сведения о параметрах, доступных в этом разделе, см. в статье "Автоматизация Azure — создание задания".
    4. Выберите "Сохранить поток".
  2. Создайте действие для получения выходных данных из выполняемого скрипта PowerShell.

    1. Выберите +Создать шаг, а затем добавьте действие в область потока повторения
    2. В поле поиска введите автоматизацию и выберите службу автоматизации Azure — получить выходные данные задания из результатов поиска. Дополнительные сведения о параметрах, доступных в этом разделе, см. в статье "Автоматизация Azure— получение выходных данных задания".
    3. Заполните обязательные поля (как при создании предыдущего задания). Укажите идентификатор подписки Azure, группу ресурсов и учетную запись службы автоматизации (введенную в области учетной записи службы автоматизации).
    4. Выберите внутри поля идентификатор задания для отображения меню динамического содержимого . В этом меню выберите параметр Job ID.
    5. Выберите "Сохранить поток".
  3. Создание действия для отправки электронных сообщений с помощью интеграции Office 365

    1. Выберите +Создать шаг, а затем добавьте действие в область потока повторения.
    2. В поле поиска введите сообщение электронной почты и выберите Office 365 Outlook — отправьте сообщение электронной почты из результатов поиска.
    3. В поле "To " введите адрес электронной почты, на который необходимо отправить уведомление.
    4. В поле "Тема" введите тему сообщения электронной почты, например "Уведомление о автоматической настройке рекомендаций по электронной почте".
    5. Выберите внутри поля Содержание, чтобы отобразить меню Динамического содержимого. В этом меню в разделе "Получение выходных данных задания" выберите "Содержимое".
    6. Выберите "Сохранить поток".

Совет

Чтобы отправлять автоматизированные электронные сообщения другим получателям, создайте отдельные потоки. В этих дополнительных потоках измените адрес электронной почты получателя в поле "To " и строку темы электронной почты в поле "Тема ". Создание новых модулей Runbook в службе автоматизации Azure с настраиваемыми скриптами PowerShell (например, с изменением идентификатора подписки Azure) позволяет дополнительно настраивать автоматизированные сценарии, например отправлять сообщения электронной почты отдельным получателям по рекомендациям по автоматической настройке для отдельных подписок.

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

Чтобы протестировать поток, нажмите кнопку "Запустить сейчас". Статистику выполнения автоматизированных заданий, отображающую успешность отправки уведомлений по электронной почте, можно просмотреть в области "Аналитика потока".

Область "Аналитика потоков" полезна для мониторинга успешного выполнения заданий и при необходимости для устранения неполадок. При устранении неполадок также может потребоваться просмотреть журнал выполнения сценария PowerShell, доступный в приложении службы автоматизации Azure.

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

Скриншот из Microsoft Outlook, показывающий пример письма, полученного из автоматических уведомлений по настройке электронной почты.

Изменяя параметры сценария PowerShell, можно настроить выходные данные и форматирование автоматизированных электронных сообщений в соответствии со своими потребностями.

Можно дополнительно настроить решение для создания уведомлений по электронной почте на основании определенного события настройки, отправляемых нескольким получателям, для нескольких подписок или баз данных. Это может зависеть от ваших конкретных сценариев.