Udostępnij za pośrednictwem


Rozwiązywanie problemów z profilerem usługi Application Insights dla platformy .NET

W tym artykule przedstawiono kroki rozwiązywania problemów i informacje umożliwiające korzystanie z profilera usługi Application Insights dla platformy .NET.

Czy używasz odpowiedniego punktu końcowego programu .NET Profiler?

Obecnie jedynymi regionami, które wymagają modyfikacji punktów końcowych, są platforma Azure Government i platforma Microsoft Azure obsługiwana przez firmę 21Vianet.

Ustawienia aplikacji Chmura dla instytucji rządowych USA Chińska Chmura
ApplicationInsightsProfilerEndpoint https://profiler.monitor.azure.us https://profiler.monitor.azure.cn
ApplicationInsightsEndpoint https://dc.applicationinsights.us https://dc.applicationinsights.azure.cn

Czy aplikacja działa w odpowiedniej wersji?

Profiler jest obsługiwany w wersjach programu .NET Framework nowszych niż 4.6.2.

Jeśli aplikacja internetowa jest aplikacją ASP.NET Core, musi być uruchomiona w najnowszym obsługiwanym środowisku uruchomieniowym ASP.NET Core.

Czy używasz odpowiedniego planu usługi platformy Azure?

Profiler dla platformy .NET nie jest obecnie obsługiwany w bezpłatnych ani współdzielonych planach usługi App Service. Uaktualnij do jednego z podstawowych planów Profiler, aby zacząć pracować.

Uwaga

Komercyjny plan użycia usługi Azure Functions nie jest obsługiwany. Zobacz Profilowanie aplikacji usługi Azure Functions na żywo za pomocą usługi Application Insights.

Szukasz danych programu .NET Profiler w odpowiednim przedziale czasu?

Jeśli dane, które próbujesz wyświetlić, są starsze niż dwa tygodnie, spróbuj ograniczyć filtr czasu i spróbować ponownie. Ślady są usuwane po siedmiu dniach.

Czy znasz częstotliwość próbkowania i obciążenie platformy .NET Profiler?

Program .NET Profiler losowo uruchamia się na dwie minuty w ciągu każdej godziny na każdej maszynie wirtualnej hostującej aplikacje z włączonym profilerem.

Uwaga

Gdy profiler usługi Application Insights dla platformy .NET aktywnie działa i zbiera ślady, zwykle dodaje między 5% do 15% obciążenia procesora CPU i pamięci na serwerze.

Nie ma dodatkowych kosztów przechowywania danych przechwyconych przez program .NET Profiler. Dane są automatycznie usuwane po upływie 15 dni.

Czy możesz uzyskać dostęp do bramy?

Sprawdź, czy zapora lub serwery proxy nie blokują dostępu do tej strony internetowej.

Czy widzisz przekroczenia limitu czasu lub czy musisz sprawdzić, czy program .NET Profiler jest uruchomiony?

Dane profilowania są przekazywane tylko wtedy, gdy można je dołączyć do żądania, które wystąpiło podczas uruchamiania profilera. Program .NET Profiler zbiera dane przez dwie minuty co godzinę. Możesz również wyzwolić profilera, uruchamiając sesję profilowania.

Profiler zapisuje komunikaty śledzenia i zdarzenia niestandardowe do zasobu usługi Application Insights. Możesz użyć tych zdarzeń, aby zobaczyć, jak działa profiler.

Wyszukaj komunikaty śledzenia i zdarzenia niestandardowe wysyłane przez program .NET Profiler do zasobu usługi Application Insights.

  1. W zasobie usługi Application Insights wybierz pozycję Wyszukaj w górnym menu.

    Zrzut ekranu przedstawiający wybieranie przycisku Wyszukaj z zasobu usługi Application Insights.

  2. Użyj następującego ciągu wyszukiwania, aby znaleźć odpowiednie dane:

    stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
    

    Zrzut ekranu przedstawiający wyniki wyszukiwania z wyżej wymienionego ciągu wyszukiwania.

    Powyższe wyniki wyszukiwania zawierają dwa przykłady wyszukiwań z dwóch zasobów sztucznej inteligencji:

    • Jeśli aplikacja nie odbiera żądań, gdy profiler jest uruchomiony, komunikat wyjaśnia, że przekazywanie zostało anulowane z powodu braku aktywności.

    • Profiler został uruchomiony i wysłał zdarzenia niestandardowe, gdy wykrył żądania, które wystąpiły podczas jego działania. ServiceProfilerSample Jeśli jest wyświetlane zdarzenie niestandardowe, oznacza to, że profil został przechwycony i jest dostępny w okienku Wydajności usługi Application Insights.

    Jeśli nie są wyświetlane żadne rekordy, Profiler nie działa lub odpowiada zbyt długo. Upewnij się, że profiler jest włączony w usłudze platformy Azure.

