Mapa do aplicativo: aplicativos distribuídos por triagemApplication Map: Triage Distributed Applications

O mapa do aplicativo ajuda você a identificar gargalos de desempenho ou pontos de acesso com falha em todos os componentes dos seus aplicativos distribuídos.Application Map helps you spot performance bottlenecks or failure hotspots across all components of your distributed application. Cada nó do mapa representa um componente de aplicativo ou suas dependências e esses nós também têm KPIs de integridade e alertas de status.Each node on the map represents an application component or its dependencies; and has health KPI and alerts status. Você pode clicar em qualquer componente para obter diagnóstico mais detalhado, como eventos do Application Insights.You can click through from any component to more detailed diagnostics, such as Application Insights events. Se seu aplicativo usar os serviços do Azure, você também poderá clicar no diagnóstico do Azure, como nas recomendações do Assistente do Banco de Dados SQL.If your app uses Azure services, you can also click through to Azure diagnostics, such as SQL Database Advisor recommendations.

O que é um componente?What is a Component?

Os componentes são partes independentes dos aplicativos de microsserviços/distribuídos.Components are independently deployable parts of your distributed/microservices application. As equipes de operações e desenvolvedores têm acesso ou visibilidade nível de código para telemetria gerada por esses componentes de aplicativos.Developers and operations teams have code-level visibility or access to telemetry generated by these application components.

  • Os componentes são diferentes das dependências externas "observadas", como SQL, EventHub etc., a qual sua organização/equipe pode não ter acesso (código ou telemetria).Components are different from "observed" external dependencies such as SQL, EventHub etc. which your team/organization may not have access to (code or telemetry).
  • Os componentes são executados em qualquer número de instâncias de contêiner/função/servidor.Components run on any number of server/role/container instances.
  • Os componentes podem ser chaves de instrumentação do Application Insights separadas (mesmo se as assinaturas forem diferentes) ou diferentes funções relatando para uma única chave de instrumentação do Application Insights.Components can be separate Application Insights instrumentation keys (even if subscriptions are different) or different roles reporting to a single Application Insights instrumentation key. A experiência do mapa de visualização mostra os componentes independentemente de como eles estão configurados.The preview map experience shows the components regardless of how they are set up.

Mapa do aplicativo compostoComposite Application Map

Você pode ver a topologia do aplicativo completa em vários níveis de componentes de aplicativos relacionados.You can see the full application topology across multiple levels of related application components. Os componentes podem ser recursos diferentes do Application Insights ou funções diferentes em um único recurso.Components could be different Application Insights resources, or different roles in a single resource. O mapa do aplicativo localiza os componentes seguindo qualquer chamada de dependência HTTP feita entre os servidores com o SDK do Application Insights instalado.The app map finds components by following HTTP dependency calls made between servers with the Application Insights SDK installed.

Essa experiência começa com a descoberta progressiva dos componentes.This experience starts with progressive discovery of the components. Quando você carrega o mapa do aplicativo pela primeira vez, um conjunto de consultas é disparado para descobrir os componentes relacionados a esse componente.When you first load the application map, a set of queries is triggered to discover the components related to this component. Um botão no canto superior esquerdo será atualizado com o número de componentes em seu aplicativo, conforme eles são descobertos.A button at the top-left corner will update with the number of components in your application as they are discovered.

Ao clicar em "Atualizar componentes do mapa", o mapa será atualizado com todos os componentes descobertos até aquele momento.On clicking "Update map components", the map is refreshed with all components discovered until that point. Dependendo da complexidade do seu aplicativo, isso pode levar um minuto para carregar.Depending on the complexity of your application, this may take a minute to load.

Se todos os componentes são funções em um único recurso do Application Insights, essa etapa de descoberta não é necessária.If all of the components are roles within a single Application Insights resource, then this discovery step is not required. A carga inicial para esse tipo de aplicativo terá todos os respectivos componentes.The initial load for such an application will have all its components.

Captura de tela mostra um exemplo de um mapa de aplicativo.

Um dos principais objetivos com essa experiência é ser capaz de visualizar topologias complexas com centenas de componentes.One of the key objectives with this experience is to be able to visualize complex topologies with hundreds of components.

Clique em qualquer componente para ver as respectivas informações e acesse a experiência de triagem de desempenho e falha desse componente.Click on any component to see related insights and go to the performance and failure triage experience for that component.

Submenu

Investigar falhasInvestigate failures

Selecione investigar falhas para iniciar o painel de falhas.Select investigate failures to launch the failures pane.

Captura de tela do botão Investigar falhas

Captura de tela da experiência de falhas

Investigar o desempenhoInvestigate performance

Para solucionar problemas de desempenho, selecione investigar desempenho.To troubleshoot performance problems, select investigate performance.

Captura de tela do botão Investigar desempenho

Captura de tela da experiência de desempenho

Acessar detalhesGo to details

Selecione ir para detalhes para explorar a experiência de transação de ponta a ponta, que pode oferecer exibições até o nível da pilha de chamadas.Select go to details to explore the end-to-end transaction experience, which can offer views down to the call stack level.

Captura de tela do botão Acessar detalhes

Captura de tela de detalhes da transação de ponta a ponta

Exibir logs (análise)View Logs (Analytics)

Para consultar e investigar ainda mais os dados de aplicativos, clique em Exibir nos logs (análise).To query and investigate your applications data further, click view in Logs (Analytics).

Captura de tela do botão Exibir na análise

Captura de tela da experiência de análise.

AlertasAlerts

Para exibir alertas ativos e as regras subjacentes que fazem com que os alertas sejam disparados, selecione alertas.To view active alerts and the underlying rules that cause the alerts to be triggered, select alerts.

Captura de tela do botão de alertas

Captura de tela da experiência de análise

Definir ou substituir o nome da função de nuvemSet or override cloud role name

O mapa do aplicativo usa a propriedade nome da função de nuvem para identificar os componentes no mapa.Application Map uses the cloud role name property to identify the components on the map. Para definir ou substituir manualmente o nome da função de nuvem e alterar o que é exibido no mapa do aplicativo:To manually set or override cloud role name and change what gets displayed on the Application Map:

Observação

O SDK ou agente do Application Insights adiciona automaticamente a propriedade nome da função de nuvem à telemetria emitida pelos componentes em um ambiente de serviço Azure App.The Application Insights SDK or Agent automatically adds the cloud role name property to the telemetry emitted by components in an Azure App Service environment.

Escreva personalizada telemetryinitializer personalizado como abaixo.Write custom TelemetryInitializer as below.

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";
            }
        }
    }
}

Aplicativos ASP.NET: inicializador de carga para o TelemetryConfiguration ativoASP.NET apps: Load initializer to the active TelemetryConfiguration

Em ApplicationInsights.config:In ApplicationInsights.config :

    <ApplicationInsights>
      <TelemetryInitializers>
        <!-- Fully qualified type name, assembly name: -->
        <Add Type="CustomInitializer.Telemetry.MyTelemetryInitializer, CustomInitializer"/>
        ...
      </TelemetryInitializers>
    </ApplicationInsights>

Um método alternativo para aplicativos Web ASP.NET é instanciar o inicializador no código, por exemplo, em Global.aspx.cs:An alternate method for ASP.NET Web apps is to instantiate the initializer in code, for example in Global.aspx.cs:

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;

    protected void Application_Start()
    {
        // ...
        TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
    }

Observação

Adicionar inicializador usando ApplicationInsights.config ou usando TelemetryConfiguration.Active não é válido para aplicativos ASP.NET Core.Adding initializer using ApplicationInsights.config or using TelemetryConfiguration.Active is not valid for ASP.NET Core applications.

