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.

Skärmbild som visar ett exempel på en programkarta.

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.

Flyout

Undersöka fel

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

Skärmbild av knappen Undersök fel

Skärmbild av felupplevelsen

Undersöka prestanda

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

Skärmbild av knappen Undersök prestanda

Skärmbild av prestandaupplevelse

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.

Skärmbild av knappen Gå till information

Skärmbild av transaktionsinformation från slutet till slut

Visa loggar (analys)

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

Skärmbild av knappen Visa i analys

Skärmbild av analysupplevelsen. Linjediagram som sammanfattar den genomsnittliga svarstiden för en begäran under de senaste 12 timmarna.

Aviseringar

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

Skärmbild av aviseringsknappen

Skärmbild av analysupplevelse

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:

Skärmbild av programkarta

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

  1. 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.

  2. Uppgradera alla komponenter till den senaste SDK-versionen.

  3. Om du använder en Azure Functions C# uppgraderar du till Functions V2.

  4. Bekräfta att molnrollnamnet är korrekt konfigurerat.

  5. 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.

Bild av MapLink-1

Nästa steg