Что касается получения имени вашего экземпляра 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