it-source

Application Insight 메트릭에서 각 요청에 대한 사용자 지정 속성 추가

criticalcode 2023. 8. 4. 23:08
반응형

Application Insight 메트릭에서 각 요청에 대한 사용자 지정 속성 추가

애플리케이션 인사이트에서 가져온 메트릭에 사용자 지정 속성을 앱의 요청에 추가하고 싶습니다.예를 들어 Azure 포털에서 메트릭을 세그먼트화/그룹화할 수 있는 등의 사용자 로그인 및 테넌트 코드를 추가하려고 합니다.

관련 문서 페이지는 다음과 같습니다: 기본 속성설정

그러나 이 예는 이벤트(즉, 이벤트)에 대한 것입니다.gameTelemetry.TrackEvent("WinGame"); 요청에 :), HTTP 요청에는 해당되지 않습니다.

var context = new TelemetryContext();
context.Properties["Game"] = currentGame.Name;
var gameTelemetry = new TelemetryClient(context);
gameTelemetry.TrackEvent("WinGame");

질문:

  1. 된 코드가 되는 것 : 하는 것입니다.TelemetryContext충분합니까?또한 생성해야 합니까?TelemetryClient그리고 만약 그렇다면, 제가 그것을 현재 요청에 연결해야 합니까?어떻게?
  2. 코드는 요?안에서 괜찮습니까?Application_BeginRequestglobal.asax?

IT 원격 측정을 사용하여 기존 요청에 새 속성을 추가할 수 있습니다.여기에 언급된 이니셜라이저.

아래와 같이 샘플 클래스를 만들고 "Logged"라는 새 속성을 추가했습니다.원격 측정을 요청하려면 "In User"를 선택합니다.

public class CustomTelemetry : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        var requestTelemetry = telemetry as RequestTelemetry;
        if (requestTelemetry == null) return;
        requestTelemetry.Properties.Add("LoggedInUserName", "DummyUser");

    }
}

응용 프로그램 시작 이벤트에 이 클래스를 등록합니다.아래 예제는 제가 만든 샘플 MVC 응용 프로그램을 조각한 것입니다.

 public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        TelemetryConfiguration.Active.TelemetryInitializers
    .Add(new CustomTelemetry());
    }
}

이제 사용자 지정 속성 "Logged"를 볼 수 있습니다.InUserName"은 사용자 지정 요청 속성 그룹 아래에 표시됩니다.(아래 화면 그립을 참조하십시오.)

사용자 지정 속성이 포함된 App Insight

첫 번째 질문인 "내 요청에 사용자 지정 이벤트를 추가하는 방법/요청에 관련 코드가 무엇인가"와 관련하여, 여기서 주요 혼동은 명명과 관련이 있다고 생각합니다.

먼저 Application Insight를 통해 캡처할 수 있는 다양한 종류의 정보가 있다는 점을 지적해야 합니다.

  1. 사용자 지정 이벤트
  2. 부탁한다
  3. 예외.
  4. 추적하다
  5. 페이지 보기
  6. 의존

이를 알게 되면 TrackRequest가 Request와 관련되어 있으므로 TrackEvent는 "Custom Event"와 관련되어 있다고 할 수 있습니다.

요청을 저장하려면 다음 작업을 수행해야 합니다.

 var request = new RequestTelemetry();
 var client = new TelemetryClient();
 request.Name = "My Request";
 client.TrackRequest(request);

사용자 로그인 및 테넌트 코드가 모두 문자열이라고 가정해 보겠습니다.다음 코드를 사용하여 이 정보를 기록하기 위해 새 요청을 할 수 있습니다.

public void LogUserNameAndTenant(string userName, string tenantCode)
{
    var request = new RequestTelemetry();

    request.Name = "My Request";
    request.Context.Properties["User Name"] = userName;
    request.Context.Properties["Tenant Code"] = tenantCode;

    var client = new TelemetryClient();
    client.TrackRequest(request);
}

원격 분석 컨텍스트만 수행하는 것으로는 충분하지 않습니다. 정보를 전송할 수 있는 방법이 필요하기 때문입니다. 여기서 원격 분석 클라이언트가 설치됩니다.

도움이 되길 바랍니다.

정적 기능을 사용할 수 있습니다.HttpContext.CurrentItems사용자 지정 속성 값을 사용자 지정과 함께 기본 원격 측정 핸들러에 전달하기 위한 단기(상태 비저장에 가까운) 저장 공간으로서의 사전ITelemetryInitializer

구현 핸들러

class AppInsightCustomProps : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        var requestTelemetry = telemetry as RequestTelemetry;
        // Is this a TrackRequest() ?
        if (requestTelemetry == null) return;

        var httpCtx = HttpContext.Current;
        if (httpCtx != null)
        {
            var customPropVal = (string)httpCtx.Items["PerRequestMyCustomProp"];
            if (!string.IsNullOrWhiteSpace(customPropVal))
            {
                requestTelemetry.Properties["MyCustomProp"] = customPropVal;
            }
        }
    }
}

연결합니다.이것을 안에 넣으세요.Application_Startglobal.asax.cs

TelemetryConfiguration.Active.TelemetryInitializers.Add(new AppInsightCustomProps());

요청 파이프라인의 원하는 사용자 지정 속성을 프로그래밍합니다.

if (HttpContext.Current != null)
{
    HttpContext.Current.Items["PerRequestMyCustomProp"] = myCustomPropValue;
}

앨런이 언급했듯이, 당신은 다음을 구현할 수 있습니다.IContextInitializerApplication Insights에서 전송하는 모든 원격 측정에 사용자 지정 속성을 추가하는 인터페이스입니다.하지만, 저는 또한 조사하는 것을 제안하고 싶습니다.ITelemtryInitializer인터페이스컨텍스트 이니셜라이저와 매우 유사하지만 원격 측정 클라이언트만 생성하는 것이 아니라 전송되는 모든 원격 측정에 대해 호출됩니다.이것은 당신이 언급한 것처럼 사용자 및 테넌트 관련 정보와 같이 앱의 수명 동안 변경될 수 있는 속성 값을 기록하는 데 더 유용한 것 같습니다.

그게 도움이 되길 바랍니다.다음은 블로그 게시물과 사용 예입니다.ITelemetryInitializer.

해당 문서에서 몇 줄 아래로 스크롤하여 IContextInitializer 구현에 대해 설명합니다.원격 측정이 시작되기 전에 호출되는 모든 방법으로 호출할 수 있습니다.

사용자 지정 속성이 모든 이벤트, 예외, 메트릭, 요청 등에 추가됩니다.

언급URL : https://stackoverflow.com/questions/29036729/adding-custom-properties-for-each-request-in-application-insights-metrics

반응형