Program .NET Profiler jest włączony, ale żadne ślady nie zostały przechwycone

Nawet jeśli profiler jest włączony, może nie przechwytywać ani przekazywać śladów, szczególnie w takich sytuacjach:

  1. Brak żądań przychodzących do aplikacji:
    Możesz ręcznie wywołać aplikację lub utworzyć test dostępności lub test obciążeniowy.

  2. Brak przychodzących danych telemetrycznych potwierdzonych przez usługę Application Insights:

  3. Ustawienie profilera dla próbkowania jest wyłączone:
    Jeśli nadal ślady profilera nie są dostępne, sprawdź tryb próbkowania profilera.

    1. Otwórz ekran Application Insights i wybierz panel >.
    2. Kliknij pozycję Profiler.
    3. Kliknij przycisk Wyzwalacze.
    4. W obszarze Ustawienia wyzwalacza upewnij się, że przełącznik Próbkowanie jest włączony.
  4. Czy nadal nie załadowano żadnych śladów?
    Utwórz wniosek o pomoc techniczną lub poproś pomoc techniczną społeczności platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.

Podwójne zliczanie w wątkach równoległych

Gdy co najmniej dwa wątki równoległe są skojarzone z żądaniem, łączna miara czasu w przeglądarce stosów może być większa niż czas trwania żądania. W takim przypadku łączny czas wątku jest większy niż rzeczywisty czas, który upłynął.

Na przykład jeden wątek może czekać na zakończenie drugiego. Widz próbuje wykryć tę sytuację i pomija nieinteresujące oczekiwanie. W ten sposób skłania się ku wyświetlaniu zbyt dużej ilości informacji, zamiast pomijania informacji o krytycznym znaczeniu.

Po wyświetleniu równoległych wątków w śladach określ, które wątki czekają, aby móc zidentyfikować krytyczną ścieżkę dla żądania. Zazwyczaj wątek, który szybko przechodzi w stan oczekiwania czeka na inne wątki. Skoncentruj się na innych wątkach i ignoruj czas w oczekujących wątkach.

Rozwiązywanie problemów z profilerem platformy .NET w określonej usłudze platformy Azure

W poniższych sekcjach opisano kroki rozwiązywania problemów dotyczące korzystania z profilera w usłudze Azure App Service.

Azure App Service

Aby profiler platformy .NET działał prawidłowo, upewnij się, że:

  • Aplikacja internetowa ma włączoną usługę Application Insights z odpowiednimi ustawieniami.

  • WebJob ApplicationInsightsProfiler3 jest uruchomiony. Aby sprawdzić zadanie sieciowe:

    1. Przejdź do Kudu. W witrynie Azure Portal:

      1. W wystąpieniu usługi App Service wybierz pozycję Narzędzia zaawansowane w okienku po lewej stronie.
      2. Wybierz Idź.
    2. W górnym menu wybierz Narzędzia>. Okienko WebJobs zostanie otwarte.

      Jeśli aplikacja ApplicationInsightsProfiler3 nie jest wyświetlana, uruchom ponownie aplikację usługi App Service.

      Zrzut ekranu przedstawiający okienko WebJobs, które wyświetla nazwę, stan i ostatni czas uruchomienia zadań.

    3. Aby wyświetlić szczegóły zadania WebJob, w tym dziennik, wybierz link ApplicationInsightsProfiler3 . Zostanie otwarte okienko Szczegóły ciągłego zadania WebJob.

      Zrzut ekranu przedstawiający okienko z szczegółami ciągłego zadania WebJob.

Jeśli program .NET Profiler nadal nie działa, pobierz dziennik i prześlij zgłoszenie do pomocy technicznej Azure.

Sprawdź stronę stanu rozszerzenia usługi diagnostycznej

Jeśli profiler platformy .NET został włączony za pośrednictwem panelu Application Insights w portalu, jest on zarządzany przez rozszerzenie usług diagnostycznych. Możesz sprawdzić stronę stanu tego rozszerzenia, przechodząc do strony https://{site-name}.scm.azurewebsites.net/DiagnosticServices.

Uwaga

Domena linku strony stanu różni się w zależności od chmury. Ta domena jest taka sama jak strona zarządzania Kudu dla usługi App Service.

Na stronie stanu przedstawiono stan instalacji agentów programu .NET Profiler i Snapshot Debugger . Jeśli wystąpił nieoczekiwany błąd, pojawia się wraz z instrukcjami dotyczącymi jego naprawiania.

