microsoft / ApplicationInsights-Profiler-AspNetCore

Application Insights Profiler sample and documentation
MIT License
66 stars 22 forks source link

Role name in application insights profile list #214

Open stephen-rotageek opened 4 months ago

stephen-rotageek commented 4 months ago

Describe the bug The role name in the Application Insights Profiler list is the resource Id of the app insights instead of the application name.

e.g. /subscriptions/subscriptionId/resourcegroups/resourcegroupid/providers/microsoft.insights/components/appinsightsname

To Reproduce Steps to reproduce the behavior:

  1. Follow the steps in the readme of this repo for an MVC project targeting framework net6.0
  2. Deploy to Azure App Services as a docker container.
  3. Run the profiler in app insights, or let the schedule run it.
  4. The role name is the resource Id of the app insights instance instead of the application name.

Expected behavior The role name is the application name in the App insights profiler list.

Screenshots I've attached a screen shot of the profiler list showing the role name is the app insights resource id (identifiers redacted)

Profiler list

Desktop (please complete the following information):

Additional context

Although it shouldn't be required, I've tried creating a custom ITelemetryInitializer to set the role name, but it doesn't have any effect.

  public class TelemetryInitializer : ITelemetryInitializer
  {
      public void Initialize(ITelemetry telemetry)
      {
          string? computerName = Environment.GetEnvironmentVariable("COMPUTERNAME");
          string? appName = Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME");

          telemetry.Context.Cloud.RoleInstance = computerName ?? "Unknown";
          telemetry.Context.Cloud.RoleName = appName ?? "Unknown";
      }
  }

Then using it in program.cs

builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddSingleton<ITelemetryInitializer, TelemetryInitializer>();
builder.Services.AddServiceProfiler();
xiaomi7732 commented 4 months ago

Hey @stephen-rotageek Thanks for the report. We will take a look.

xiaomi7732 commented 4 months ago

Hi @stephen-rotageek, there are actually 2 problems. 1 is addressed in 2.7.0-beta2. An other is on the service side and will take a while to fix.

Here are the details:

stephen-rotageek commented 4 months ago

Thank you for the update @xiaomi7732.

Just to confirm, do we need both issues resolved before RoleName will be available in the profiler list?

Are there any workarounds we could consider?

xiaomi7732 commented 4 months ago

@stephen-rotageek,

Yes, we need both fixed.

With regarding the workaround, you might be able to try to overwrite the value of the appName by using a telemetry initializer.

It sounds like having the proper role name is important to you, do you mind help me understand why?

stephen-rotageek commented 4 months ago

@xiaomi7732 I previously tried overwriting the RoleName with a Telemetry Initializer but it didn't work. I defaulted the value to "Unknown" if the environment variable for the app name (website_site_name) couldn't be retrieved, but even that didn't come through.

  public class TelemetryInitializer : ITelemetryInitializer
  {
      public void Initialize(ITelemetry telemetry)
      {
          string? computerName = Environment.GetEnvironmentVariable("COMPUTERNAME");
          string? appName = Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME");

          telemetry.Context.Cloud.RoleInstance = computerName ?? "Unknown";
          telemetry.Context.Cloud.RoleName = appName ?? "Unknown";
      }
  }

In the program.cs

builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddSingleton<ITelemetryInitializer, TelemetryInitializer>();
builder.Services.AddServiceProfiler();

Regarding the importance of the role name, we are planning to use app profiler across multiple applications (microservices), each feeding into the same app insights to give us combined telemetry, using role name to filter to a subset of apps as needed.

If the role name in the profiler list is the resource Id of the app insights, we won't be able to distinguish which profile came from each app. It will make it impossible to sort and difficult to find the profiles we want to view.

xiaomi7732 commented 4 months ago

@stephen-rotageek , hey, thanks for the explanation, I'll see if we could prioritize the fix. Please understand that the server side fix has more impacts and will be a longer process.

On the work-around side, since our service side is querying appName (not roleNmae), could you please try to overwrite the value of appName field instead, by using the telemetry initializer? Let me know! Thanks.