Programkarta: Tredelade distribuerade program
Med en programkarta kan du lätt identifiera flaskhalsar i prestanda eller felpunkter i alla komponenter i ditt distribuerade program. Varje nod på kartan representerar en programkomponent eller dess beroenden. och har hälso-KPI och aviseringsstatus. Du kan klicka dig igenom från valfri komponent till mer detaljerad diagnostik, till exempel Program Insights händelser. Om din app använder Azure-tjänster kan du också klicka dig vidare till Azure Diagnostics, till exempel SQL Database Advisor- rekommendationer.
Vad är en komponent?
Komponenter är oberoende distribuerade delar av ditt distribuerade/mikrotjänstprogram. Utvecklare och driftteam har synlighet på kodnivå eller åtkomst till telemetri som genereras av dessa programkomponenter.
- Komponenter skiljer sig från "observerade" externa beroenden som SQL, EventHub osv. som ditt team/din organisation kanske inte har åtkomst till (kod eller telemetri).
- Komponenter körs på val annat antal server-/roll-/containerinstanser.
- Komponenterna kan vara separata Insights instrumentationsnycklar (även om prenumerationerna är olika) eller olika roller som rapporterar till en enda Application Insights-instrumenteringsnyckel. I förhandsversionen visas komponenterna oavsett hur de konfigureras.
Sammansatt programkarta
Du kan se den fullständiga programtopologin över flera nivåer av relaterade programkomponenter. Komponenterna kan vara olika program Insights resurser eller olika roller i en enskild resurs. Appkartan hittar komponenter genom att följa HTTP-beroendeanrop som görs mellan servrar med Application Insights SDK installerat.
Den här upplevelsen börjar med progressiv identifiering av komponenterna. Första gången du läser in programkartan utlöses en uppsättning frågor för att identifiera de komponenter som är relaterade till den här komponenten. En knapp i det övre vänstra hörnet uppdateras med antalet komponenter i programmet när de identifieras.
När du klickar på Uppdatera kartkomponenter uppdateras kartan med alla komponenter identifierade tills dess. Beroende på programmets komplexitet kan det ta en minut att läsa in.
Om alla komponenter är roller inom en enda Application Insights resurs krävs inte det här identifieringssteget. Den inledande belastningen för ett sådant program kommer att ha alla dess komponenter.

Ett av de viktigaste målen med den här upplevelsen är att kunna visualisera komplexa topologier med hundratals komponenter.
Klicka på en komponent om du vill se relaterade insikter och gå till prestanda- och feldeklareringsupplevelsen för komponenten.

Undersöka fel
Välj Undersök fel för att starta felfönstret.


Undersöka prestanda
Om du vill felsöka prestandaproblem väljer du Undersök prestanda.


Gå till information
Välj Gå till information för att utforska transaktionsupplevelsen från slutet till slut, som kan erbjuda vyer ned till nivån för anropsstacken.


Visa loggar (analys)
Om du vill fråga och undersöka dina programdata ytterligare klickar du på Visa i Loggar (Analys).


Aviseringar
Om du vill visa aktiva aviseringar och de underliggande regler som gör att aviseringarna utlöses väljer du aviseringar.


Ange eller åsidosätta molnrollens namn
Programkartan använder namnegenskapen för molnroller för att identifiera komponenterna på kartan. Ange eller åsidosätta molnrollens namn manuellt och ändra vad som visas på programkartan:
Anteckning
Application Insights SDK eller Agent lägger automatiskt till egenskapen för molnrollnamn i telemetrin som genereras av komponenter i en Azure App Service miljö.
Skriv anpassad TelemetryInitializer enligt nedan.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
namespace CustomInitializer.Telemetry
{
public class MyTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
{
//set custom role name here
telemetry.Context.Cloud.RoleName = "Custom RoleName";
telemetry.Context.Cloud.RoleInstance = "Custom RoleInstance";
}
}
}
}
ASP.NET appar: Läs in initieraren till den aktiva TelemetryConfiguration
I ApplicationInsights.config :
<ApplicationInsights>
<TelemetryInitializers>
<!-- Fully qualified type name, assembly name: -->
<Add Type="CustomInitializer.Telemetry.MyTelemetryInitializer, CustomInitializer"/>
...
</TelemetryInitializers>
</ApplicationInsights>
En alternativ metod för ASP.NET Web Apps är att instansiera initieraren i koden, till exempel i Global.aspx.cs:
using Microsoft.ApplicationInsights.Extensibility;
using CustomInitializer.Telemetry;
protected void Application_Start()
{
// ...
TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
}
Anteckning
Att lägga till ApplicationInsights.config initierare med eller TelemetryConfiguration.Active använda är inte giltigt ASP.NET Core program.
ASP.NET Core appar: Läs in initieraren till TelemetryConfiguration
För ASP.NET Core program görs att lägga till en TelemetryInitializer ny genom att lägga till den i containern Dependency Injection enligt nedan. Detta görs i ConfigureServices metoden för din Startup.cs -klass.
using Microsoft.ApplicationInsights.Extensibility;
using CustomInitializer.Telemetry;
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}
Förstå molnrollens namn inom kontexten för programkartan
När det gäller hur du tänker på molnrollnamnet kan det vara bra att titta på en programkarta som har flera molnrollnamn:

