Pemantauan aplikasi untuk Azure App Service dan Python (Pratinjau)

Penting

Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.

Pantau aplikasi web Python Anda di Azure App Services tanpa memodifikasi kode. Panduan ini menunjukkan kepada Anda cara mengaktifkan Azure Monitor Application Insights dan menawarkan tips untuk mengotomatiskan penyebaran skala besar.

Instrumen integrasi populer pustaka Python dalam kode Anda, memungkinkan Anda mengumpulkan dan menghubungkan dependensi, log, dan metrik secara otomatis. Setelah instrumenting, Anda mengumpulkan panggilan dan metrik dari pustaka Python ini:

Instrumentasi Nama pustaka yang didukung Versi yang didukung
Instrumentasi OpenTelemetry Django django Tautan
Instrumentasi OpenTelemetry FastApi fastapi Tautan
Instrumentasi Flask OpenTelemetry flask Tautan
Instrumentasi OpenTelemetry Psycopg2 psycopg2 Tautan
Instrumentasi Permintaan OpenTelemetry requests Tautan
Instrumentasi UrlLib OpenTelemetry urllib Semua
Instrumentasi OpenTelemetry UrlLib3 urllib3 Tautan

Catatan

Jika menggunakan Django, lihat bagian Instrumentasi Django tambahan di artikel ini.

Telemetri pengelogan dikumpulkan pada tingkat pencatat akar. Untuk mempelajari lebih lanjut tentang hierarki pengelogan asli Python, kunjungi dokumentasi pengelogan Python.

Prasyarat

  • Python versi 3.11 atau sebelumnya.
  • App Service harus disebarkan sebagai kode. Kontainer kustom tidak didukung.

Mengaktifkan Application Insights

Cara term mudah untuk memantau aplikasi Python di Azure App Services adalah melalui portal Azure.

Mengaktifkan pemantauan di portal Azure secara otomatis melengkapi aplikasi Anda dengan Application Insights dan tidak memerlukan perubahan kode.

Catatan

Anda hanya boleh menggunakan autoinstrumentasi di App Service jika Anda tidak menggunakan instrumentasi manual OpenTelemetry dalam kode Anda, seperti Distro OpenTelemetry Azure Monitor atau Pengekspor OpenTelemetry Azure Monitor. Hal ini untuk mencegah data duplikat dikirim. Untuk mempelajari selengkapnya tentang ini, lihat bagian pemecahan masalah di artikel ini.

Autoinstrumentasi melalui portal Azure

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

Alihkan pemantauan untuk aplikasi Python Anda di Azure App Service tanpa memerlukan perubahan kode.

Application Insights untuk Python terintegrasi dengan Linux Azure App Service berbasis kode.

Integrasinya ada di pratinjau publik. Ini menambahkan Python SDK, yang ada di GA.

  1. Pilih Application Insights di panel kontrol Azure untuk layanan aplikasi Anda, lalu pilih Aktifkan.

    Cuplikan layar tab Application Insights dengan aktifkan yang dipilih.

  2. Pilih untuk membuat sumber daya baru atau pilih sumber daya Application Insights yang sudah ada untuk aplikasi ini.

    Catatan

    Ketika Anda mengklik OK untuk membuat sumber daya baru, Anda akan diminta untuk Menerapkan pengaturan pemantauan. Memilih Lanjutkan akan menautkan sumber daya Application Insights baru ke layanan aplikasi Anda, dengan melakukan hal tersebut juga akan memicu restart layanan aplikasi Anda.

    Cuplikan layar Ubah dropdown sumber daya Anda.

  3. Anda menentukan sumber daya, dan siap digunakan.

    Cuplikan layar dari instrumen aplikasi Anda.

Konfigurasi

Anda dapat mengonfigurasi dengan variabel lingkungan OpenTelemetry seperti:

