Получив ключ инструментария Applications Insight, получите имя службы в Azure.

Как я могу программно определить имя экземпляра Application Insights по ключу инструментария?

Наша компания имеет большое количество экземпляров аналитики приложений в Azure. При устранении неполадок в приложении может потребоваться довольно много времени, чтобы отследить нужный экземпляр аналитики приложения для конкретного приложения.

Я должен был указать (больше, чем просто использовать тег C #), что я ищу решение на C #. В идеале я хотел бы что-то встроить, чтобы я мог реализовать страницу типа myapp.com/appinsights, и это дало бы мне правильный экземпляр аналитики приложения (из сотен, которые у нас есть) для данного приложения.


person johnweeder    schedule 31.08.2016    source источник
comment
вы можете просто поместить их в электронную таблицу. Как вы управляете государством?   -  person Chris Pietschmann    schedule 31.08.2016
comment
Он он ... Есть таблица. но он надежно обновляется с той же скоростью, что и любая другая такая электронная таблица. Т.е. Больше никогда. В идеале у меня было бы несколько строк C #, и приложение могло бы просто иметь URL-адрес для сообщения имени или, возможно, даже направить меня прямо на правильную ссылку на портале.   -  person johnweeder    schedule 01.09.2016
comment
@johnweeder Вы когда-нибудь получали реализацию этого на C #?   -  person Nick    schedule 08.03.2021
comment
Нет я ничего не получил   -  person johnweeder    schedule 10.03.2021


Ответы (7)


Вы можете сделать это с помощью PowerShell с командлетами AzureRm. Если вы новичок в этом, взгляните на Диспетчер ресурсов Azure.

Сначала вам нужно будет войти в систему с Login-AzureRmAccount, а затем выбрать подписку с Select-AzureRmSubscription

Следующий сценарий получит список имен каждого экземпляра Application Insights и его инструментального ключа:

Get-AzureRmResource -ExpandProperties -ResourceType "microsoft.insights/components"  -ResourceGroupName "your-resource-group" | select -ExpandProperty Properties  | Select Name, InstrumentationKey

Это работает следующим образом:

  1. Получите все ресурсы типа microsoft.insight / components из вашей группы
  2. Раскройте его свойства
  3. Найдите инструментальный ключ и имя в свойствах
person ranieuwe    schedule 31.08.2016
comment
Если вы хотите выполнить поиск по всем группам ресурсов, это работает. Find-AzureRmResource -ExpandProperties -ResourceType microsoft.insights / components | select -ExpandProperty Properties | Выберите имя, InstrumentationKey - person mafue; 12.01.2017
comment
IMHO @ mafue ответ в комментарии следует повысить до полноценного ответа и проголосовать за него. Спасибо! - person jlo; 14.07.2017
comment
Я согласен, что это работает, и это полезный подход. Моей целью (которую я не очень хорошо сформулировал ... позор мне как программисту) было решение C #, которое я мог бы встроить в приложение. Однако, поскольку никто не предоставил решение C #, я выберу этот ответ, поскольку он полезен сам по себе. - person johnweeder; 25.02.2018
comment
Это решение устарело. См. Ответ kayjtea ниже, чтобы использовать команды z. - person Mike Kinney; 29.02.2020

Старый модуль AzureRM PowerShell заменяется на новый кроссплатформенный модуль Az. Основываясь на ответах @tobias и @ranieuwe, следующее может получить все ваши InstrumentationKeys, используя новый модуль.

Установите модуль Az

Install-Module -Name Az -AllowClobber как администратор, или

Install-Module -Name Az -AllowClobber -Scope CurrentUser как не администратор

Полные инструкции здесь: https://docs.microsoft.com/en-us/powershell/azure/install-az-ps

При необходимости удалите старый модуль AzureRM.

Если вы получаете предупреждения об установке / загрузке как Az, так и AzureRM, вы можете удалить старый модуль с помощью запустить от имени администратора: Uninstall-AzureRm

Войдите в Azure и выберите Instrumentation Keys.

Import-Module Az
Connect-AzAccount
Get-AzSubscription # will list all currently connected subscriptions
Select-AzSubscription <subscription-id>

# Retrieve all Instrumentation Keys along with name of AppInsights resource
Get-AzResource -ExpandProperties -ResourceType "microsoft.insights/components" | Select -ExpandProperty Properties | Select Name, InstrumentationKey

# Find a specific Instrumentation Key
Get-AzResource -ExpandProperties -ResourceType "microsoft.insights/components" | Select -ExpandProperty Properties | Where InstrumentationKey -eq "abe66a40-c437-4af1-bfe9-4b72bd6b94a1"| Select Name, InstrumentationKey
person Tobias J    schedule 28.03.2019

Используя оболочку azure cloud (или любую оболочку, в которой установлен azure-cli ^ 2.0.64):

az extension add --name application-insights
az monitor app-insights component show --output table | grep <instrumentation_key>

Выполняется поиск по вашей текущей подписке. Вы можете увидеть свою текущую подписку с помощью

az account show

Вероятно, есть более изящные способы использования --query, но приведенный выше подход является универсальным.

person kayjtea    schedule 15.05.2019
comment
Это отличное решение, использующее часто устанавливаемые инструменты Windows. Незначительное изменение для пользователей Windows, меняющих grep на findstr: az monitor app-insights component show --output table | findstr ‹instrumentation_key› - person Mike Kinney; 29.02.2020
comment
Результат: No matching extensions for 'application-insights'. Use --debug for more information. - person Ian Grainger; 10.06.2021

Согласно комментарию @ mafue, следующие команды PowerShell позволяют находить ключи инструментария в группах ресурсов:

Import-Module -Name AzureRM
Login-AzureRmAccount
Select-AzureRmSubscription <subscription id> 

Find-AzureRmResource -ExpandProperties -ResourceType "microsoft.insights/components" | select -ExpandProperty Properties | Select Name, InstrumentationKey
person Tobias    schedule 23.02.2018
comment
Используя новый модуль Az, команда для вывода списка всех ключей инструментария из всех групп ресурсов будет Get-AzResource -ExpandProperties -ResourceType "microsoft.insights/components" | Select -ExpandProperty Properties | Select Name, InstrumentationKey - person Pavel Zubkou; 19.12.2018

Что касается получения имени вашего экземпляра App Insights с помощью Instrumentation Key через C #, мне удалось сколотить следующую программу. Документация для Azure SDK очень разрозненная, а пакеты NuGet все еще находятся в стадии предварительной версии.

Установите пакеты NuGet

PM> Install-Package Microsoft.Azure.Management.ApplicationInsights -IncludePrerelease
PM> Install-Package Microsoft.Azure.Services.AppAuthentication -IncludePrerelease

Получение компонентов аналитики приложений

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Azure.Management.ApplicationInsights.Management;
using Microsoft.Azure.Management.ApplicationInsights.Management.Models;
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Rest;

namespace CoreConsoleApp
{
    internal class Program
    {
        private static async Task Main(string[] args)
        {
            // NOTE - see below
            var auth = new AzureServiceTokenProvider();

            const string url = "https://management.azure.com/";

            var token = await auth.GetAccessTokenAsync(url);

            var cred = new TokenCredentials(token);

            var client = new ApplicationInsightsManagementClient(cred)
            {
                SubscriptionId = "<your-subscription-id>",
            };

            var list = new List<ApplicationInsightsComponent>();

            var all = await client.Components.ListAsync();
            list.AddRange(all);

            foreach(var item in list)
            {
                Console.WriteLine($"{item.Name}: {item.InstrumentationKey}");
            }
        }
    }
}

(Обратите внимание, что вам нужно использовать C # 7.1 или новее, чтобы async Task Main в вашем консольном приложении).

Примечание об аутентификации. Конструктор AzureServiceTokenProvider принимает необязательную строку подключения для аутентификации в Azure. У меня он работал без него, так как я использовал az login через Azure CLI. Есть несколько других способов получить учетные данные, некоторые из которых обсуждаются в документации по Java-клиенту.

Я уверен, что есть более эффективный способ запросить только InstrumentationKey, который вы хотите, с помощью запроса OData, но я не мог понять, как это сделать.

В пакете Microsoft.Azure.Management.ResourceManager есть более общий ResourceManagementClient, который позволяет вам делать что-то вроде следующего:

var client = new Microsoft.Azure.Management.ResourceManager.ResourceManagementClient(cred) { SubscriptionId = "<your-subscription-id>" };

var query = new ODataQuery<GenericResourceFilter>(o => o.ResourceType == "microsoft.insights/components")
{
    Filter = "", // filter by Instrumentation Key here?
    Expand = "$expand=Properties",
};

using (var resp = await client.Resources.ListWithHttpMessagesAsync(query))
{
    foreach (var item in resp.Body)
    {
        Console.WriteLine($"Instance name is {item.Name}");
    }
}

Наконец, в этом проекте есть несколько других примеров, которые могут быть полезны.

person Tobias J    schedule 28.03.2019

Это довольно просто, используя Azure CLI:

az monitor app-insights component show --query "[?instrumentationKey=='471b5965-ce0a-4718-9bce-dc4dbcb4255f'].[applicationId, instrumentationKey]"

или вы можете перечислить все экземпляры аналитики вашего приложения, используя:

az monitor app-insights component show --query "[].[applicationId, instrumentationKey]"
person caveman_dick    schedule 23.06.2021

Поздно к вечеринке, но я написал целый скрипт, который откроет страницу App Insights в вашем браузере по умолчанию после того, как вы введете ключ инструментария. Сценарий выполнит цикл по всем подпискам, которые есть у вашего входа в Azure, и найдет их. См. Ссылку здесь - https://vsha041.wordpress.com/2021/07/24/finding-app-insights-instance-from-instrumentation-key/

person Varun Sharma    schedule 24.07.2021