Aplicativos ASP.NET Core: inicializador de carga para o TelemetryConfigurationASP.NET Core apps: Load initializer to the TelemetryConfiguration

Para aplicativos ASP.NET Core, adicionar um novo TelemetryInitializer é feito adicionando-o ao contêiner de injeção de dependência, conforme mostrado abaixo.For ASP.NET Core applications, adding a new TelemetryInitializer is done by adding it to the Dependency Injection container, as shown below. Isso é feito no método ConfigureServices de sua classe Startup.cs.This is done in ConfigureServices method of your Startup.cs class.

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

Noções básicas sobre o nome da função de nuvem no contexto do mapa do aplicativoUnderstanding cloud role name within the context of the Application Map

No que diz respeito a como pensar sobre o nome da função de nuvem, pode ser útil examinar um mapa de aplicativo que tem vários nomes de função de nuvem presentes:As far as how to think about cloud role name, it can be helpful to look at an Application Map that has multiple cloud role names present:

Captura de tela do mapa do aplicativo

No mapa do aplicativo acima, cada um dos nomes em caixas verdes são valores de nome de função de nuvem para diferentes aspectos desse aplicativo distribuído específico.In the Application Map above each of the names in green boxes are cloud role name values for different aspects of this particular distributed application. Portanto, para esse aplicativo, suas funções consistem em: Authentication , acmefrontend , Inventory Management , a Payment Processing Worker Role .So for this app its roles consist of: Authentication, acmefrontend, Inventory Management, a Payment Processing Worker Role.

No caso desse aplicativo, cada um desses nomes de função de nuvem também representa um recurso de Application Insights exclusivo diferente com suas próprias chaves de instrumentação.In the case of this app each of those cloud role names also represents a different unique Application Insights resource with their own instrumentation keys. Como o proprietário deste aplicativo tem acesso a cada um desses quatro recursos de Application Insights diferentes, o mapa de aplicativos é capaz de reunir um mapa das relações subjacentes.Since the owner of this application has access to each of those four disparate Application Insights resources, Application Map is able to stitch together a map of the underlying relationships.