I programkartan ovanför vart och ett av namnen i gröna rutor finns namnvärden för molnroller för olika aspekter av det här distribuerade programmet. Så för den här appen består dess roller av: Authentication , , , en acmefrontend Inventory Management Payment Processing Worker Role .
När det gäller den här appen representerar vart och ett av dessa molnrollnamn också en unik Application Insights resurs med sina egna instrumentationsnycklar. Eftersom ägaren av det här programmet har åtkomst till var och en av de fyra Insights application Insights-resurser kan programkarta sammanspara en karta över de underliggande relationerna.
För de officiella definitionerna:
[Description("Name of the role the application is a part of. Maps directly to the role name in azure.")]
[MaxStringLength("256")]
705: string CloudRole = "ai.cloud.role";
[Description("Name of the instance where the application is running. Computer name for on-premises, instance name for Azure.")]
[MaxStringLength("256")]
715: string CloudRoleInstance = "ai.cloud.roleInstance";
Molnrollinstansen kan också vara användbar för scenarier där molnrollnamnet talar om för dig att problemet finns någonstans i webbportalen, men du kanske kör din webb-frontend över flera belastningsutjämnade servrar så att du kan öka detaljnivån i ett lager djupare via Kusto-frågor och veta om problemet påverkar alla servrar/instanser på webbsidan eller bara en kan vara mycket viktig.
Ett scenario där du kanske vill åsidosätta värdet för molnrollinstansen kan vara om din app körs i en containermiljö där bara vetskapen om den enskilda servern kanske inte är tillräckligt med information för att hitta ett visst problem.
Mer information om hur du åsidosätter egenskapen för molnrollnamn med telemetriiniitierare finns i Lägg till egenskaper: ITelemetryInitializer.
Felsökning
Om du har problem med att få programkartan att fungera som förväntat kan du prova följande steg:
Allmänt
Kontrollera att du använder en SDK som stöds officiellt. SDK:er som inte stöds eller community-SDK:er har kanske inte stöd för korrelation.
I den här artikeln finns en lista över SDK:er som stöds.
Uppgradera alla komponenter till den senaste SDK-versionen.
Om du använder en Azure Functions C# uppgraderar du till Functions V2.
Bekräfta att molnrollnamnet är korrekt konfigurerat.
Om du saknar ett beroende kontrollerar du att det finns i listan över automatiskt insamlade beroenden. Om inte så kan du ändå spåra det manuellt med ett beroendespårningsanrop.
För många noder på kartan
Programkarta skapar en programnod för varje unikt molnrollnamn som finns i din begärandetelemetri och en beroendenod för varje unik kombination av typ, mål och molnrollnamn i beroendetelemetrin. Om det finns fler än 10 000 noder i telemetrin kan inte programkartan hämta alla noder och länkar, så kartan är ofullständig. Om detta händer visas ett varningsmeddelande när du visar kartan.
Dessutom stöder programkarta endast upp till 1 000 separata ej grupperade noder som återges samtidigt. Programkarta minskar den visuella komplexiteten genom att gruppera beroenden som har samma typ och anropare, men om din telemetri har för många unika molnrollnamn eller för många beroendetyper, kommer den gruppningen inte att vara tillräcklig och kartan kan inte renderas.
För att åtgärda detta måste du ändra instrumentationen för att korrekt ange molnrollens namn, beroendetyp och beroendemålfält.
Beroendemålet ska representera det logiska namnet på ett beroende. I många fall motsvarar det server- eller resursnamnet för beroendet. När det till exempel gäller HTTP-beroenden anges det till värdnamnet. Den får inte innehålla unika ID:er eller parametrar som ändras från en begäran till en annan.
Beroendetypen ska representera den logiska typen av ett beroende. Till exempel är HTTP, SQL eller Azure Blob vanliga beroendetyper. Det får inte innehålla unika ID:er.
Syftet med namnet på molnrollen beskrivs i avsnittet ovan.
Portalfeedback
Använd feedbackalternativet för att ge feedback.

Nästa steg
- Mer information om hur korrelation fungerar i Application Insights finns i artikeln om telemetrikorrelation.
- Diagnostikupplevelsen för transaktioner från end-to-end korrelerar telemetri på serversidan från alla dina application-Insights-övervakade komponenter till en enda vy.
- Information om avancerade korrelationsscenarier i ASP.NET Core och ASP.NET finns i artikeln Spåra anpassade åtgärder.