Aby uzyskać podstawowy adres URL tej strony stanu, możesz użyć witryny zarządzania Kudu dla usługi App Service:

  1. Otwórz aplikację usługi App Service w witrynie Azure Portal.
  2. Wybierz pozycję Narzędzia zaawansowane.
  3. Wybierz Idź.
  4. Na stronie zarządzania Kudu:
    1. Dołącz /DiagnosticServices do adresu URL.
    2. Wybierz Enter.

Kończy się na przykład https://<kudu-url>/DiagnosticServices.

Strona stanu jest podobna do poniższego przykładu.

Zrzut ekranu przedstawiający stronę stanu usług diagnostycznych.

Uwaga

Instalacja bez kodu profilera usługi Application Insights dla platformy .NET jest zgodna z zasadami obsługi platformy .NET Core. Aby uzyskać więcej informacji na temat obsługiwanych środowisk uruchomieniowych, zobacz Zasady pomocy technicznej platformy .NET Core.

Instalacja ręczna

Po skonfigurowaniu programu .NET Profiler aktualizacje są wprowadzane do ustawień aplikacji internetowej. W razie potrzeby można ręcznie zastosować aktualizacje.

Zbyt wiele aktywnych sesji profilowania

W Azure App Service istnieje limit tylko jednej sesji profilowania jednocześnie. Ten limit jest wymuszany na poziomie maszyny wirtualnej we wszystkich aplikacjach i miejscach wdrożenia uruchomionych w planie usługi App Service. Ten limit dotyczy również sesji profilowania rozpoczętych za pośrednictwem narzędzia Diagnozowanie i rozwiązywanie problemów, Kudu i Application Insights Profiler dla platformy .NET.

Jeśli .NET Profiler próbuje rozpocząć sesję w momencie, gdy inna jest już aktywna, błąd jest rejestrowany w dzienniku aplikacji, a także w ciągłym dzienniku WebJob dla ApplicationInsightsProfiler3.

W dziennikach może zostać wyświetlony jeden z następujących komunikatów:

  • Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException
  • Error: StartProfiler failed. Details: System.Runtime.InteropServices.COMException (0xE111005E): Exception from HRESULT: 0xE111005E

Kod 0xE111005E błędu wskazuje, że nie można uruchomić sesji profilowania, ponieważ inna sesja jest już uruchomiona.

Aby uniknąć tego błędu, przenieś niektóre aplikacje internetowe do innego planu usługi App Service lub wyłącz profilera w niektórych aplikacjach. Jeśli używasz przestrzeni wdrożeniowych, koniecznie zatrzymaj wszystkie nieużywane przestrzenie.

Błąd wdrożenia: Katalog nie jest pusty "D:\home\site\wwwroot\App_Data\jobs"

Jeśli ponownie wdrażasz aplikację internetową w zasobie usługi Web Apps z włączonym profilerem platformy .NET, może zostać wyświetlony następujący komunikat:

Katalog nie jest pusty 'D:\home\site\wwwroot\App_Data\jobs'

Ten błąd występuje, jeśli uruchamiasz narzędzie Web Deploy ze skryptów lub z usługi Azure Pipelines. Rozwiąż ten problem, dodając następujące parametry wdrożenia do zadania Web Deploy:

-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$'  -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'

Te parametry usuwają folder używany przez profiler usługi Application Insights dla platformy .NET i odblokowują proces ponownego wdrażania. Nie mają one wpływu na aktualnie uruchomione wystąpienie profilera.

Czy profiler usługi Application Insights dla platformy .NET jest uruchomiony?

Profiler działa jako ciągłe zadanie "WebJob" w aplikacji internetowej. Zasób aplikacji internetowej można otworzyć w witrynie Azure Portal. W okienku Zadania WebJobs sprawdź stan ApplicationInsightsProfiler. Jeśli nie jest uruchomiony, otwórz sekcję Dzienniki, aby uzyskać więcej informacji.

Maszyny wirtualne

Aby sprawdzić, czy profiler platformy .NET jest poprawnie skonfigurowany za pomocą Diagnostyki Azure:

  1. Sprawdź, czy zawartość wdrożonej konfiguracji Diagnostyka Azure jest oczekiwana.

  2. Upewnij się, że Diagnostyka Azure przekazuje prawidłowy klucz iKey w wierszu polecenia profilera.

  3. Sprawdź plik dziennika profilera, aby sprawdzić, czy program .NET Profiler został uruchomiony, ale zwrócił błąd.

