Gérer les ressources Application Insights à l’aide de PowerShell
Notes
Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour bien démarrer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.
Cet article explique comment automatiser la création et la mise à jour de ressources Application Insights à l’aide du service Azure Resource Manager. Cette opération peut par exemple avoir lieu dans le cadre du processus de génération. Avec la ressource Application Insights de base, vous pouvez créer des tests web de disponibilité, configurer des alertes et un mécanisme de tarification, mais aussi créer d’autres ressources Azure.
Les éléments importants pour la création de ces ressources sont les modèles JSON pour Resource Manager. La procédure de base est la suivante :
- Téléchargez les définitions JSON des ressources existantes.
- Paramétrez certaines valeurs, telles que les noms.
- Exécutez le modèle chaque fois que vous souhaitez créer une ressource.
Vous pouvez empaqueter plusieurs ressources pour les créer toutes en une seule fois. Par exemple, vous pouvez créer un moniteur d’application avec des tests de disponibilité, des alertes et un stockage pour l’exportation continue. Certains paramètres ont des particularités que nous abordons ici.
Installation unique
Si vous n’avez pas encore utilisé PowerShell avec votre abonnement Azure, installez le module Azure PowerShell sur l’ordinateur sur lequel vous souhaitez exécuter les scripts :
- Installez le programme Microsoft Web Platform Installer (v5 ou version ultérieure).
- Utilisez-le pour installer le module Azure PowerShell.
Outre l’utilisation de modèles Azure Resource Manager (modèles ARM), il existe un ensemble complet d’applets de commande PowerShell Application Insights. Ces applets de commande facilitent la configuration programmatique des ressources Application Insights. Vous pouvez utiliser les fonctionnalités activées par les applets de commande pour :
- Créer et supprimer des ressources Application Insights.
- Obtenir les listes de ressources Application Insights et leurs propriétés.
- Créer et gérer une exportation continue.
- Créer et gérer des clés d’application.
- Définir le plafond quotidien.
- Définir le plan de tarification.
Créer des ressources Application Insights à l’aide d’une applet de commande PowerShell
Voici comment créer une ressource Application Insights dans le centre de données Azure USA Est à l’aide de l’applet de commande New-AzApplicationInsights :
New-AzApplicationInsights -ResourceGroupName <resource group> -Name <resource name> -location eastus
Créer des ressources Application Insights à l’aide d’un modèle ARM
Voici comment créer une nouvelle ressource Application Insights à l’aide d’un modèle ARM.
Créer le modèle ARM
Créez un fichier .json. Appelons-le template1.json
dans cet exemple. Copiez-y ce contenu :
{
"$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')]"
}
}
}
]
}
Utiliser le modèle ARM pour créer une ressource Application Insights
Dans PowerShell, connectez-vous à Azure en utilisant
$Connect-AzAccount
.Affectez un abonnement à votre contexte avec
Set-AzContext "<subscription ID>"
.Exécutez un nouveau déploiement pour créer une ressource Application Insights :
New-AzResourceGroupDeployment -ResourceGroupName Fabrikam ` -TemplateFile .\template1.json ` -appName myNewApp
-ResourceGroupName
est le groupe dans lequel vous souhaitez créer les nouvelles ressources.-TemplateFile
doit se produire avant les paramètres personnalisés.-appName
est le nom de la ressource à créer.
Vous pouvez ajouter d'autres paramètres. Vous trouvez leurs descriptions dans la section Paramètres du modèle.
Obtenir la clé d’instrumentation
Après avoir créé une ressource d’application, vous voulez obtenir la clé d’instrumentation :
- Connexion à Azure avec
$Connect-AzAccount
. - Affectez un abonnement à votre contexte avec
Set-AzContext "<subscription ID>"
. - Ensuite, utilisez :
$resource = Get-AzResource -Name "<resource name>" -ResourceType "Microsoft.Insights/components"
$details = Get-AzResource -ResourceId $resource.ResourceId
$details.Properties.InstrumentationKey
Pour voir la liste des nombreuses autres propriétés de votre ressource Application Insights, utilisez :
Get-AzApplicationInsights -ResourceGroupName Fabrikam -Name FabrikamProd | Format-List
Des propriétés supplémentaires sont disponibles via les applets de commande :
Set-AzApplicationInsightsDailyCap
Set-AzApplicationInsightsPricingPlan
Get-AzApplicationInsightsApiKey
Get-AzApplicationInsightsContinuousExport
Consultez la documentation détaillée pour connaître les paramètres de ces applets de commande.
Notes
Le support de l’ingestion de clé d’instrumentation prendra fin le 31 mars 2025. L’ingestion de clé d’instrumentation continuera de fonctionner, mais nous ne fournirons plus de mises à jour ni de support pour la fonctionnalité. Passez aux chaînes de connexion pour tirer parti des nouvelles fonctionnalités.
Définir la conservation des données
Vous pouvez utiliser les trois méthodes suivantes pour définir programmatiquement la conservation des données sur une ressource Application Insights.
Définir la conservation des données à l’aide de commandes PowerShell
Voici un ensemble simple de commandes PowerShell permettant de définir la conservation des données pour votre ressource Application Insights :
$Resource = Get-AzResource -ResourceType Microsoft.Insights/components -ResourceGroupName MyResourceGroupName -ResourceName MyResourceName
$Resource.Properties.RetentionInDays = 365
$Resource | Set-AzResource -Force
Définir la conservation des données à l’aide de REST
Pour obtenir la conservation des données actuelle de votre ressource Application Insights, vous pouvez utiliser l’outil OSS ARMClient. Découvrez plus en détail ARMClient dans les articles de David Ebbo et Daniel Bowbyes. Voici un exemple qui utilise ARMClient
pour obtenir la conservation actuelle :
armclient GET /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName?api-version=2018-05-01-preview
Pour définir la conservation, la commande est un PUT similaire :
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}}"
Pour définir la conservation des données sur 365 jours à l’aide du modèle précédent, exécutez :
New-AzResourceGroupDeployment -ResourceGroupName "<resource group>" `
-TemplateFile .\template1.json `
-retentionInDays 365 `
-appName myApp
Définir la conservation des données au moyen d’un script PowerShell
Le script suivant peut également être utilisé pour modifier la rétention. Copiez ce script pour l’enregistrer en tant que 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
Ce script peut être alors utilisé comme suit :
Set-ApplicationInsightsRetention `
[-SubscriptionId] <String> `
[-ResourceGroupName] <String> `
[-Name] <String> `
[-RetentionInDays <Int>]
Définir le plafond quotidien
Pour accéder aux propriétés du plafond quotidien, utilisez l’applet de commande Set-AzApplicationInsightsPricingPlan :
Set-AzApplicationInsightsDailyCap -ResourceGroupName <resource group> -Name <resource name> | Format-List
Pour définir les propriétés du plafond quotidien, utilisez la même applet de commande. Par exemple, pour définir le plafond à 300 Go par jour :
Set-AzApplicationInsightsDailyCap -ResourceGroupName <resource group> -Name <resource name> -DailyCapGB 300
Vous pouvez également utiliser ARMClient pour récupérer et définir des paramètres de limite quotidienne. Pour obtenir les valeurs actuelles, utilisez la commande suivante :
armclient GET /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName/CurrentBillingFeatures?api-version=2018-05-01-preview
Définir l’heure de réinitialisation de la limite quotidienne
Important
Le temps de réinitialisation de limite quotidienne ne peut plus être personnalisé à l’aide de l’attribut ResetTime
.
Définir le plan tarifaire
Pour obtenir le plan tarifaire actuel, utilisez l’applet de commande Set-AzApplicationInsightsPricingPlan :
Set-AzApplicationInsightsPricingPlan -ResourceGroupName <resource group> -Name <resource name> | Format-List
Pour définir le plan tarifaire, utilisez la même applet de commande avec le -PricingPlan
spécifié :
Set-AzApplicationInsightsPricingPlan -ResourceGroupName <resource group> -Name <resource name> -PricingPlan Basic
Vous pouvez également définir le plan tarifaire en fonction d’une ressource Application Insights existante à l’aide du modèle ARM précédent, en omettant la ressource « microsoft.insights/components » et le nœud dependsOn
dans la ressource de facturation. Par exemple, pour définir le plan tarifaire en fonction du plan Par Go (anciennement appelé Plan de base), exécutez :
New-AzResourceGroupDeployment -ResourceGroupName "<resource group>" `
-TemplateFile .\template1.json `
-priceCode 1 `
-appName myApp
Le priceCode
est défini comme :
priceCode | Plan |
---|---|
1 | Par Go (anciennement appelé Plan de base) |
2 | Par nœud (anciennement appelé Plan Entreprise) |
Enfin, vous pouvez utiliser ARMClient pour récupérer et définir des plans de tarification et des paramètres de limite quotidienne. Pour obtenir les valeurs actuelles, utilisez la commande suivante :
armclient GET /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/MyResourceGroupName/providers/microsoft.insights/components/MyResourceName/CurrentBillingFeatures?api-version=2018-05-01-preview
Vous pouvez définir tous ces paramètres à l’aide de la commande suivante :
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}}"
Ce code définit la limite quotidienne sur 200 Go par jour, configure l’heure de réinitialisation de la limite quotidienne sur 12:00 UTC, envoie des e-mails lorsque la limite et le niveau d’avertissement sont atteints, et définit le seuil d’avertissement sur 90 % de la limite.
Ajouter une alerte métrique
Pour automatiser la création d’alertes de métrique, consultez l’article Modèle d’alertes de métrique.
Ajouter un test de disponibilité
Pour automatiser les tests de disponibilité, voir l’article Modèle d’alertes de métrique.
Ajouter des ressources
Pour automatiser la création de toute autre ressource de tout type, créez un exemple manuellement, puis copiez-le et paramétrez son code à partir d’Azure Resource Manager.
Ouvrez Azure Resource Manager. Accédez à votre ressource d’application qui se trouve après
subscriptions/resourceGroups/<your resource group>/providers/Microsoft.Insights/components
.composants sont les ressources Application Insights de base pour l’affichage des applications. Il existe des ressources distinctes pour les règles d’alertes et les tests web de disponibilité associés.
Copiez le JSON du composant dans l’emplacement approprié dans
template1.json
.Supprimez les propriétés suivantes :
id
InstrumentationKey
CreationDate
TenantId
Ouvrez les sections
webtests
etalertrules
, puis copiez le contenu JSON des éléments individuels dans votre modèle. Ne copiez pas à partir deswebtests
nœuds oualertrules
. Accédez aux éléments en dessous.Chaque test web étant associé à une règle d’alerte, vous devez copier les deux.
Insérez cette ligne dans chaque ressource :
"apiVersion": "2015-05-01",
Définir les paramètres du modèle
Vous devez à présent remplacer les noms spécifiques par des paramètres. Pour définir les paramètres d’un modèle, écrivez des expressions utilisant un ensemble de fonctions d’assistance.
Comme vous ne pouvez pas définir uniquement les paramètres d’une portion de chaîne, utilisez concat()
pour générer les chaînes.
Voici des exemples de substitutions que vous allez effectuer. Il existe plusieurs occurrences de chaque substitution. Il vous en faudra peut-être d’autres dans votre modèle. Ces exemples utilisent les paramètres et les variables que nous avons définis en haut du modèle.
Rechercher | Remplacer par |
---|---|
"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" (minuscules) |
"[toLower(parameters('appName'))]" |
"<WebTest Name=\"myWebTest\" ... Url=\"http://fabrikam.com/home\" ...>" |
[concat('<WebTest Name=\"', parameters('webTestName'), '\" ... Url=\"', parameters('Url'), '\"...>')]" |
Définir les dépendances entre les ressources
Azure doit configurer les ressources dans un ordre strict. Pour vous assurer de l’achèvement d’une installation avant que la suivante ne commence, ajoutez les lignes de dépendance :
Dans la ressource du test de disponibilité :
"dependsOn": ["[resourceId('Microsoft.Insights/components', parameters('appName'))]"],
Dans la ressource d’alerte pour un test de disponibilité :
"dependsOn": ["[resourceId('Microsoft.Insights/webtests', variables('testName'))]"],
Étapes suivantes
Consultez ces autres articles sur l’automatisation :