Бөлісу құралы:


Управление ресурсами Application Insights с помощью PowerShell

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

В этой статье показано, как автоматизировать создание и обновление ресурсов Application Insights автоматически с помощью Azure Resource Manager. Эту функцию можно использовать, например, в процессе сборки. Наряду с базовым ресурсом Application Insights можно создавать веб-тесты доступности и другие ресурсы Azure, а также настраивать оповещения и схему цен.

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

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

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

Однократная настройка

Если вы еще не использовали PowerShell с подпиской Azure, установите модуль Azure PowerShell на компьютере, где вы хотите запустить скрипты:

  1. Установите установщик веб-платформы Майкрософт (версии 5 или более поздней).
  2. Используйте его для установки Azure PowerShell.

Помимо использования шаблонов Azure Resource Manager (шаблоны ARM), существует широкий набор командлетов Application Insights PowerShell. Эти командлеты упрощают программу настройки ресурсов Application Insights. Вы можете использовать возможности, включенные командлетами:

  • Создание и удаление ресурсов Application Insights.
  • Получение списков ресурсов Application Insights и их свойств.
  • Создание непрерывного экспорта и управление ими.
  • Создание ключей приложений и управление ими.
  • Установите ежедневное ограничение.
  • задание ценового плана;

Создание ресурсов Application Insights с помощью командлета PowerShell

Вот как создать ресурс Application Insights в центре обработки данных Azure East US с помощью командлета New-AzApplicationInsights :

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

Создание ресурсов Application Insights с помощью шаблона ARM

Вот как создать ресурс Application Insights с помощью шаблона ARM.

Создание шаблона ARM

Создайте файл .json. Давайте вызовем его template1.json в этом примере. Скопируйте в него следующее содержимое:

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

Создание нового ресурса Application Insights с помощью шаблона ARM

  1. В PowerShell войдите в Azure с помощью $Connect-AzAccount.

  2. Задайте контекст для подписки.Set-AzContext "<subscription ID>"

  3. Выполните новое развертывание, чтобы создать ресурс Application Insights.

        New-AzResourceGroupDeployment -ResourceGroupName Fabrikam `
               -TemplateFile .\template1.json `
               -appName myNewApp
    
    
    • -ResourceGroupName — группа, в которой необходимо создать ресурсы.
    • Параметр -TemplateFile должен предшествовать пользовательским параметрам.
    • -appName — это имя создаваемого ресурса.

Вы можете добавить другие параметры. Их описания находятся в разделе параметров шаблона.

Получение ключа инструментирования

После создания ресурса приложения вам потребуется ключ инструментирования:

  1. Войдите в Azure с помощью $Connect-AzAccount.
  2. Задайте контекст для подписки.Set-AzContext "<subscription ID>"
  3. Затем используйте:
    1. $resource = Get-AzResource -Name "<resource name>" -ResourceType "Microsoft.Insights/components"
    2. $details = Get-AzResource -ResourceId $resource.ResourceId
    3. $details.Properties.InstrumentationKey

Чтобы просмотреть список других свойств ресурса Application Insights, выполните следующий код.

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

Дополнительные свойства доступны с помощью командлетов:

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

Подробные сведения о параметрах для этих командлетов см. в подробной документации .

Примечание.

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

Настройка срока хранения данных

Для программного задания хранения данных в ресурсе Application Insights можно использовать следующие три метода.

Настройка хранения данных с помощью команд PowerShell

Ниже приведен простой набор команд PowerShell для настройки срока хранения данных для ресурса Application Insights.

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

Настройка хранения данных с помощью REST

Чтобы получить текущий срок хранения данных для ресурса Application Insights, можно применить средство OSS ARMClient. Узнайте больше о ARMClient из статей Дэвида Эббо и Даниэля Боубиса. Ниже приведен пример, который используется ARMClient для получения текущего хранения:

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

Чтобы задать срок хранения, используйте аналогичную команду 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}}"

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

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

Настройка хранения данных с помощью скрипта PowerShell