Aby sprawdzić ustawienia, które zostały użyte do skonfigurowania Diagnostyka Azure:

  1. Zaloguj się do maszyny wirtualnej.

  2. Otwórz plik dziennika w tej lokalizacji. Wersja wtyczki może być nowsza na maszynie.

    c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
    
  3. W pliku wyszukaj ciągWadCfg, aby znaleźć ustawienia przekazane do maszyny wirtualnej w celu skonfigurowania Diagnostyka Azure.

  4. Sprawdź, czy klucz iKey używany przez odbiornik profilera .NET jest poprawny.

  5. Sprawdź wiersz polecenia, który uruchamia profilera. Argumenty wiersza polecenia znajdują się w następującym pliku (dysk może być c: lub d: , a katalog może być ukryty):

    C:\ProgramData\ApplicationInsightsProfiler\config.json
    
  6. Upewnij się, że klucz iKey w wierszu polecenia profilera jest poprawny.

  7. Korzystając ze ścieżki znalezionej w poprzednim pliku config.json , sprawdź plik dziennika profilera o nazwie BootstrapN.log. Są w nim pokazywane następujące informacje:

    • Informacje debugowania wskazujące ustawienia używane przez profilera.
    • Komunikaty o stanie i błędach z profilera.

    Plik można znaleźć:

    C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    
  8. Jeśli program .NET Profiler jest uruchomiony podczas odbierania żądań przez aplikację, zostanie wyświetlony następujący komunikat: "Działanie wykryte z elementu iKey".

  9. Podczas przekazywania śladów pojawia się następujący komunikat: "Rozpoczynanie przekazywania śladów".

Edytowanie reguł serwera proxy sieci lub zapory

Jeśli aplikacja łączy się z Internetem za pośrednictwem serwera proxy lub zapory, może być konieczne zaktualizowanie reguł w celu komunikowania się z profilerem platformy .NET.

Adresy IP używane przez profiler usługi Application Insights dla platformy .NET znajdują się w tagu usługi Azure Monitor. Aby uzyskać więcej informacji, zobacz dokumentację tagów serwisu.

Rozwiązywanie problemów związanych z "przynieś własne miejsce do przechowywania" (BYOS)

Rozwiązywanie typowych problemów z konfigurowaniem rozwiązania BYOS.

Scenariusz: Template schema '{schema_uri}' isn't supported

Wystąpił błąd podobny do następującego przykładu:

New-AzResourceGroupDeployment : 11:53:49 AM - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'Template schema
'https://schema.management.azure.com/schemas/2020-01-01/deploymentTemplate.json#' is not supported. Supported versions are
'2014-04-01-preview,2015-01-01,2018-05-01,2019-04-01,2019-08-01'. Please see https://aka.ms/arm-template for usage details.'.

Rozwiązania

  • Upewnij się, że $schema właściwość szablonu jest prawidłowa. Musi ona być zgodna z tym wzorcem:

    https://schema.management.azure.com/schemas/{schema_version}/deploymentTemplate.json#
    
  • Upewnij się, że szablon schema_version znajduje się w prawidłowych wartościach: 2014-04-01-preview, 2015-01-01, 2018-05-01, 2019-04-01, 2019-08-01.

Scenariusz: No registered resource provider found for location '{location}'

Wystąpił błąd podobny do następującego przykładu:

New-AzResourceGroupDeployment : 6:18:03 PM - Resource microsoft.insights/components 'byos-test-westus2-ai' failed with message '{
  "error": {
    "code": "NoRegisteredProviderFound",
    "message": "No registered resource provider found for location 'westus2' and API version '2020-03-01-preview' for type 'components'. The supported api-versions are '2014-04-01,
2014-08-01, 2014-12-01-preview, 2015-05-01, 2018-05-01-preview'. The supported locations are ', eastus, southcentralus, northeurope, westeurope, southeastasia, westus2, uksouth,
canadacentral, centralindia, japaneast, australiaeast, koreacentral, francecentral, centralus, eastus2, eastasia, westus, southafricanorth, northcentralus, brazilsouth, switzerlandnorth,
australiasoutheast'."
  }
}'

Rozwiązania

  • Upewnij się, że apiVersion zasobu microsoft.insights/components to 2015-05-01.
  • Upewnij się, że apiVersion zasobu linkedStorageAccount to 2020-03-01-preview.

Scenariusz: Storage account location should match Application Insights component location

Wystąpił błąd podobny do następującego przykładu:

New-AzResourceGroupDeployment : 1:01:12 PM - Resource microsoft.insights/components/linkedStorageAccounts 'byos-test-centralus-ai/serviceprofiler' failed with message '{
  "error": {
    "code": "BadRequest",
    "message": "Storage account location should match AI component location",
    "innererror": {
      "trace": [
        "System.ArgumentException"
      ]
    }
  }
}'

Rozwiązanie

Upewnij się, że lokalizacja zasobu Application Insights jest taka sama jak konto magazynowe.

Wsparcie

Jeśli nadal potrzebujesz pomocy, prześlij bilet pomocy technicznej, klikając ikonę znaku zapytania w witrynie Azure Portal. Dołącz identyfikator korelacji z komunikatu o błędzie.