Hantera Application Insights-resurser med hjälp av PowerShell

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Den här artikeln visar hur du automatiserar skapandet och uppdateringen av Application Insights-resurser automatiskt med hjälp av Azure Resource Manager. Du kan till exempel göra det som en del av en byggprocess. Tillsammans med den grundläggande Application Insights-resursen kan du skapa webbtester för tillgänglighet, konfigurera aviseringar, ange prisschemat och skapa andra Azure-resurser.

Nyckeln till att skapa dessa resurser är JSON-mallar för Resource Manager. Den grundläggande proceduren är:

  • Ladda ned JSON-definitionerna för befintliga resurser.
  • Parametrisera vissa värden, till exempel namn.
  • Kör mallen när du vill skapa en ny resurs.

Du kan paketera flera resurser tillsammans för att skapa dem alla på en och samma resa. Du kan till exempel skapa en appövervakare med tillgänglighetstester, aviseringar och lagring för kontinuerlig export. Det finns vissa subtiliteter i några av parameteriseringarna, som vi förklarar här.

Engångskonfiguration

Om du inte har använt PowerShell med din Azure-prenumeration tidigare installerar du Azure PowerShell-modulen på den dator där du vill köra skripten:

  1. Installera Installationsprogrammet för Microsoft Web Platform (v5 eller senare).
  2. Använd den för att installera Azure PowerShell.

Förutom att använda Azure Resource Manager-mallar (ARM-mallar) finns det en omfattande uppsättning Application Insights PowerShell-cmdletar. Dessa cmdletar gör det enkelt att konfigurera Application Insights-resurser programatiskt. Du kan använda funktionerna som aktiveras av cmdletarna för att:

  • Skapa och ta bort Application Insights-resurser.
  • Hämta listor över Application Insights-resurser och deras egenskaper.
  • Skapa och hantera kontinuerlig export.
  • Skapa och hantera programnycklar.
  • Ange den dagliga gränsen.
  • Ange prisplanen.

Skapa Application Insights-resurser med hjälp av en PowerShell-cmdlet

Så här skapar du en ny Application Insights-resurs i azure east us-datacentret med hjälp av cmdleten New-AzApplicationInsights :

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

Skapa Application Insights-resurser med hjälp av en ARM-mall

Så här skapar du en ny Application Insights-resurs med hjälp av en ARM-mall.

Skapa ARM-mallen

Skapa en ny .json-fil. Låt oss kalla det i det template1.json här exemplet. Kopiera det här innehållet till det:

    {
        "$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')]"
                    }
                }
            }
        ]
    }

Använd ARM-mallen för att skapa en ny Application Insights-resurs

  1. Logga in på Azure i PowerShell med hjälp $Connect-AzAccountav .

  2. Ange kontexten till en prenumeration med Set-AzContext "<subscription ID>".

  3. Kör en ny distribution för att skapa en ny Application Insights-resurs:

        New-AzResourceGroupDeployment -ResourceGroupName Fabrikam `
               -TemplateFile .\template1.json `
               -appName myNewApp
    
    
    • -ResourceGroupName är den grupp där du vill skapa de nya resurserna.
    • -TemplateFile måste ske före de anpassade parametrarna.
    • -appName är namnet på resursen som ska skapas.

Du kan lägga till andra parametrar. Du hittar deras beskrivningar i avsnittet parametrar i mallen.

Hämta instrumentationsnyckeln

När du har skapat en programresurs vill du ha instrumentationsnyckeln:

  1. Logga in på Azure med hjälp $Connect-AzAccountav .
  2. Ange kontexten till en prenumeration med Set-AzContext "<subscription ID>".
  3. Använd sedan:
    1. $resource = Get-AzResource -Name "<resource name>" -ResourceType "Microsoft.Insights/components"
    2. $details = Get-AzResource -ResourceId $resource.ResourceId
    3. $details.Properties.InstrumentationKey

Om du vill se en lista över många andra egenskaper för din Application Insights-resurs använder du:

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

Fler egenskaper är tillgängliga via cmdletarna:

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

Se den detaljerade dokumentationen för parametrarna för dessa cmdletar.

Kommentar

Stödet för inmatning av instrumentationsnycklar upphör den 31 mars 2025. Inmatningen av instrumenteringsnyckeln fortsätter att fungera, men vi kommer inte längre att tillhandahålla uppdateringar eller stöd för funktionen. Övergå till anslutningssträng för att dra nytta av nya funktioner.

Ange datakvarhållning

Du kan använda följande tre metoder för att programmatiskt ange datakvarhållning på en Application Insights-resurs.

Ange datakvarhållning med hjälp av PowerShell-kommandon

Här är en enkel uppsättning PowerShell-kommandon för att ange datakvarhållning för din Application Insights-resurs:

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

Ange datakvarhållning med hjälp av REST

Om du vill hämta den aktuella datakvarhållningen för din Application Insights-resurs kan du använda OSS-verktyget ARMClient. Läs mer om ARMClient från artiklar av David Ebbo och Daniel Bowbyes. Här är ett exempel som använder ARMClient för att hämta den aktuella kvarhållningen:

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

