Memantau Azure Functions dengan Azure Monitor Application Insights

Azure Functions menawarkan integrasi bawaan dengan Application Insights untuk memantau fungsi. Untuk bahasa selain .NET dan .NET Core, pekerja/ekstensi khusus bahasa lainnya diperlukan untuk mendapatkan manfaat penuh dari pelacakan terdistribusi.

Application Insights mengumpulkan data log, performa, dan kesalahan dan secara otomatis mendeteksi anomali performa. Application Insights mencakup alat analitik yang kuat untuk membantu Anda mendiagnosis masalah dan memahami bagaimana fungsi Anda digunakan. Ketika Anda memiliki visibilitas ke dalam data aplikasi, Anda dapat terus meningkatkan performa dan kegunaan. Anda bahkan dapat menggunakan Application Insights selama pengembangan proyek aplikasi fungsi lokal.

Instrumentasi Application Insights yang diperlukan dibangun ke dalam Azure Functions. Yang Anda butuhkan hanyalah string koneksi yang valid untuk menyambungkan aplikasi fungsi Anda ke sumber daya Application Insights. string koneksi harus ditambahkan ke pengaturan aplikasi Anda saat sumber daya aplikasi fungsi Anda dibuat di Azure. Jika aplikasi fungsi Anda belum memiliki string koneksi, Anda dapat mengaturnya secara manual. Untuk informasi selengkapnya, lihat Memantau eksekusi di Azure Functions dan string Koneksi ion.

Catatan

Pada tanggal 31 Maret 2025, dukungan untuk penyerapan kunci instrumentasi akan berakhir. Penyerapan kunci instrumentasi akan berjalan terus, namun kami tidak akan lagi menyediakan pembaruan atau dukungan terhadap fitur tersebut. Transisi ke string koneksi untuk memanfaatkan kemampuan baru.

Untuk daftar skenario autoinstrumentasi yang didukung, lihat Lingkungan, bahasa, dan penyedia sumber daya yang didukung.

Pelacakan terdistribusi untuk aplikasi Java

Catatan

Fitur ini digunakan untuk memiliki implikasi startup dingin 8 hingga 9 detik, yang telah dikurangi menjadi kurang dari 1 detik. Jika Anda adalah pengadopsi awal fitur ini (misalnya, sebelum Februari 2023), tinjau bagian "Pemecahan Masalah" untuk memperbarui ke versi saat ini dan mendapatkan manfaat dari startup baru yang lebih cepat.

Untuk melihat lebih banyak data dari aplikasi Azure Functions berbasis Java Anda daripada yang dikumpulkan secara default, aktifkan agen Application Insights Java 3.x. Agen ini memungkinkan Application Insights untuk secara otomatis mengumpulkan dan menghubungkan dependensi, log, dan metrik dari pustaka populer dan Azure Software Development Kits (SDK). Telemetri ini selain telemetri permintaan yang sudah diambil oleh Functions.

Dengan menggunakan peta aplikasi dan memiliki tampilan transaksi end-to-end yang lebih lengkap, Anda dapat mendiagnosis masalah dengan lebih baik. Anda memiliki tampilan topologis tentang bagaimana sistem berinteraksi bersama dengan data pada tingkat performa dan kesalahan rata-rata. Anda juga memiliki lebih banyak data untuk diagnostik end-to-end. Anda dapat menggunakan peta aplikasi untuk dengan mudah menemukan akar penyebab masalah keandalan dan hambatan performa berdasarkan per permintaan.

Untuk kasus penggunaan yang lebih canggih, Anda dapat memodifikasi telemetri dengan menambahkan rentang, memperbarui status rentang, dan menambahkan atribut rentang. Anda juga dapat mengirim telemetri kustom dengan menggunakan API standar.

Mengaktifkan pelacakan terdistribusi untuk aplikasi fungsi Java

Pada panel Gambaran Umum aplikasi fungsi, buka Application Insights. Di bawah Tingkat Koleksi, pilih Disarankan.

Cuplikan layar yang memperlihatkan cara mengaktifkan AppInsights Java Agent.

Pemecahan Masalah

Fungsi Java Anda mungkin memiliki waktu mulai yang lambat jika Anda mengadopsi fitur ini sebelum Februari 2023. Dari panel Gambaran Umum aplikasi fungsi, buka Konfigurasi di menu navigasi sisi kiri. Kemudian pilih Pengaturan aplikasi dan gunakan langkah-langkah berikut untuk memperbaiki masalah.

Windows

  1. Periksa untuk melihat apakah pengaturan berikut ada dan hapus:

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. Aktifkan versi terbaru dengan menambahkan pengaturan ini:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Linux Khusus/Premium

  1. Periksa untuk melihat apakah pengaturan berikut ada dan hapus:

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. Aktifkan versi terbaru dengan menambahkan pengaturan ini:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Catatan

Jika versi terbaru agen Application Insights Java tidak tersedia di Azure Functions, unggah secara manual dengan mengikuti instruksi ini.

Menguji konektivitas antara host aplikasi Anda dan layanan penyerapan

Application Insights SDK dan agen mengirim telemetri untuk diserap sebagai panggilan REST ke titik akhir penyerapan kami. Anda dapat menguji konektivitas dari server web atau komputer host aplikasi Anda ke titik akhir layanan penyerapan dengan menggunakan klien REST mentah dari PowerShell atau perintah curl. Lihat Memecahkan masalah telemetri aplikasi yang hilang di Azure Monitor Application Insights.

Log duplikat

Jika Anda menggunakan log4j atau logback untuk pengelogan konsol, pelacakan terdistribusi untuk Java Functions akan membuat log duplikat. Log duplikat ini kemudian dikirim ke Application Insights. Untuk menghindari perilaku ini, gunakan solusi berikut.

Log4j

Tambahkan filter berikut ke log4j.xml Anda:

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

Contoh:

<?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>
Logback

Tambahkan filter berikut ke logback.xml Anda:

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

Contoh:

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

Pelacakan terdistribusi untuk aplikasi fungsi Node.js

Untuk melihat lebih banyak data dari aplikasi Node Azure Functions Anda daripada yang dikumpulkan secara default, instrumen Fungsi Anda menggunakan Distro OpenTelemetry Azure Monitor.

Pelacakan terdistribusi untuk aplikasi fungsi Python

Untuk mengumpulkan telemetri dari layanan seperti Permintaan, urllib3, httpx, PsycoPG2, dan banyak lagi, gunakan Distro OpenTelemetry Azure Monitor. Permintaan masuk yang dilacak yang masuk ke aplikasi Python Anda yang dihosting di Azure Functions tidak akan secara otomatis berkorelasi dengan telemetri yang dilacak di dalamnya. Anda dapat mencapai korelasi jejak secara manual dengan mengekstrak TraceContext langsung seperti yang ditunjukkan di bawah ini:

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),
   ):
      ...

Langkah berikutnya