Para as definições oficiais:For the official definitions:

   [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";

Como alternativa, a instância de função de nuvem pode ser útil para cenários em que o nome da função de nuvem informa que o problema está em algum lugar no front-end da Web, mas você pode estar executando seu front-end da Web em vários servidores com balanceamento de carga, de modo que seja capaz de analisar uma camada mais profunda por meio de consultas Kusto e saber se o problema está afetando todos os servidores/instâncias de front-end da Web, ou apenas um pode ser extremamente importante.Alternatively, cloud role instance can be helpful for scenarios where cloud role name tells you the problem is somewhere in your web front-end, but you might be running your web front-end across multiple load-balanced servers so being able to drill in a layer deeper via Kusto queries and knowing if the issue is impacting all web front-end servers/instances or just one can be extremely important.

Um cenário em que você talvez queira substituir o valor para a instância de função de nuvem poderia ser se seu aplicativo estiver sendo executado em um ambiente em contêineres, onde apenas saber se o servidor individual pode não ser informações suficientes para localizar um determinado problema.A scenario where you might want to override the value for cloud role instance could be if your app is running in a containerized environment where just knowing the individual server might not be enough information to locate a given issue.

Para obter mais informações sobre como substituir a propriedade de nome da função de nuvem por inicializadores de telemetria, consulte Adicionar propriedades: ITelemetryInitializer.For more information about how to override the cloud role name property with telemetry initializers, see Add properties: ITelemetryInitializer.

Solução de problemasTroubleshooting

Se você estiver tendo dificuldades para obter o Mapa do aplicativo para trabalhar conforme esperado, tente essas etapas:If you're having trouble getting Application Map to work as expected, try these steps:

GeralGeneral

  1. Certifique-se que você está usando um SDK com suporte oficial.Make sure you're using an officially supported SDK. SDKs de comunidade/sem suporte podem não dar suporte à correlação.Unsupported/community SDKs might not support correlation.

    Consulte este artigo para obter uma lista dos SDKs com suporte.Refer to this article for a list of supported SDKs.

  2. Atualize todos os componentes para a versão mais recente do SDK.Upgrade all components to the latest SDK version.

  3. Se você estiver usando Azure Functions com C#, atualize para o Functions v2.If you're using Azure Functions with C#, upgrade to Functions V2.

  4. Confirme se o nome da função de nuvem está configurado corretamente.Confirm cloud role name is correctly configured.

  5. Se estiver faltando uma dependência, verifique se ele está na lista de dependências coletadas automaticamente.If you're missing a dependency, make sure it's in the list of auto-collected dependencies. Se não, você ainda poderá acompanhá-lo manualmente com uma chamada acompanhar dependência.If not, you can still track it manually with a track dependency call.

Muitos nós no mapaToo many nodes on the map

O mapa de aplicativos constrói um nó de aplicativo para cada nome de função de nuvem exclusivo presente na telemetria de solicitação e um nó de dependência para cada combinação exclusiva de tipo, destino e nome da função de nuvem em sua telemetria de dependência.Application Map constructs an application node for each unique cloud role name present in your request telemetry and a dependency node for each unique combination of type, target, and cloud role name in your dependency telemetry. Se houver mais de 10.000 nós em sua telemetria, o mapa do aplicativo não poderá buscar todos os nós e links, de modo que o mapa estará incompleto.If there are more than 10,000 nodes in your telemetry, Application Map will not be able to fetch all the nodes and links, so your map will be incomplete. Se isso acontecer, uma mensagem de aviso será exibida ao exibir o mapa.If this happens, a warning message will appear when viewing the map.

Além disso, o mapa de aplicativos dá suporte apenas a até 1000 nós desagrupados separados ao mesmo tempo.In addition, Application Map only supports up to 1000 separate ungrouped nodes rendered at once. O mapa do aplicativo reduz a complexidade visual agrupando dependências que têm o mesmo tipo e chamadores, mas se a telemetria tiver muitos nomes de função de nuvem exclusivos ou muitos tipos de dependência, esse agrupamento será insuficiente e o mapa não poderá ser renderizado.Application Map reduces visual complexity by grouping dependencies together that have the same type and callers, but if your telemetry has too many unique cloud role names or too many dependency types, that grouping will be insufficient, and the map will be unable to render.

Para corrigir isso, você precisará alterar sua instrumentação para definir corretamente o nome da função de nuvem, o tipo de dependência e os campos de destino de dependência.To fix this, you'll need to change your instrumentation to properly set the cloud role name, dependency type, and dependency target fields.

  • O destino de dependência deve representar o nome lógico de uma dependência.Dependency target should represent the logical name of a dependency. Em muitos casos, é equivalente ao nome do servidor ou do recurso da dependência.In many cases, it's equivalent to the server or resource name of the dependency. Por exemplo, no caso de dependências HTTP, ele é definido como o nome do host.For example, in the case of HTTP dependencies it is set to the hostname. Ele não deve conter IDs ou parâmetros exclusivos que se alteram de uma solicitação para outra.It should not contain unique IDs or parameters that change from one request to another.

  • O tipo de dependência deve representar o tipo lógico de uma dependência.Dependency type should represent the logical type of a dependency. Por exemplo, HTTP, SQL ou BLOB do Azure são tipos de dependência típicos.For example, HTTP, SQL or Azure Blob are typical dependency types. Ele não deve conter IDs exclusivas.It should not contain unique IDs.

  • A finalidade do nome da função de nuvem é descrita na seção acima.The purpose of cloud role name is described in the above section.

Comentários do PortalPortal feedback

Para fornecer feedback, use a opção de feedback.To provide feedback, use the feedback option.

Imagem de MapLink-1

Próximas etapasNext steps