Monitorowanie usługi Azure Functions przy użyciu usługi Azure Monitor Application Szczegółowe informacje

Usługa Azure Functions oferuje wbudowaną integrację z usługą Application Szczegółowe informacje do monitorowania funkcji. W przypadku języków innych niż .NET i .NET Core potrzebne są inne procesy robocze/rozszerzenia specyficzne dla języka, aby uzyskać pełne korzyści z śledzenia rozproszonego.

Aplikacja Szczegółowe informacje zbiera dane dziennika, wydajności i błędów oraz automatycznie wykrywa anomalie wydajności. Aplikacja Szczegółowe informacje zawiera zaawansowane narzędzia analityczne ułatwiające diagnozowanie problemów i zrozumienie sposobu korzystania z funkcji. Gdy masz wgląd w dane aplikacji, możesz stale poprawiać wydajność i użyteczność. Możesz nawet użyć Szczegółowe informacje aplikacji podczas tworzenia lokalnego projektu aplikacji funkcji.

Wymagana instrumentacja Szczegółowe informacje aplikacji jest wbudowana w usługę Azure Functions. Wszystko, czego potrzebujesz, to prawidłowy parametry połączenia, aby połączyć aplikację funkcji z zasobem application Szczegółowe informacje. Parametry połączenia należy dodać do ustawień aplikacji po utworzeniu zasobu aplikacji funkcji na platformie Azure. Jeśli aplikacja funkcji nie ma jeszcze parametry połączenia, możesz ją ustawić ręcznie. Aby uzyskać więcej informacji, zobacz Monitorowanie wykonań w usłudze Azure Functions i ciągów Połączenie ion.

Uwaga

31 marca 2025 r. zostanie zakończone świadczenie pomocy technicznej dla pozyskiwania klucza instrumentacji. Pozyskiwanie klucza instrumentacji będzie nadal działać, ale nie udostępnimy już aktualizacji ani obsługi funkcji. Przejście do parametry połączenia w celu skorzystania z nowych funkcji.

Aby uzyskać listę obsługiwanych scenariuszy automatycznegoinstrumentacji, zobacz Obsługiwane środowiska, języki i dostawcy zasobów.

Śledzenie rozproszone dla aplikacji Java

Uwaga

Ta funkcja miała wpływ na od 8 do 9 sekund zimnego startu, co zostało zredukowane do mniej niż 1 sekundy. Jeśli wcześniej korzystasz z tej funkcji (na przykład przed lutym 2023 r.), zapoznaj się z sekcją "Rozwiązywanie problemów", aby zaktualizować bieżącą wersję i skorzystać z nowego szybszego uruchamiania.

Aby wyświetlić więcej danych z aplikacji usługi Azure Functions opartych na języku Java niż są zbierane domyślnie, włącz agenta Application Szczegółowe informacje Java 3.x. Ten agent umożliwia usłudze Application Szczegółowe informacje automatyczne zbieranie i korelowanie zależności, dzienników i metryk z popularnych bibliotek i zestawów SDK platformy Azure. Ta telemetria jest dodatkiem do danych telemetrycznych żądania, które zostały już przechwycone przez funkcje.

Korzystając z mapy aplikacji i pełniejszego widoku transakcji kompleksowej, można lepiej zdiagnozować problemy. Przedstawiono topologiczną interakcję systemów z danymi o średniej wydajności i współczynnikach błędów. Masz również więcej danych na potrzeby kompleksowej diagnostyki. Za pomocą mapy aplikacji można łatwo znaleźć główną przyczynę problemów z niezawodnością i wąskimi gardłami wydajności dla poszczególnych żądań.

W przypadku bardziej zaawansowanych przypadków użycia można modyfikować dane telemetryczne, dodając zakresy, aktualizując stan zakresu i dodając atrybuty zakresu. Możesz również wysyłać niestandardowe dane telemetryczne przy użyciu standardowych interfejsów API.

Włączanie śledzenia rozproszonego dla aplikacji funkcji Java

W okienku Przegląd aplikacji funkcji przejdź do pozycji Aplikacja Szczegółowe informacje. W obszarze Poziom kolekcji wybierz pozycję Zalecane.

Zrzut ekranu przedstawiający sposób włączania aplikacji Szczegółowe informacje agenta Java.

Rozwiązywanie problemów

Jeśli ta funkcja została przyjęta przed lutym 2023 r., funkcje Języka Java mogą mieć wolne czasy uruchamiania. W okienku Przegląd aplikacji funkcji przejdź do pozycji Konfiguracja w menu nawigacji po lewej stronie. Następnie wybierz pozycję Ustawienia aplikacji i wykonaj następujące kroki, aby rozwiązać problem.

Windows

  1. Sprawdź, czy istnieją następujące ustawienia i usuń je:

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. Włącz najnowszą wersję, dodając to ustawienie:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Linux Dedicated/Premium

  1. Sprawdź, czy istnieją następujące ustawienia i usuń je:

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. Włącz najnowszą wersję, dodając to ustawienie:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Uwaga

Jeśli najnowsza wersja agenta usługi Application Szczegółowe informacje Java nie jest dostępna w usłudze Azure Functions, przekaż ją ręcznie, postępując zgodnie z tymi instrukcjami.

Testowanie łączności między hostem aplikacji a usługą pozyskiwania

Zestawy SDK Szczegółowe informacje aplikacji i agenci wysyłają dane telemetryczne, aby uzyskać pozyskane jako wywołania REST do naszych punktów końcowych pozyskiwania. Możesz przetestować łączność z serwera internetowego lub maszyny hosta aplikacji do punktów końcowych usługi pozyskiwania przy użyciu pierwotnych klientów REST z poziomu programu PowerShell lub poleceń curl. Zobacz Rozwiązywanie problemów z brakującą telemetrią aplikacji w usłudze Azure Monitor Application Szczegółowe informacje.

Zduplikowane dzienniki

Jeśli używasz log4j funkcji lub logback do rejestrowania konsoli, rozproszone śledzenie dla usługi Java Functions tworzy zduplikowane dzienniki. Te zduplikowane dzienniki są następnie wysyłane do Szczegółowe informacje aplikacji. Aby uniknąć tego zachowania, użyj następujących obejść.

Log4j

Dodaj następujący filtr do log4j.xml:

<Filters>
  <ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>

Przykład:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
      <Filters>
        <ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
      </Filters>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
Rejestrowanie zwrotne

Dodaj następujący filtr do logback.xml:

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  <level>OFF</level>
</filter>  

Przykład:

<configuration debug="true">
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>OFF</level>
      </filter>  
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Śledzenie rozproszone dla aplikacji funkcji Node.js

Aby wyświetlić więcej danych z aplikacji usługi Azure Functions platformy Node niż są zbierane domyślnie, instrumentuj funkcję przy użyciu dystrybucji OpenTelemetry usługi Azure Monitor.

Śledzenie rozproszone dla aplikacji funkcji języka Python

Aby zbierać dane telemetryczne z usług, takich jak Requests, urllib3, httpx, PsycoPG2 i nie tylko, użyj dystrybucji OpenTelemetry usługi Azure Monitor. Śledzenie żądań przychodzących przychodzących do aplikacji języka Python hostowanej w usłudze Azure Functions nie będzie automatycznie skorelowane z śledzonym w nim telemetrią. Korelację śledzenia można ręcznie osiągnąć, wyodrębniając element TraceContext bezpośrednio, jak pokazano poniżej:

import azure.functions as func

from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract

# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()

def main(req: func.HttpRequest, context) -> func.HttpResponse:
   ...
   # Store current TraceContext in dictionary format
   carrier = {
      "traceparent": context.trace_context.Traceparent,
      "tracestate": context.trace_context.Tracestate,
   }
   tracer = trace.get_tracer(__name__)
   # Start a span using the current context
   with tracer.start_as_current_span(
      "http_trigger_span",
      context=extract(carrier),
   ):
      ...

Następne kroki