Sdílet prostřednictvím


Správa prostředků Application Insights pomocí PowerShellu

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

V tomto článku se dozvíte, jak automatizovat vytváření a aktualizaci prostředků Application Insights automaticky pomocí Azure Resource Manageru. Můžete to například udělat jako součást procesu sestavení. Kromě základního prostředku Application Insights můžete vytvářet webové testy dostupnosti, nastavovat výstrahy, nastavovat cenové schéma a vytvářet další prostředky Azure.

Klíčem k vytvoření těchto prostředků jsou šablony JSON pro Resource Manager. Základní postup je:

  • Stáhněte si definice JSON existujících prostředků.
  • Parametrizovat určité hodnoty, například názvy.
  • Šablonu spusťte pokaždé, když chcete vytvořit nový prostředek.

Můžete zabalit několik prostředků dohromady a vytvořit je všechny najednou. Můžete například vytvořit monitorování aplikace s testy dostupnosti, upozorněními a úložištěm pro průběžný export. U některých parametrizací existuje několik drobných vlastností, které zde vysvětlíme.

Jednorázové nastavení

Pokud jste před předplatným Azure nepoužívali PowerShell, nainstalujte modul Azure PowerShell na počítač, na kterém chcete skripty spustit:

  1. Instalace instalačního programu Webová platforma Microsoft (verze 5 nebo vyšší)
  2. Použijte ho k instalaci Azure PowerShellu.

Kromě použití šablon Azure Resource Manageru (šablon ARM) je k dispozici bohatá sada rutin PowerShellu pro Application Insights. Tyto rutiny usnadňují programově konfiguraci prostředků Application Insights. Funkce povolené rutinami můžete použít k:

  • Vytváření a odstraňování prostředků Application Insights
  • Získejte seznamy prostředků Application Insights a jejich vlastností.
  • Vytváření a správa průběžného exportu
  • Vytváření a správa klíčů aplikací
  • Nastavte denní limit.
  • Nastavte cenový plán.

Vytvoření prostředků Application Insights pomocí rutiny PowerShellu

Tady je postup vytvoření nového prostředku Application Insights v datacentru Azure East US pomocí rutiny New-AzApplicationInsights :

New-AzApplicationInsights -ResourceGroupName <resource group> -Name <resource name> -location eastus

Vytváření prostředků Application Insights pomocí šablony ARM

Tady je postup vytvoření nového prostředku Application Insights pomocí šablony ARM.

Vytvoření šablony ARM

Vytvořte nový soubor .json. Pojďme to template1.json v tomto příkladu pojmenovat. Zkopírujte do něj tento obsah:

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "appName": {
                "type": "string",
                "metadata": {
                    "description": "Enter the name of your Application Insights resource."
                }
            },
            "appType": {
                "type": "string",
                "defaultValue": "web",
                "allowedValues": [
                    "web",
                    "java",
                    "other"
                ],
                "metadata": {
                    "description": "Enter the type of the monitored application."
                }
            },
            "appLocation": {
                "type": "string",
                "defaultValue": "eastus",
                "metadata": {
                    "description": "Enter the location of your Application Insights resource."
                }
            },
            "retentionInDays": {
                "type": "int",
                "defaultValue": 90,
                "allowedValues": [
                    30,
                    60,
                    90,
                    120,
                    180,
                    270,
                    365,
                    550,
                    730
                ],
                "metadata": {
                    "description": "Data retention in days"
                }
            },
            "ImmediatePurgeDataOn30Days": {
                "type": "bool",
                "defaultValue": false,
                "metadata": {
                    "description": "If set to true when changing retention to 30 days, older data will be immediately deleted. Use this with extreme caution. This only applies when retention is being set to 30 days."
                }
            },
            "priceCode": {
                "type": "int",
                "defaultValue": 1,
                "allowedValues": [
                    1,
                    2
                ],
                "metadata": {
                    "description": "Pricing plan: 1 = Per GB (or legacy Basic plan), 2 = Per Node (legacy Enterprise plan)"
                }
            },
            "dailyQuota": {
                "type": "int",
                "defaultValue": 100,
                "minValue": 1,
                "metadata": {
                    "description": "Enter daily quota in GB."
                }
            },
            "dailyQuotaResetTime": {
                "type": "int",
                "defaultValue": 0,
                "metadata": {
                    "description": "Enter daily quota reset hour in UTC (0 to 23). Values outside the range will get a random reset hour."
                }
            },
            "warningThreshold": {
                "type": "int",
                "defaultValue": 90,
                "minValue": 1,
                "maxValue": 100,
                "metadata": {
                    "description": "Enter the % value of daily quota after which warning mail to be sent. "
                }
            }
        },
        "variables": {
            "priceArray": [
                "Basic",
                "Application Insights Enterprise"
            ],
            "pricePlan": "[take(variables('priceArray'),parameters('priceCode'))]",
            "billingplan": "[concat(parameters('appName'),'/', variables('pricePlan')[0])]"
        },
        "resources": [
            {
                "type": "microsoft.insights/components",
                "kind": "[parameters('appType')]",
                "name": "[parameters('appName')]",
                "apiVersion": "2014-04-01",
                "location": "[parameters('appLocation')]",
                "tags": {},
                "properties": {
                    "ApplicationId": "[parameters('appName')]",
                    "retentionInDays": "[parameters('retentionInDays')]",
                    "ImmediatePurgeDataOn30Days": "[parameters('ImmediatePurgeDataOn30Days')]"
                },
                "dependsOn": []
            },
            {
                "name": "[variables('billingplan')]",
                "type": "microsoft.insights/components/CurrentBillingFeatures",
                "location": "[parameters('appLocation')]",
                "apiVersion": "2015-05-01",
                "dependsOn": [
                    "[resourceId('microsoft.insights/components', parameters('appName'))]"
                ],
                "properties": {
                    "CurrentBillingFeatures": "[variables('pricePlan')]",
                    "DataVolumeCap": {
                        "Cap": "[parameters('dailyQuota')]",
                        "WarningThreshold": "[parameters('warningThreshold')]",
                        "ResetTime": "[parameters('dailyQuotaResetTime')]"
                    }
                }
            }
        ]
    }