Variabel lingkungan Keterangan
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES Menentukan Atribut Sumber Daya OpenTelemetry yang terkait dengan aplikasi Anda. Anda dapat mengatur Atribut Sumber Daya apa pun dengan OTEL_RESOURCE_ATTRIBUTES atau menggunakan OTEL_SERVICE_NAME untuk hanya mengatur service.name.
OTEL_LOGS_EXPORTER Jika diatur ke None, menonaktifkan pengumpulan dan ekspor telemetri pengelogan.
OTEL_METRICS_EXPORTER Jika diatur ke None, menonaktifkan pengumpulan dan ekspor telemetri metrik.
OTEL_TRACES_EXPORTER Jika diatur ke None, menonaktifkan pengumpulan dan ekspor telemetri pelacakan terdistribusi.
OTEL_BLRP_SCHEDULE_DELAY Menentukan interval ekspor pengelogan dalam milidetik. Default ke 5000.
OTEL_BSP_SCHEDULE_DELAY Menentukan interval ekspor pelacakan terdistribusi dalam milidetik. Default ke 5000.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS Menentukan instrumentasi OpenTelemetry mana yang akan dinonaktifkan. Saat dinonaktifkan, instrumentasi tidak dijalankan sebagai bagian dari autoinstrumentasi. Menerima daftar nama pustaka huruf kecil yang dipisahkan koma. Misalnya, atur ke "psycopg2,fastapi" untuk menonaktifkan instrumentasi Psycopg2 dan FastAPI. Ini default ke daftar kosong, memungkinkan semua instrumentasi yang didukung.

Menambahkan pustaka instrumentasi komunitas

Anda dapat mengumpulkan lebih banyak data secara otomatis saat menyertakan pustaka instrumentasi dari komunitas OpenTelemetry.

Perhatian

Kami tidak mendukung atau menjamin kualitas pustaka instrumentasi komunitas. Untuk menyarankan satu untuk distro, posting, atau up-vote kami di komunitas umpan balik kami. Perlu diketahui, beberapa didasarkan pada spesifikasi OpenTelemetry eksperimental dan mungkin memperkenalkan perubahan yang melanggar di masa depan.

Untuk menambahkan Pustaka Instrumentasi OpenTelemetry komunitas, instal melalui file aplikasi requirements.txt Anda. Autoinstrumentasi OpenTelemetry secara otomatis mengambil dan instrumen semua pustaka yang diinstal. Temukan daftar pustaka komunitas di sini.

Mengotomatiskan pemantauan

Untuk mengaktifkan koleksi telemetri dengan Application Insights, hanya pengaturan Aplikasi yang perlu diatur:

Cuplikan layar Pengaturan Aplikasi App Service dengan pengaturan Application Insights yang tersedia.

Definisi pengaturan aplikasi

Nama pengaturan aplikasi Definisi Nilai
APPLICATIONINSIGHTS_CONNECTION_STRING string Koneksi ions untuk sumber daya Application Insights Anda Contoh: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION Ekstensi utama, yang mengontrol pemantauan runtime. ~3

Catatan

Profiler dan snapshot debugger tidak tersedia untuk aplikasi Python

Pengaturan aplikasi App Service dengan Azure Resource Manager

Pengaturan aplikasi untuk Azure App Service dapat dikelola dan dikonfigurasi dengan templat Azure Resource Manager. Anda dapat menggunakan metode ini saat menyebarkan sumber daya App Service baru dengan otomatisasi Resource Manager atau mengubah pengaturan sumber daya yang ada.

Struktur dasar pengaturan aplikasi JSON untuk sumber daya App Service:

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

Untuk contoh templat Resource Manager dengan pengaturan aplikasi yang dikonfigurasi untuk Application Insights, templat ini dapat membantu. Secara khusus, lihat bagian yang dimulai pada baris 238.

Untuk membuat templat Resource Manager dengan pengaturan Application Insights default, mulai proses seolah-olah Anda akan membuat aplikasi web baru dengan Application Insights diaktifkan.

  1. Buat sumber daya App Service baru dengan informasi aplikasi web yang Anda inginkan. Aktifkan Application Insights pada tab Pemantauan .

  2. Pilih Tinjau + buat. Lalu pilih Unduh templat untuk otomatisasi.

    Cuplikan layar yang memperlihatkan menu pembuatan aplikasi web App Service.

    Opsi ini menghasilkan templat Resource Manager terbaru dengan semua pengaturan yang diperlukan dikonfigurasi.

    Cuplikan layar yang memperlihatkan templat aplikasi web App Service.

Dalam sampel berikut, ganti semua instans AppMonitoredSite dengan nama situs Anda:

Catatan

Jika menggunakan Windows, atur ApplicationInsightsAgent_EXTENSION_VERSION ke ~2. Jika menggunakan Linux, atur ApplicationInsightsAgent_EXTENSION_VERSION ke ~3.

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

Mengaktifkan melalui PowerShell

Untuk mengaktifkan pemantauan aplikasi melalui PowerShell, hanya pengaturan aplikasi yang mendasar yang harus diubah. Sampel berikut memungkinkan pemantauan aplikasi untuk situs web yang disebut AppMonitoredSite dalam grup AppMonitoredRGsumber daya . Ini mengonfigurasi data yang akan dikirim ke 012345678-abcd-ef01-2345-6789abcd kunci instrumentasi.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Catatan

