Причина этого заключается в том, что у компании, в которой я работаю, скоро может появиться много микро-сервисов, и они не захотят управлять ресурсами N приложения. Вместо этого мы хотим, чтобы все было централизовано в одной и той же Application Insights (поэтому я не могу использовать оператор объединения для объединения нескольких идей приложения, поскольку мы хотим иметь только одну)
Помните, что ценовая модель App Insights в основном на основе стоимости за ГБ данных. Первая пара ГБ в месяц бесплатно. Таким образом, ваше решение может быть не самым экономичным.
Я думал о добавлении настраиваемых полей в Application Insights, но, похоже, оно не поможет в моей ситуации. https://docs.microsoft.com/en-us/azure/azure-monitor/platform/custom-fields
Для App Insights вы можете использовать пользовательские свойства. Есть несколько способов установить их (используя код!). Один из них - установить их напрямую, как показано здесь :
using Microsoft.ApplicationInsights.DataContracts;
var gameTelemetry = new TelemetryClient();
gameTelemetry.Context.GlobalProperties["Game"] = currentGame.Name;
// Now all telemetry will automatically be sent with the context property:
gameTelemetry.TrackEvent("WinGame");
Имейте в виду, что этот метод добавит только свойства к телеметрии, созданной с использованием экземпляра TelemetryClient
!
другой использует инициализатор телеметрии :
using System;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
namespace MvcWebRole.Telemetry
{
/*
* Custom TelemetryInitializer that overrides the default SDK
* behavior of treating response codes >= 400 as failed requests
*
*/
public class MyTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
var requestTelemetry = telemetry as RequestTelemetry;
// Is this a TrackRequest() ?
if (requestTelemetry == null) return;
int code;
bool parsed = Int32.TryParse(requestTelemetry.ResponseCode, out code);
if (!parsed) return;
if (code >= 400 && code < 500)
{
// If we set the Success property, the SDK won't change it:
requestTelemetry.Success = true;
// Allow us to filter these requests in the portal:
requestTelemetry.Properties["Overridden400s"] = "true";
}
// else leave the SDK to set the Success property
}
}
}
Я предпочитаю этот, поскольку он также будет применяться к телеметрии, созданной каркасом, а не только к пользовательскому телеметрия, созданная с использованием вашего собственного кода.
Я хотел бы знать, возможно ли иметь несколько Azure микро сервисов Kubernetes, указывающих на одни и те же ресурсы Application Insights, и иметь возможность использовать запросы журнала для разделения журналы на имя микро-сервисов.
Теперь, возможно, что-то уже есть. Все телеметрии имеют такие свойства, как cloud_Rolename
& cloud_RoleInstance
:
requests
| project cloud_RoleInstance , cloud_RoleName
, в нем будут отображаться имя контейнера и имя модуля, так что это может быть уже достаточно для вас.
Итак, для Например, это покажет запросы, разделенные на pod:
requests
| summarize count() by cloud_RoleName
Если вы используете C#, вы также можете добавить этот пакет, созданный Microsoft, который будет прикреплять множество деталей AKS к телеметрия, такая как идентификатор модуля, метки модуля, имя набора реплик и т. д. c.