Vytvoření nového prostředku Application Insights pomocí šablony ARM

  1. V PowerShellu se přihlaste k Azure pomocí .$Connect-AzAccount

  2. Nastavte kontext na předplatné pomocí Set-AzContext "<subscription ID>".

  3. Spuštěním nového nasazení vytvořte nový prostředek Application Insights:

        New-AzResourceGroupDeployment -ResourceGroupName Fabrikam `
               -TemplateFile .\template1.json `
               -appName myNewApp
    
    
    • -ResourceGroupName je skupina, ve které chcete vytvořit nové prostředky.
    • -TemplateFile musí nastat před vlastními parametry.
    • -appName je název prostředku, který se má vytvořit.

Můžete přidat další parametry. Jejich popisy najdete v části parametrů šablony.

Získání klíče instrumentace

Po vytvoření prostředku aplikace chcete instrumentační klíč:

  1. Přihlaste se k Azure pomocí .$Connect-AzAccount
  2. Nastavte kontext na předplatné pomocí Set-AzContext "<subscription ID>".
  3. Pak použijte:
    1. $resource = Get-AzResource -Name "<resource name>" -ResourceType "Microsoft.Insights/components"
    2. $details = Get-AzResource -ResourceId $resource.ResourceId
    3. $details.Properties.InstrumentationKey

Pokud chcete zobrazit seznam mnoha dalších vlastností prostředku Application Insights, použijte:

Get-AzApplicationInsights -ResourceGroupName Fabrikam -Name FabrikamProd | Format-List

Další vlastnosti jsou k dispozici prostřednictvím rutin:

  • Set-AzApplicationInsightsDailyCap
  • Set-AzApplicationInsightsPricingPlan
  • Get-AzApplicationInsightsApiKey
  • Get-AzApplicationInsightsContinuousExport

Podrobné informace o parametrech těchto rutin najdete v podrobné dokumentaci .

Poznámka:

Podpora příjmu dat založeného na instrumentačním klíči skončí 31. března 2025. Příjem klíčů instrumentace bude dál fungovat, ale už nebudeme poskytovat aktualizace ani podporu pro tuto funkci. Přechod na připojovací řetězec, abyste mohli využívat nové funkce.

Nastavení uchovávání dat

K programovému nastavení uchovávání dat u prostředku Application Insights můžete použít následující tři metody.

Nastavení uchovávání dat pomocí příkazů PowerShellu

Tady je jednoduchá sada příkazů PowerShellu pro nastavení uchovávání dat pro prostředek Application Insights:

$Resource = Get-AzResource -ResourceType Microsoft.Insights/components -ResourceGroupName MyResourceGroupName -ResourceName MyResourceName
$Resource.Properties.RetentionInDays = 365
$Resource | Set-AzResource -Force

Nastavení uchovávání dat pomocí REST

Pokud chcete získat aktuální uchovávání dat pro prostředek Application Insights, můžete použít nástroj OSS ARMClient. Přečtěte si další informace o ARMClient z článků od Davida Ebba a Daniela Bowbye. Tady je příklad, který používá ARMClient k získání aktuálního uchovávání:

armclient GET /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName?api-version=2018-05-01-preview

