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

Применимо к:База данных 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. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Важно!

Модуль PowerShell Azure Resource Manager по-прежнему поддерживается базой данных SQL Azure, но вся будущая разработка сосредоточена на модуле Az.Sql. Сведения об этих командлетах см. в разделе AzureRM.Sql. Аргументы команд в модулях Az и AzureRm практически идентичны.

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

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

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

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

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

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

  2. Щелкните + Создать ресурс в верхнем левом углу.

  3. Введите в строку поиска Automation (нажмите клавишу "ВВОД").

  4. Щелкните приложение Automation в результатах поиска.

    Adding Azure automation

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

  6. Укажите необходимые сведения: введите имя этой учетной записи службы автоматизации, выберите идентификатор подписки Azure и ресурсы Azure для выполнения сценария PowerShell.

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

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

Совет

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

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

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

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

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

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

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

  1. Перейдите к учетной записи службы автоматизации Azure, созданной на предыдущем шаге.

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

  3. Чтобы добавить новый модуль runbook, щелкните пункт меню + Добавить runbook, а затем щелкните Быстрое создание — Создать новый runbook.

  4. В области Runbook введите имя runbook (в данном примере — AutomaticTuningEmailAutomation), выберите тип runbook PowerShell, а затем введите описание этого runbook, чтобы пояснить его назначение.

  5. Нажмите кнопку Создать, чтобы завершить создание runbook.

    Add Azure automation runbook

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

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

В заголовке предоставленного сценария PowerShell необходимо заменить <SUBSCRIPTION_ID_WITH_DATABASES> своим идентификатором подписки Azure. Чтобы узнать, как получить идентификатор подписки Azure, прочитайте раздел Getting your Azure Subscription GUID (new portal) (Получение 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.

В основной области runbook можно нажать кнопку Запустить, чтобы протестировать сценарий. Щелкните Выходные данные для просмотра результатов выполнения сценария. Эти выходные данные будут отображаться в получаемых электронных сообщениях. На следующем снимке экрана можно увидеть пример выходных данных сценария.

Run view automatic tuning recommendations with Azure Automation

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

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

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

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

  • Azure Automation - Create job (Служба автоматизации Azure — создание задания). Используется для выполнения сценария PowerShell для получения рекомендаций по автоматической настройке, содержащегося в runbook службы автоматизации Azure.
  • Azure Automation - Get job output (Служба автоматизации Azure — получение выходных данных задания). Используется для получения выходных данных выполненного сценария PowerShell.
  • Office 365 Outlook – Send an email (Outlook Office 365 — отправка электронных сообщений). Используется для отправки электронного сообщения. Электронные сообщения отправляются с помощью рабочей или учебной учетной записи пользователя, создавшего поток.

Чтобы узнать больше о возможностях Microsoft Power Automate, прочитайте статью Начало работы с Microsoft Power Automate.

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

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

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

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

    • Выберите + Новый шаг, затем — Добавить действие в области повторяющегося потока.
    • В поле поиска введите automation и выберите Azure Automation – Create job (Служба автоматизации Azure — создание задания) в результатах поиска.
    • В области "Создание задания" настройте свойства задания. Для этой конфигурации потребуются сведения об идентификаторе подписки Azure, группе ресурсов и учетной записи службы автоматизации, сохраненные ранее в области учетной записи службы автоматизации. Чтобы узнать больше о параметрах, доступных в этом разделе, изучите раздел Служба автоматизации Azure.
    • Завершите создание этого действия, щелкнув Сохранить поток.
  2. Создание действия для получения выходных данных выполненного сценария PowerShell

    • Выберите + Новый шаг, затем — Добавить действие в области повторяющегося потока.
    • В поле поиска введите automation и выберите Azure Automation – Get job output (Служба автоматизации Azure — получение выходных данных задания) в результатах поиска. Чтобы узнать больше о параметрах, доступных в этом разделе, изучите раздел Служба автоматизации Azure.
    • Заполните обязательные поля (как при создании предыдущего задания). Укажите идентификатор подписки Azure, группу ресурсов и учетную запись службы автоматизации (введенную в области учетной записи службы автоматизации).
    • Щелкните в поле Идентификатор задания, чтобы отобразить меню Динамическое содержимое. В этом меню выберите параметр Идентификатор задания.
    • Завершите создание этого действия, щелкнув Сохранить поток.
  3. Создание действия для отправки электронных сообщений с помощью интеграции Office 365

    • Выберите + Новый шаг, затем — Добавить действие в области повторяющегося потока.
    • В поле поиска введите send an email и выберите Office 365 Outlook – Send an email (Outlook Office 365 — отправка электронных сообщений) в результатах поиска.
    • В поле Кому введите адрес электронной почты, на который необходимо отправлять уведомления по электронной почте.
    • В поле Тема введите тему электронного сообщения, например "Уведомление о рекомендациях по автоматической настройке".
    • Щелкните в поле Текст, чтобы отобразить меню Динамическое содержимое. В этом меню в разделе Получение выходных данных задания выберите Содержимое.
    • Завершите создание этого действия, щелкнув Сохранить поток.

Совет

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

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

View automatic tuning email notifications flow

Чтобы проверить поток, щелкните Выполнить в правом верхнем углу области потока.

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

Running flow for automatic tuning email notifications

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

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

Sample email output from automatic tuning email notifications

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

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

Следующие шаги