Следующий скрипт также позволяет изменить срок хранения. Скопируйте этот скрипт, чтобы сохранить его как 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

Теперь вы можете выполнить его следующим образом.

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

Установка ежедневного ограничения

Чтобы получить свойства ежедневного ограничения, используйте командлет Set-AzApplicationInsightsPricingPlan.

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

Чтобы задать свойства ежедневной крышки, используйте тот же командлет. Например, чтобы установить ограничение на 300 ГБ в день:

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

Также для получения и задания параметров ежедневного ограничения можно использовать средство ARMClient. Чтобы получить текущие значения, выполните следующий код.

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

Установка времени сброса ежедневного ограничения

Чтобы задать время сброса ежедневного ограничения, используйте средство ARMClient. Ниже приведен пример, который используется ARMClient для задания времени сброса в новый час. В этом примере показано 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}}"

Выбор тарифного плана

Чтобы получить текущий тарифный план, используйте командлет Set-AzApplicationInsightsPricingPlan :

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

Чтобы задать тарифный план, используйте тот же командлет с -PricingPlan указанным:

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

Вы также можете задать план ценообразования для существующего ресурса Application Insights с помощью предыдущего шаблона ARM, опустив ресурс microsoft.insights/components и dependsOn узел из ресурса выставления счетов. Например, чтобы задать план с оплатой за ГБ (ранее — "Базовый"), выполните следующий код.

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

priceCode определяется так:

priceCode Планирование
1 За гигабайт (ранее — "Базовый")
2 За узел (ранее — "Корпоративный")

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

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

Все эти параметры можно задать с помощью:

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

Этот код устанавливает ежедневное ограничение на 200 ГБ в день, настраивает время сброса ежедневного ограничения до 12:00 UTC, отправляет сообщения электронной почты как при достижении ограничения, так и на уровне предупреждения, и задайте пороговое значение предупреждения 90 % от ограничения.

Добавление оповещения метрики

Чтобы автоматизировать создание оповещений метрик, см . статью шаблона оповещений метрик.

Добавление теста доступности

Чтобы автоматизировать тесты доступности, ознакомьтесь с шаблоном шаблонов оповещений метрик.

Добавление дополнительных ресурсов

Чтобы автоматизировать создание любого другого ресурса любого типа, создайте пример вручную, а затем скопируйте и параметризируйте его код из Azure Resource Manager.

  1. Откройте диспетчер ресурсов Azure. Перейдите к subscriptions/resourceGroups/<your resource group>/providers/Microsoft.Insights/components ресурсу приложения.

    Снимок экрана: навигация в обозревателе ресурсов Azure.

    Компоненты — это основные ресурсы Application Insights для отображения приложений. Для соответствующих правил оповещения и веб-тестов доступности имеются отдельные ресурсы.

  2. Скопируйте JSON компонента в соответствующее место в файле template1.json.

  3. Удалите следующие свойства:

    • id
    • InstrumentationKey
    • CreationDate
    • TenantId
  4. Откройте разделы webtests и alertrules и скопируйте код JSON для отдельных элементов в шаблон. Не копируйте из webtests узлов или alertrules узлов. Перейдите к элементам под ними.

    С каждым веб-тестом связано правило оповещения, поэтому скопировать необходимо оба элемента.

  5. Вставьте в каждый ресурс следующую строку.

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

Параметризация шаблона

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

Невозможно параметризовать только часть строки, поэтому используйте concat() для сборки строк.

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

Поиск 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" (строчная) "[toLower(parameters('appName'))]"
"<WebTest Name=\"myWebTest\" ...
Url=\"http://fabrikam.com/home\" ...>"
[concat('<WebTest Name=\"',
parameters('webTestName'),
'\" ... Url=\"', parameters('Url'),
'\"...>')]"

Установка зависимостей между ресурсами

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

  • В ресурсе теста доступности:

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

  • В ресурсе оповещения для теста доступности:

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

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

Дополнительные статьи по автоматизации см. в следующих статьях: