Udostępnij za pośrednictwem


Monitorowanie usługi Azure Functions za pomocą usługi Azure Monitor Application Insights

Usługa Azure Functions oferuje wbudowaną integrację z usługą Application Insights w celu 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.

Usługa Application Insights zbiera dane dzienników, wydajności i błędów oraz automatycznie wykrywa anomalie wydajności. Usługa Application Insights 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ść. Usługi Application Insights można nawet używać podczas tworzenia lokalnego projektu aplikacji funkcji.

Wymagana instrumentacja usługi Application Insights jest wbudowana w usługę Azure Functions. Wszystko, czego potrzebujesz, to prawidłowy parametry połączenia, aby połączyć aplikację funkcji z zasobem usługi Application Insights. 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 Parametry połączenia.

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 Java 3.x usługi Application Insights. Ten agent umożliwia usłudze Application Insights 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 Application Insights. W obszarze Poziom kolekcji wybierz pozycję Zalecane.

Zrzut ekranu przedstawiający sposób włączania agenta Java usługi AppInsights.

Konfigurowanie

Aby skonfigurować tę funkcję dla aplikacji funkcji platformy Azure, która nie znajduje się w planie zużycia, dodaj zmienne środowiskowe w obszarze Ustawienia aplikacji. Aby przejrzeć dostępne konfiguracje, zobacz Opcje konfiguracji: Azure Monitor Application Insights dla języka Java.

W przypadku usługi Azure Functions w planie zużycia dostępne opcje konfiguracji są ograniczone do APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL i APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL. Aby utworzyć dodatkowe konfiguracje funkcji planu zużycia, wdróż własnego agenta, zobacz Niestandardowy agent śledzenia rozproszonego dla funkcji Języka Java.

Wdrożenie własnego agenta spowoduje wydłużenie czasu zimnego startu dla funkcji planu zużycia.

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 Java usługi Application Insights 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 usługi Application Insights 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 Insights.

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 usługi Application Insights. 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. Śledzone żądania przychodzące przychodzące przychodzące do aplikacji języka Python hostowanej w usłudze Azure Functions nie są automatycznie skorelowane z śledzonym w nim telemetrią. Korelację śledzenia można ręcznie osiągnąć, wyodrębniając element TraceContext bezpośrednio w następujący sposób:

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