Jika menggunakan Windows, atur ApplicationInsightsAgent_EXTENSION_VERSION ke ~2. Jika menggunakan Linux, atur ApplicationInsightsAgent_EXTENSION_VERSION ke ~3.

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Instrumentasi Django

Untuk menggunakan Instrumentasi OpenTelemetry Django, Anda perlu mengatur DJANGO_SETTINGS_MODULE variabel lingkungan di pengaturan App Service untuk mengarahkan dari folder aplikasi Anda ke modul pengaturan Anda. Untuk informasi selengkapnya, lihat dokumentasi Django.

Tanya jawab umum

Apa perbedaan antara metrik standar dari metrik Application Insights vs. Azure App Service?

Application Insights mengumpulkan telemetri untuk permintaan yang berhasil masuk ke aplikasi. Jika kegagalan terjadi di WebApps/WebServer, dan permintaan tidak mencapai aplikasi pengguna, Application Insights tidak memiliki telemetri tentang hal itu.

Durasi untuk serverresponsetime dihitung oleh Application Insights tidak selalu cocok dengan waktu respons server yang diamati oleh Web Apps. Perilaku ini karena Application Insights hanya menghitung durasi ketika permintaan benar-benar mencapai aplikasi pengguna. Jika permintaan macet atau diantrekan di WebServer, waktu tunggu disertakan dalam metrik Web Apps tetapi tidak dalam metrik Application Insights.

Pemecahan Masalah

Di sini kami menyediakan panduan pemecahan masalah kami untuk memantau aplikasi Python di Azure App Services menggunakan autoinstrumentasi.

Telemetri duplikat

Anda hanya boleh menggunakan autoinstrumentasi di App Service jika Anda tidak menggunakan instrumentasi manual OpenTelemetry dalam kode Anda, seperti Distro OpenTelemetry Azure Monitor atau Pengekspor OpenTelemetry Azure Monitor. Menggunakan autoinstrumentasi di atas instrumentasi manual dapat menyebabkan telemetri duplikat dan meningkatkan biaya Anda. Untuk menggunakan autoinstrumentasi OpenTelemetry App Service, pertama-tama hapus instrumentasi manual OpenTelemetry dari kode Anda.

Telemetri hilang

Jika Anda kehilangan telemetri, ikuti langkah-langkah ini untuk mengonfirmasi bahwa autoinstrumentasi diaktifkan dengan benar.

Langkah 1: Periksa bilah Application Insights di sumber daya App Service Anda

Konfirmasikan bahwa autoinstrumentasi diaktifkan di bilah Application Insights di Sumber Daya App Service Anda:

Cuplikan layar tab Application Insights dengan aktifkan yang dipilih.

Langkah 2: Konfirmasikan bahwa Pengaturan Aplikasi Anda sudah benar

Konfirmasikan bahwa ApplicationInsightsAgent_EXTENSION_VERSION pengaturan aplikasi diatur ke nilai ~3 dan bahwa Anda APPLICATIONINSIGHTS_CONNECTION_STRING menunjuk ke sumber daya Application Insights yang sesuai.

Cuplikan layar Pengaturan Aplikasi App Service dengan pengaturan Application Insights yang tersedia.

Langkah 3: Periksa diagnostik autoinstrumentasi dan log status

Navigasikan ke /var/log/applicationinsights/ dan buka status_*.json.

Konfirmasikan bahwa AgentInitializedSuccessfully diatur ke true dan IKey untuk memiliki iKey yang valid.

Berikut adalah contoh file JSON:

    "AgentInitializedSuccessfully":true,
            
    "AppType":"python",
            
    "MachineName":"c89d3a6d0357",
            
    "PID":"47",
            
    "IKey":"00000000-0000-0000-0000-000000000000",
            
    "SdkVersion":"1.0.0"

File applicationinsights-extension.log dalam folder yang sama dapat menampilkan diagnostik bermanfaat lainnya.

Aplikasi Django

Jika aplikasi Anda menggunakan Django dan gagal memulai atau menggunakan pengaturan yang salah, pastikan untuk mengatur DJANGO_SETTINGS_MODULE variabel lingkungan. Lihat bagian Instrumentasi Django untuk detailnya.


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.

Untuk informasi terbaru dan perbaikan bug, lihat catatan rilis. -->

Langkah berikutnya