För att ange kvarhållningen är kommandot en liknande 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}}"

Om du vill ange datakvarhållningen till 365 dagar med hjälp av föregående mall kör du:

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

Ange datakvarhållning med hjälp av ett PowerShell-skript

Följande skript kan också användas för att ändra kvarhållning. Kopiera det här skriptet för att spara det som 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

Det här skriptet kan sedan användas som:

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

Ange den dagliga gränsen

Om du vill hämta egenskaperna för den dagliga gränsen använder du cmdleten Set-AzApplicationInsightsPricingPlan :

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

Använd samma cmdlet om du vill ange egenskaper för dagligt tak. Om du till exempel vill ange taket till 300 GB per dag:

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

Du kan också använda ARMClient för att hämta och ange dagliga takparametrar. Om du vill hämta de aktuella värdena använder du:

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

Ange den dagliga tidsgränsen för återställning av tak

Du kan använda ARMClient för att ange den dagliga återställningstiden för taket. Här är ett exempel som används ARMClient för att ange återställningstiden till en ny timme. Det här exemplet visar 12:00 UTC:

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':100,'WarningThreshold':80,'ResetTime':12}}"

Ange prisplanen

Om du vill hämta den aktuella prisplanen använder du cmdleten Set-AzApplicationInsightsPricingPlan :

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

Om du vill ange prisplanen använder du samma cmdlet med den -PricingPlan angivna:

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

Du kan också ange prisplanen för en befintlig Application Insights-resurs med hjälp av den föregående ARM-mallen och utelämna resursen "microsoft.insights/components" och dependsOn noden från faktureringsresursen. Om du till exempel vill ställa in den på Per GB-planen (kallades tidigare Basic-planen) kör du:

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

priceCode Definieras som:

priceCode Planera
1 Per GB (kallades tidigare Basic-planen)
2 Per nod (namnge tidigare Enterprise-planen)

Slutligen kan du använda ARMClient för att hämta och ange prisplaner och dagliga takparametrar. Om du vill hämta de aktuella värdena använder du:

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

Du kan ange alla dessa parametrar med hjälp av:

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}}"

Den här koden anger det dagliga taket till 200 GB per dag, konfigurerar återställningstiden för dagligt tak till 12:00 UTC, skickar e-postmeddelanden både när taket nås och varningsnivån uppfylls och anger varningströskeln till 90 % av taket.

Lägga till en måttavisering

Information om hur du automatiserar skapandet av måttaviseringar finns i mallartikeln Måttaviseringar.

Lägga till ett tillgänglighetstest

Information om hur du automatiserar tillgänglighetstester finns i mallartikeln Måttaviseringar.

Lägga till fler resurser

Om du vill automatisera skapandet av andra resurser av något slag skapar du ett exempel manuellt och kopierar och parameteriserar sedan koden från Azure Resource Manager.

  1. Öppna Azure Resource Manager. Navigera ned subscriptions/resourceGroups/<your resource group>/providers/Microsoft.Insights/components till programresursen.

    Screenshot that shows navigation in Azure Resource Explorer.

    Komponenter är de grundläggande Application Insights-resurserna för att visa program. Det finns separata resurser för associerade aviseringsregler och tillgänglighetswebbtester.

  2. Kopiera komponentens JSON till rätt plats i template1.json.

  3. Ta bort följande egenskaper:

    • id
    • InstrumentationKey
    • CreationDate
    • TenantId
  4. Öppna avsnitten webtests och alertrules och kopiera JSON för enskilda objekt till din mall. Kopiera inte från webtests noderna eller alertrules . Gå till objekten under dem.

    Varje webbtest har en associerad aviseringsregel, så du måste kopiera båda.

  5. Infoga den här raden i varje resurs:

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

Parameterisera mallen

Nu måste du ersätta de specifika namnen med parametrar. Om du vill parametrisera en mall skriver du uttryck med hjälpfunktioner.

Du kan inte parametrisera endast en del av en sträng, så använd concat() för att skapa strängar.

Här är exempel på de ersättningar som du vill göra. Det finns flera förekomster av varje ersättning. Du kan behöva andra i mallen. I de här exemplen används de parametrar och variabler som vi definierade överst i mallen.

Hitta 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" (gemen) "[toLower(parameters('appName'))]"
"<WebTest Name=\"myWebTest\" ...
Url=\"http://fabrikam.com/home\" ...>"
[concat('<WebTest Name=\"',
parameters('webTestName'),
'\" ... Url=\"', parameters('Url'),
'\"...>')]"

Ange beroenden mellan resurserna

Azure bör konfigurera resurserna i strikt ordning. Lägg till beroendelinjer för att se till att en installation har slutförts innan nästa börjar:

  • I tillgänglighetstestresursen:

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

  • I aviseringsresursen för ett tillgänglighetstest:

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

Nästa steg

Se de här andra automationsartiklarna: