具有多个应用程序的应用程序见解

时间:2020-03-12 21:27:41

标签: logging azure-functions trace azure-application-insights azure-web-app-service

我有一个Application Insights,它记录来自App Service和App Function(两个功能的一个资源)的跟踪。 我需要根据资源(应用程序服务或应用程序功能)过滤跟踪,如果可能的话,我还需要根据应用程序功能过滤实际记录的功能。 查看痕迹,我看到以下属性列表:

enter image description here

我想在<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fffdd0" tools:context=".MainActivity"> <android.support.constraint.Guideline android:id="@+id/guidelineV1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.95" /> <android.support.constraint.Guideline android:id="@+id/guidelineV2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.05" /> <android.support.constraint.Guideline android:id="@+id/guidelineH1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.98" /> <android.support.constraint.Guideline android:id="@+id/guidelineH2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.02"> </android.support.constraint.Guideline> <android.support.constraint.Guideline android:id="@+id/guidelineH3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.12"> </android.support.constraint.Guideline> <android.support.constraint.Guideline android:id="@+id/guidelineH4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.4"> </android.support.constraint.Guideline> <android.support.constraint.Guideline android:id="@+id/guidelineH5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.85"> </android.support.constraint.Guideline> <Button android:id="@+id/btn_kalp1" android:layout_width="50dp" android:layout_height="40dp" android:layout_alignParentStart="true" android:background="@drawable/kalp" app:layout_constraintStart_toStartOf="@+id/guidelineV2" app:layout_constraintTop_toTopOf="@+id/guidelineH2" /> <TextView android:id="@+id/tv_countdown1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:text="00:00" android:textColor="@color/colorPrimary" android:textSize="14sp" app:layout_constraintStart_toStartOf="@+id/guidelineV2" app:layout_constraintTop_toBottomOf="@+id/btn_kalp1" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_marginStart="55dp" android:layout_marginTop="20dp" android:text="X" android:textColor="@color/colorPrimary" android:textSize="10sp" app:layout_constraintStart_toStartOf="@+id/btn_kalp1" app:layout_constraintTop_toTopOf="@+id/guidelineH2" /> <TextView android:id="@+id/tv_kalp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_marginStart="10dp" android:layout_marginTop="10dp" android:text="5" android:textColor="@color/colorPrimary" android:textSize="20sp" app:layout_constraintStart_toStartOf="@+id/textView3" app:layout_constraintTop_toTopOf="@id/guidelineH2" /> <Button android:id="@+id/btn_double" android:layout_width="0dp" android:layout_height="47dp" android:layout_marginStart="40dp" android:layout_marginEnd="0dp" android:background="@drawable/xx" app:layout_constraintEnd_toStartOf="@+id/btn_yariyariya" app:layout_constraintStart_toStartOf="@+id/tv_kalp" app:layout_constraintTop_toTopOf="@+id/guidelineH2" /> <TextView android:id="@+id/tv_countdown2x" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="110dp" android:text="00:00" android:textColor="@color/colorPrimary" android:textSize="14sp" app:layout_constraintStart_toStartOf="@id/guidelineV2" app:layout_constraintTop_toBottomOf="@id/btn_double" /> <Button android:id="@+id/btn_yariyariya" android:layout_width="0dp" android:layout_height="49dp" android:layout_marginStart="0dp" android:layout_marginEnd="0dp" android:background="@drawable/fiftyfifty" app:layout_constraintEnd_toStartOf="@+id/btn_skip" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/btn_double" app:layout_constraintTop_toTopOf="@+id/guidelineH2" /> <TextView android:id="@+id/tv_countdown50" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="00:00" android:textColor="@color/colorPrimary" android:textSize="14sp" app:layout_constraintStart_toEndOf="@id/tv_countdown2x" app:layout_constraintTop_toBottomOf="@+id/btn_yariyariya"/> <Button android:id="@+id/btn_skip" android:layout_width="0dp" android:layout_height="45dp" android:layout_marginStart="0dp" android:layout_marginTop="1dp" android:layout_marginEnd="40dp" android:background="@drawable/skip" app:layout_constraintEnd_toStartOf="@+id/btn_satinal" app:layout_constraintStart_toEndOf="@+id/btn_yariyariya" app:layout_constraintTop_toTopOf="@+id/guidelineH2" /> <TextView android:id="@+id/tv_countdownNext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="00:00" android:textColor="@color/colorPrimary" android:textSize="14sp" app:layout_constraintStart_toEndOf="@id/tv_countdown50" app:layout_constraintTop_toBottomOf="@+id/btn_skip" /> <FrameLayout android:id="@+id/container_pop_up" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/btn_satinal" android:layout_width="50dp" android:layout_height="40dp" android:background="@drawable/satinal" android:onClick="satinalMain" app:layout_constraintEnd_toStartOf="@+id/guidelineV1" app:layout_constraintTop_toTopOf="@+id/guidelineH2" /> <TextView android:id="@+id/tv_countdown" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:textColor="@color/colorPrimary" android:textSize="30sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guidelineH3" tools:text="00:30" /> <TextView android:id="@+id/tv_soru" android:layout_width="0dp" android:layout_height="0dp" android:fontFamily="@font/incee" android:gravity="center" android:textAlignment="gravity" android:textColor="#000" android:textSize="18sp" app:layout_constraintBottom_toTopOf="@+id/guidelineH4" app:layout_constraintEnd_toEndOf="@id/guidelineV1" app:layout_constraintStart_toStartOf="@+id/guidelineV2" app:layout_constraintTop_toBottomOf="@+id/tv_countdown" /> <Button android:id="@+id/btn_a" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginStart="60dp" android:layout_marginTop="20dp" android:layout_marginEnd="60dp" android:layout_marginBottom="5dp" android:background="@drawable/gradient" android:elegantTextHeight="true" android:fontFamily="@font/incee" android:shadowColor="#E91E63" android:textAlignment="gravity" android:textColor="#000" android:textSize="12sp" app:layout_constraintBottom_toTopOf="@+id/btn_b" app:layout_constraintEnd_toEndOf="@+id/guidelineV1" app:layout_constraintStart_toStartOf="@+id/guidelineV2" app:layout_constraintTop_toTopOf="@+id/guidelineH4" /> <Button android:id="@+id/btn_b" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginStart="60dp" android:layout_marginTop="5dp" android:layout_marginEnd="60dp" android:layout_marginBottom="5dp" android:background="@drawable/gradient" android:elegantTextHeight="true" android:fontFamily="@font/incee" android:textAlignment="gravity" android:textColor="#000" android:textSize="12sp" app:layout_constraintBottom_toTopOf="@+id/btn_c" app:layout_constraintEnd_toEndOf="@+id/guidelineV1" app:layout_constraintStart_toStartOf="@+id/guidelineV2" app:layout_constraintTop_toBottomOf="@+id/btn_a" /> <Button android:id="@+id/btn_c" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginStart="60dp" android:layout_marginTop="5dp" android:layout_marginEnd="60dp" android:layout_marginBottom="5dp" android:background="@drawable/gradient" android:elegantTextHeight="true" android:fontFamily="@font/incee" android:textAlignment="gravity" android:textColor="#000" android:textSize="12sp" app:layout_constraintBottom_toTopOf="@+id/btn_d" app:layout_constraintEnd_toEndOf="@id/guidelineV1" app:layout_constraintStart_toStartOf="@+id/guidelineV2" app:layout_constraintTop_toBottomOf="@+id/btn_b" /> <Button android:id="@+id/btn_d" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginStart="60dp" android:layout_marginTop="5dp" android:layout_marginEnd="60dp" android:layout_marginBottom="60dp" android:background="@drawable/gradient" android:elegantTextHeight="true" android:fontFamily="@font/incee" android:textAlignment="gravity" android:textColor="#000" android:textSize="12sp" app:layout_constraintBottom_toTopOf="@+id/guidelineH5" app:layout_constraintEnd_toEndOf="@+id/guidelineV1" app:layout_constraintStart_toStartOf="@+id/guidelineV2" app:layout_constraintTop_toBottomOf="@+id/btn_c" app:layout_constraintVertical_bias="0.0" /> <Button android:id="@+id/btn_infoA" android:layout_width="50dp" android:layout_height="50dp" android:background="@drawable/info" app:layout_constraintBottom_toTopOf="@+id/guidelineH5" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" /> <Button android:id="@+id/btn_gec" android:layout_width="75dp" android:layout_height="70dp" android:background="@drawable/next" app:layout_constraintBottom_toTopOf="@id/guidelineH5" app:layout_constraintEnd_toStartOf="@id/guidelineV1" /> <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:adSize="BANNER" app:adUnitId="ca-app-pub-3101578796185185/4912585915" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> </com.google.android.gms.ads.AdView> <Button android:id="@+id/btn_reklam" android:layout_width="50dp" android:layout_height="45dp" android:background="@drawable/plus" android:onClick="startVideoAd" app:layout_constraintStart_toStartOf="@id/guidelineV2" app:layout_constraintTop_toBottomOf="@id/guidelineH5" /> <TextView android:id="@+id/tv_kalp_kazan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="55dp" android:layout_marginTop="15dp" android:layout_marginBottom="5dp" android:fontFamily="@font/incee" android:text="İzle Kazan" android:textColor="#000" android:textSize="15sp" android:textStyle="bold" app:layout_constraintStart_toStartOf="@id/guidelineV2" app:layout_constraintTop_toBottomOf="@id/guidelineH5" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_marginEnd="50dp" android:text="SKOR :" android:textColor="#000" android:textSize="15sp" android:textStyle="bold" app:layout_constraintEnd_toStartOf="@id/guidelineV1" app:layout_constraintTop_toBottomOf="@id/guidelineH5" /> <TextView android:id="@+id/tv_skor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginEnd="25dp" android:text="0" android:textColor="#000" android:textSize="25sp" app:layout_constraintEnd_toStartOf="@id/guidelineV1" app:layout_constraintTop_toBottomOf="@id/guidelineH5" /> 属性中找到资源名称,而是有Application Insights资源名称,这对我来说是无用的,因为所有这些跟踪都来自该资源。