Pokud chcete nastavit uchovávání, příkaz je podobný put:

armclient PUT /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName?api-version=2018-05-01-preview "{location: 'eastus', properties: {'retentionInDays': 365}}"

Pokud chcete nastavit uchovávání dat na 365 dnů pomocí předchozí šablony, spusťte:

New-AzResourceGroupDeployment -ResourceGroupName "<resource group>" `
       -TemplateFile .\template1.json `
       -retentionInDays 365 `
       -appName myApp

Nastavení uchovávání dat pomocí skriptu PowerShellu

Ke změně uchovávání je možné použít také následující skript. Zkopírujte tento skript a uložte ho jako Set-ApplicationInsightsRetention.ps1.

Param(
    [Parameter(Mandatory = $True)]
    [string]$SubscriptionId,

    [Parameter(Mandatory = $True)]
    [string]$ResourceGroupName,

    [Parameter(Mandatory = $True)]
    [string]$Name,

    [Parameter(Mandatory = $True)]
    [string]$RetentionInDays
)
$ErrorActionPreference = 'Stop'
if (-not (Get-Module Az.Accounts)) {
    Import-Module Az.Accounts
}
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
if (-not $azProfile.Accounts.Count) {
    Write-Error "Ensure you have logged in before calling this function."    
}
$currentAzureContext = Get-AzContext
$profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile)
$token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId)
$UserToken = $token.AccessToken
$RequestUri = "https://management.azure.com/subscriptions/$($SubscriptionId)/resourceGroups/$($ResourceGroupName)/providers/Microsoft.Insights/components/$($Name)?api-version=2015-05-01"
$Headers = @{
    "Authorization"         = "Bearer $UserToken"
    "x-ms-client-tenant-id" = $currentAzureContext.Tenant.TenantId
}
## Get Component object via ARM
$GetResponse = Invoke-RestMethod -Method "GET" -Uri $RequestUri -Headers $Headers 

## Update RetentionInDays property
if($($GetResponse.properties | Get-Member "RetentionInDays"))
{
    $GetResponse.properties.RetentionInDays = $RetentionInDays
}
else
{
    $GetResponse.properties | Add-Member -Type NoteProperty -Name "RetentionInDays" -Value $RetentionInDays
}
## Upsert Component object via ARM
$PutResponse = Invoke-RestMethod -Method "PUT" -Uri "$($RequestUri)" -Headers $Headers -Body $($GetResponse | ConvertTo-Json) -ContentType "application/json"
$PutResponse

Tento skript se pak dá použít jako:

Set-ApplicationInsightsRetention `
        [-SubscriptionId] <String> `
        [-ResourceGroupName] <String> `
        [-Name] <String> `
        [-RetentionInDays <Int>]

Nastavení denního limitu

K získání vlastností denního limitu použijte rutinu Set-AzApplicationInsightsPricingPlan :

Set-AzApplicationInsightsDailyCap -ResourceGroupName <resource group> -Name <resource name> | Format-List

Pokud chcete nastavit vlastnosti denního limitu, použijte stejnou rutinu. Pokud například chcete nastavit limit na 300 GB za den:

Set-AzApplicationInsightsDailyCap -ResourceGroupName <resource group> -Name <resource name> -DailyCapGB 300

K získání a nastavení parametrů denního limitu můžete použít také ARMClient . Pokud chcete získat aktuální hodnoty, použijte:

armclient GET /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName/CurrentBillingFeatures?api-version=2018-05-01-preview

Nastavení denní doby resetování limitu

Důležité

Denní doba resetování limitu se už nedá přizpůsobit pomocí atributu ResetTime .

Nastavení cenového plánu

Pokud chcete získat aktuální cenový plán, použijte rutinu Set-AzApplicationInsightsPricingPlan :

Set-AzApplicationInsightsPricingPlan -ResourceGroupName <resource group> -Name <resource name> | Format-List

Pokud chcete nastavit cenový plán, použijte stejnou rutinu se zadaným kódem -PricingPlan :

Set-AzApplicationInsightsPricingPlan -ResourceGroupName <resource group> -Name <resource name> -PricingPlan Basic

Cenový plán pro existující prostředek Application Insights můžete také nastavit pomocí předchozí šablony ARM a vynechat prostředek microsoft.insights/components a dependsOn uzel z fakturačního prostředku. Pokud ho například chcete nastavit na plán Per GB (dříve označovaný jako plán Basic), spusťte:

        New-AzResourceGroupDeployment -ResourceGroupName "<resource group>" `
               -TemplateFile .\template1.json `
               -priceCode 1 `
               -appName myApp

Definuje se priceCode takto:

priceCode Plánování
0 Za GB (dříve pojmenovaný plán Basic)
2 Podle uzlu (dříve název plánu Enterprise)

Nakonec můžete pomocí ARMClient získat a nastavit cenové plány a parametry denního limitu. Pokud chcete získat aktuální hodnoty, použijte:

armclient GET /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName/CurrentBillingFeatures?api-version=2018-05-01-preview

Všechny tyto parametry můžete nastavit pomocí:

armclient PUT /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName/CurrentBillingFeatures?api-version=2018-05-01-preview
"{'CurrentBillingFeatures':['Basic'],'DataVolumeCap':{'Cap':200,'ResetTime':12,'StopSendNotificationWhenHitCap':true,'WarningThreshold':90,'StopSendNotificationWhenHitThreshold':true}}"

Tento kód nastaví denní limit na 200 GB za den, nakonfiguruje denní dobu resetování limitu na 12:00 UTC, odešle e-maily při dosažení limitu i úroveň upozornění a nastaví prahovou hodnotu upozornění na 90 % limitu.

Přidání upozornění na metriku

Pokud chcete automatizovat vytváření upozornění metrik, přečtěte si článek šablony upozornění na metriky .

Přidání testu dostupnosti

Pokud chcete automatizovat testy dostupnosti, přečtěte si článek šablony upozornění na metriky .

Přidání dalších prostředků

Pokud chcete automatizovat vytváření jakéhokoli jiného prostředku, vytvořte příklad ručně a pak zkopírujte a parametrizujte jeho kód z Azure Resource Manageru.

  1. Otevřete Azure Resource Manager. Přejděte dolů subscriptions/resourceGroups/<your resource group>/providers/Microsoft.Insights/components k prostředku aplikace.

    Snímek obrazovky znázorňující navigaci v Azure Resource Exploreru

    Komponenty jsou základní prostředky Application Insights pro zobrazení aplikací. Pro přidružená pravidla upozornění a webové testy dostupnosti jsou k dispozici samostatné prostředky.

  2. Zkopírujte JSON komponenty do příslušného místa .template1.json

  3. Odstraňte tyto vlastnosti:

    • id
    • InstrumentationKey
    • CreationDate
    • TenantId
  4. Otevřete oddíly webtests a alertrules zkopírujte JSON pro jednotlivé položky do šablony. Nekopírujte z uzlůwebtests.alertrules Přejděte do položek pod nimi.

    Každý webový test má přidružené pravidlo upozornění, takže musíte zkopírovat obě.

  5. Vložte tento řádek do každého prostředku:

    "apiVersion": "2015-05-01",

Parametrizace šablony

Teď musíte nahradit konkrétní názvy parametry. Pokud chcete parametrizovat šablonu, napíšete výrazy pomocí sady pomocných funkcí.

Nelze parametrizovat pouze část řetězce, takže se používají concat() k sestavení řetězců.

Tady jsou příklady nahrazení, které chcete provést. Existuje několik výskytů každé náhrady. Možná budete potřebovat další uživatele ve vaší šabloně. Tyto příklady používají parametry a proměnné, které jsme definovali v horní části šablony.

Najít Replace with
"hidden-link:/subscriptions/.../../components/MyAppName" "[concat('hidden-link:',
resourceId('microsoft.insights/components',
parameters('appName')))]"
"/subscriptions/.../../alertrules/myAlertName-myAppName-subsId", "[resourceId('Microsoft.Insights/alertrules', variables('alertRuleName'))]",
"/subscriptions/.../../webtests/myTestName-myAppName", "[resourceId('Microsoft.Insights/webtests', parameters('webTestName'))]",
"myWebTest-myAppName" "[variables(testName)]"'
"myTestName-myAppName-subsId" "[variables('alertRuleName')]"
"myAppName" "[parameters('appName')]"
"myappname" (malé) "[toLower(parameters('appName'))]"
"<WebTest Name=\"myWebTest\" ...
Url=\"http://fabrikam.com/home\" ...>"
[concat('<WebTest Name=\"',
parameters('webTestName'),
'\" ... Url=\"', parameters('Url'),
'\"...>')]"

Nastavení závislostí mezi prostředky

Azure by měly prostředky nastavit v přísném pořadí. Pokud chcete zajistit, aby se jedno nastavení dokončilo před dalším zahájením, přidejte řádky závislostí:

  • V testovacím prostředku dostupnosti:

    "dependsOn": ["[resourceId('Microsoft.Insights/components', parameters('appName'))]"],

  • V prostředku upozornění pro test dostupnosti:

    "dependsOn": ["[resourceId('Microsoft.Insights/webtests', variables('testName'))]"],

Další kroky

Podívejte se na tyto další články o automatizaci: