Utilizar o PowerShell para monitorizar e dimensionar uma base de dados individual na Base de Dados SQL do Azure
Aplica-se a:Banco de Dados SQL do Azure
Este exemplo de script do PowerShell monitora as métricas de desempenho de um único banco de dados, dimensiona-o para um tamanho de computação maior e cria uma regra de alerta em uma das métricas de desempenho.
Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
Nota
Este artigo usa o módulo Azure Az PowerShell, que é o módulo PowerShell recomendado para interagir com o Azure. Para começar a utilizar o módulo Azure PowerShell, veja Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Utilizar o Azure Cloud Shell
O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.
Para iniciar o Azure Cloud Shell:
Opção | Exemplo/Ligação |
---|---|
Selecione Experimentar no canto superior direito de um bloco de código. A seleção de Experimente não copia automaticamente o código para o Cloud Shell. | |
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. | |
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. |
Para executar o código neste artigo no Azure Cloud Shell:
Inicie o Cloud Shell.
Selecione o botão Copiar num bloco de código para copiar o código.
Cole o código na sessão do Cloud Shell selecionando Ctrl+Shift V no Windows e Linux ou selecionando Cmd+Shift++V no macOS.
Selecione Introduzir para executar o código.
Se você optar por instalar e usar o PowerShell localmente, este tutorial exigirá o Az PowerShell 1.4.0 ou posterior. Se precisar de atualizar, veja Install Azure PowerShell module (Instalar o módulo do Azure PowerShell). Se estiver a executar localmente o PowerShell, também terá de executar o Connect-AzAccount
para criar uma ligação com o Azure.
Script de exemplo
# This script requires the following
# - Az.Resources
# - Az.Accounts
# - Az.Monitor
# - Az.Sql
# First, run Connect-AzAccount
# Set the subscription in which to create these objects. This is displayed on objects in the Azure portal.
$SubscriptionId = ''
# Set the resource group name and location for your server
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$location = "westus2"
# Set an admin login and password for your server
$adminSqlLogin = "SqlAdmin"
$password = (New-Guid).Guid # Generates a randomized GUID password.
# Set server name - the logical server name has to be unique in the system
$serverName = "server-$(Get-Random)"
# The sample database name
$databaseName = "mySampleDatabase"
# The ip address range that you want to allow to access your server via the firewall rule
$startIp = "0.0.0.0"
$endIp = "0.0.0.0"
# Set subscription
Set-AzContext -SubscriptionId $subscriptionId
# Create a new resource group
$resourceGroup = New-AzResourceGroup -Name $resourceGroupName -Location $location
# Create a new server with a system wide unique server name
$server = New-AzSqlServer -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminSqlLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
# Create a server firewall rule that allows access from the specified IP range
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
# Create a blank database with an S0 performance level
$database = New-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-RequestedServiceObjectiveName "S0" `
-SampleName "AdventureWorksLT"
# Monitor the DTU consumption on the database in 5 minute intervals
$MonitorParameters = @{
ResourceId = "/subscriptions/$($(Get-AzContext).Subscription.Id)/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/databases/$databaseName"
TimeGrain = [TimeSpan]::Parse("00:05:00")
MetricNames = "dtu_consumption_percent"
}
$metric = Get-AzMetric @monitorparameters
$metric.Data
# Scale the database performance to Standard S1
$database = Set-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $servername `
-DatabaseName $databasename `
-Edition "Standard" `
-RequestedServiceObjectiveName "S1"
# Set up an Alert rule using Azure Monitor for the database
# Add an Alert that fires when the pool utilization reaches 90%
# Objects needed: An Action Group Receiver (in this case, an email group), an Action Group, Alert Criteria, and finally an Alert Rule.
# Creates an new action group receiver object with a target email address.
$receiver = New-AzActionGroupReceiver `
-Name "my Sample Azure Admins" `
-EmailAddress "azure-admins-group@contoso.com"
# Creates a new or updates an existing action group.
$actionGroup = Set-AzActionGroup `
-Name "mysample-email-the-azure-admins" `
-ShortName "AzAdminsGrp" `
-ResourceGroupName $resourceGroupName `
-Receiver $receiver
# Fetch the created AzActionGroup into an object of type Microsoft.Azure.Management.Monitor.Models.ActivityLogAlertActionGroup
$actionGroupObject = New-AzActionGroup -ActionGroupId $actionGroup.Id
# Create a criteria for the Alert to monitor.
$criteria = New-AzMetricAlertRuleV2Criteria `
-MetricName "dtu_consumption_percent" `
-TimeAggregation Average `
-Operator GreaterThan `
-Threshold 90
# Create the Alert rule.
# Add-AzMetricAlertRuleV2 adds or updates a V2 (non-classic) metric-based alert rule.
Add-AzMetricAlertRuleV2 -Name "mySample_Alert_DTU_consumption_pct" `
-ResourceGroupName $resourceGroupName `
-WindowSize (New-TimeSpan -Minutes 1) `
-Frequency (New-TimeSpan -Minutes 1) `
-TargetResourceId "/subscriptions/$($(Get-AzContext).Subscription.Id)/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/databases/$databaseName" `
-Condition $criteria `
-ActionGroup $actionGroupObject `
-Severity 3 #Informational
<#
# Set up an alert rule using Azure Monitor for the database
# Note that Add-AzMetricAlertRule is deprecated. Use Add-AzMetricAlertRuleV2 instead.
Add-AzMetricAlertRule -ResourceGroup $resourceGroupName `
-Name "MySampleAlertRule" `
-Location $location `
-TargetResourceId "/subscriptions/$($(Get-AzContext).Subscription.Id)/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/databases/$databaseName" `
-MetricName "dtu_consumption_percent" `
-Operator "GreaterThan" `
-Threshold 90 `
-WindowSize $([TimeSpan]::Parse("00:05:00")) `
-TimeAggregationOperator "Average" `
-Action $(New-AzAlertRuleEmail -SendToServiceOwner)
#>
# Clean up deployment
# Remove-AzResourceGroup -ResourceGroupName $resourceGroupName
Nota
Para obter uma lista completa de métricas, consulte Métricas suportadas.
Gorjeta
Use Get-AzSqlDatabaseActivity para obter o status das operações de banco de dados e use Stop-AzSqlDatabaseActivity para cancelar uma operação de atualização de banco de dados.
Limpar a implementação
Use o comando a seguir para remover o grupo de recursos e todos os recursos associados a ele.
Remove-AzResourceGroup -ResourceGroupName $resourcegroupname
Explicação do script
Este script utiliza os seguintes comandos. Cada comando na tabela liga à documentação específica do comando.
Command | Notas |
---|---|
New-AzResourceGroup | Cria um grupo de recursos no qual todos os recursos são armazenados. |
New-AzSqlServer | Cria um servidor que hospeda um único banco de dados ou pool elástico. |
Get-AzMetric | Mostra as informações de utilização de tamanho da base de dados. |
Set-AzSqlDatabase | Atualiza as propriedades do banco de dados ou move o banco de dados para, para fora ou entre pools elásticos. |
Add-AzMetricAlertRule | (Preterido) Adiciona ou atualiza uma regra de alerta para monitorar automaticamente as métricas no futuro. Aplica-se apenas a regras de alerta clássicas baseadas em métricas. |
Add-AzMetricAlertRuleV2 | Adiciona ou atualiza uma regra de alerta para monitorar automaticamente as métricas no futuro. Aplica-se apenas a regras de alerta baseadas em métricas não clássicas. |
Remove-AzResourceGroup | Elimina um grupo de recursos, incluindo todos os recursos aninhados. |
Próximos passos
Para obter mais informações sobre o Azure PowerShell, consulte a documentação do Azure PowerShell.
Exemplos de script adicionais do PowerShell podem ser encontrados em scripts do Azure PowerShell.