注意:我不喜欢在消息中设置前缀以过滤跟踪的解决方法。

更新

我遵循了Peter Bons的建议,并创建了一个全新的Function V3项目。该项目的基本版本在没有遥测初始化程序的情况下也可以工作,我的意思是正确填充了Cloud_RoleName属性。 然后,我添加了更改以适应示例代码,并且发现当我注入新的Telemetry Client时出现问题。我知道,不建议在App Function中手动注入TelemetryClient,但是我绝对需要将自定义事件发送到Application Insights,据我所知,App Function中默认使用的ILogger接口是不可能的。

Startup.cs

appName

CustomTelemetryInitializer.cs

public class Startup : FunctionsStartup
{
    private TelemetryConfiguration telemetryConfiguration;

    public override void Configure(IFunctionsHostBuilder builder)
    {
        var localRoot = Environment.GetEnvironmentVariable("AzureWebJobsScriptRoot");
        var azureRoot = $"{Environment.GetEnvironmentVariable("HOME")}/site/wwwroot";

        var configBuilder = new ConfigurationBuilder()
            .SetBasePath(localRoot ?? azureRoot)
            .AddEnvironmentVariables()
            .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);

        var configuration = configBuilder.Build();

        if (builder != null)
        {
            this.ConfigureServices(builder.Services, configuration);
        }
    }

    private void ConfigureServices(IServiceCollection services, IConfiguration configuration)
    {
        services.AddSingleton<ITelemetryInitializer>(x => new CustomTelemetryInitializer(configuration["appFunctionName"]));
        telemetryConfiguration = new TelemetryConfiguration(configuration["APPINSIGHTS_INSTRUMENTATIONKEY"]);
        telemetryConfiguration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
        var telemetryClient = new TelemetryClient(telemetryConfiguration);
        services.AddSingleton(telemetryClient);

        services.AddSingleton<ISampleInterface, SampleService>();
    }
}

SampleService.cs

public class CustomTelemetryInitializer : ITelemetryInitializer
{
    private readonly string roleName;

    public CustomTelemetryInitializer(string roleName)
    {
        this.roleName = roleName;
    }

    public void Initialize(ITelemetry telemetry)
    {
        if (string.IsNullOrEmpty(telemetry?.Context?.Cloud?.RoleName))
        {
            telemetry.Context.Cloud.RoleName = roleName;
        }
    }
}

Function.cs

public class SampleService : ISampleInterface
{
    private TelemetryClient telemetryClient;

    public SampleService(TelemetryClient telemetryClient)
    {
        this.telemetryClient = telemetryClient;
    }

    public void TestAppInsights()
    {
        telemetryClient.TrackEvent("Sample Custom Event with init");
        telemetryClient.TrackTrace("Sample Custom Trace with init");
    }
}

1 个答案:

答案 0 :(得分:0)

如何检查所有遥测可用的cloud_RoleName属性?默认情况下,它将使用webapp或函数的名称(包括插槽名称)作为值。

否则,如果要在一个地方添加自定义属性或修改所有遥测的属性,可以使用telemetry initializer,如here所示:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

namespace CustomInitializer.Telemetry
{
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            telemetry.Context.Cloud.RoleName = "HttpTriggered";
        }
    }
}

这避免了由于所有遥测都要通过的一段代码而避免像前面提到的那样为所有痕迹加前缀:

enter image description here

另一件事

[...],但我绝对需要将自定义事件发送到Application Insights,据我所知,App Function中默认使用的ILogger接口是不可能的。

请注意,您可以使用ILogger界面将发出的输出重定向到Application Insights。它将显示为痕迹。