Mengirim data diagnostik Cloud Service, Virtual Machine, atau Service Fabric ke Application Insights

Layanan cloud, Virtual Machines, Virtual Machine Scale Sets, dan Service Fabric semuanya menggunakan ekstensi Azure Diagnostics untuk mengumpulkan data. Azure Diagnostics mengirim data ke tabel Azure Storage. Namun, Anda juga dapat menyalurkan semua atau sebagian data ke lokasi lain menggunakan ekstensi Azure Diagnostics 1.5 atau yang lebih baru.

Artikel ini menjelaskan cara mengirim data dari ekstensi Azure Diagnostics ke Application Insights.

Konfigurasi diagnostik dijelaskan

Ekstensi Azure Diagnostics 1.5 memperkenalkan sink, yang merupakan lokasi tambahan tempat Anda dapat mengirim data diagnostik.

Contoh konfigurasi sink untuk Application Insights:

<SinksConfig>
    <Sink name="ApplicationInsights">
      <ApplicationInsights>{Insert InstrumentationKey}</ApplicationInsights>
      <Channels>
        <Channel logLevel="Error" name="MyTopDiagData"  />
        <Channel logLevel="Verbose" name="MyLogData"  />
      </Channels>
    </Sink>
</SinksConfig>
"SinksConfig": {
    "Sink": [
        {
            "name": "ApplicationInsights",
            "ApplicationInsights": "{Insert InstrumentationKey}",
            "Channels": {
                "Channel": [
                    {
                        "logLevel": "Error",
                        "name": "MyTopDiagData"
                    },
                    {
                        "logLevel": "Error",
                        "name": "MyLogData"
                    }
                ]
            }
        }
    ]
}
  • Atribut Sinknama adalah nilai string yang mengidentifikasi sink secara unik.

  • Elemen ApplicationInsights menentukan kunci instrumentasi sumber daya Application Insights tempat data diagnostik Azure dikirim.

    • Jika Anda tidak memiliki sumber daya Application Insights yang sudah ada, lihat Membuat sumber daya Application Insights baru untuk informasi selengkapnya tentang membuat sumber daya dan mendapatkan kunci instrumentasi.
    • Jika Anda mengembangkan Cloud Service dengan Azure SDK 2.8 dan yang lebih baru, kunci instrumentasi ini secara otomatis diisi. Nilai didasarkan pada pengaturan konfigurasi APPINSIGHTS_INSTRUMENTATIONKEY saat mengemas proyek Cloud Service. Lihat Menggunakan Application Insights dengan Cloud Services.
  • Elemen Channels berisi satu atau beberapa elemen Channel.

    • Atribut nama secara unik mengacu kepada saluran tersebut.
    • Atribut loglevel memungkinkan Anda menentukan tingkat log yang diizinkan saluran. Tingkat log yang tersedia dalam urutan paling banyak hingga informasi paling sedikit adalah:
      • Verbose
      • Informasi
      • Peringatan
      • Kesalahan
      • Kritis

Saluran bertindak seperti filter dan memungkinkan Anda memilih tingkat log tertentu untuk dikirim ke sink target. Misalnya, Anda dapat mengumpulkan log verbose dan mengirimnya ke penyimpanan, tetapi hanya mengirim Kesalahan ke sink.

Grafik berikut menampilkan hubungan ini.

Diagnostics Public Configuration

Grafik berikut meringkas nilai konfigurasi dan cara kerjanya. Anda dapat menyertakan beberapa sink dalam konfigurasi pada tingkat yang berbeda dalam hierarki. Sink di tingkat atas bertindak sebagai pengaturan global dan yang ditentukan pada elemen individu bertindak seperti ambil alih terhadap pengaturan global tersebut.

Diagnostics Sinks Configuration with Application Insights

Contoh lengkap konfigurasi sink

Berikut ini adalah contoh lengkap file konfigurasi publik yang

  1. mengirim semua kesalahan ke Application Insights (ditentukan pada simpul DiagnosticMonitorConfiguration)
  2. juga mengirim log level Verbose untuk Log Aplikasi (ditentukan pada node Log).
<WadCfg>
  <DiagnosticMonitorConfiguration overallQuotaInMB="4096"
       sinks="ApplicationInsights.MyTopDiagData"> <!-- All info below sent to this channel -->
    <DiagnosticInfrastructureLogs />
    <PerformanceCounters>
      <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
      <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
    </PerformanceCounters>
    <WindowsEventLog scheduledTransferPeriod="PT1M">
      <DataSource name="Application!*" />
    </WindowsEventLog>
    <Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose"
            sinks="ApplicationInsights.MyLogData"/> <!-- This specific info sent to this channel -->
  </DiagnosticMonitorConfiguration>

<SinksConfig>
    <Sink name="ApplicationInsights">
      <ApplicationInsights>{Insert InstrumentationKey}</ApplicationInsights>
      <Channels>
        <Channel logLevel="Error" name="MyTopDiagData"  />
        <Channel logLevel="Verbose" name="MyLogData"  />
      </Channels>
    </Sink>
  </SinksConfig>
</WadCfg>
"WadCfg": {
    "DiagnosticMonitorConfiguration": {
        "overallQuotaInMB": 4096,
        "sinks": "ApplicationInsights.MyTopDiagData", "_comment": "All info below sent to this channel",
        "DiagnosticInfrastructureLogs": {
        },
        "PerformanceCounters": {
            "PerformanceCounterConfiguration": [
                {
                    "counterSpecifier": "\\Processor(_Total)\\% Processor Time",
                    "sampleRate": "PT3M"
                },
                {
                    "counterSpecifier": "\\Memory\\Available MBytes",
                    "sampleRate": "PT3M"
                }
            ]
        },
        "WindowsEventLog": {
            "scheduledTransferPeriod": "PT1M",
            "DataSource": [
                {
                    "name": "Application!*"
                }
            ]
        },
        "Logs": {
            "scheduledTransferPeriod": "PT1M",
            "scheduledTransferLogLevelFilter": "Verbose",
            "sinks": "ApplicationInsights.MyLogData", "_comment": "This specific info sent to this channel"
        }
    },
    "SinksConfig": {
        "Sink": [
            {
                "name": "ApplicationInsights",
                "ApplicationInsights": "{Insert InstrumentationKey}",
                "Channels": {
                    "Channel": [
                        {
                            "logLevel": "Error",
                            "name": "MyTopDiagData"
                        },
                        {
                            "logLevel": "Verbose",
                            "name": "MyLogData"
                        }
                    ]
                }
            }
        ]
    }
}

Di dalam konfigurasi sebelumnya, baris berikut memiliki arti berikut:

Mengirimkan semua data yang sedang dikumpulkan oleh diagnostik Azure

<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights">
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights",
}

Hanya kirim log kesalahan ke sink Application Insights

<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights.MyTopDiagdata">
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights.MyTopDiagData",
}

Kirimkan log aplikasi Verbose ke Application Insights

<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose" sinks="ApplicationInsights.MyLogData"/>
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights.MyLogData",
}

Batasan

  • Saluran hanya jenis log dan bukan penghitung kinerja. Jika Anda menetapkan saluran dengan elemen penghitung kinerja, saluran tersebut akan diabaikan.
  • Tingkat log untuk saluran tidak boleh melebihi tingkat log untuk apa yang sedang dikumpulkan oleh diagnostik Azure. Misalnya, Anda tidak dapat mengumpulkan kesalahan Log Aplikasi di elemen Log dan mencoba mengirim log Verbose ke sink Application Insight. Atribut scheduledTransferLogLevelFilter harus selalu mengumpulkan log yang sama atau lebih dari log yang coba Anda kirim ke sink.
  • Anda tidak dapat mengirim data blob yang dikumpulkan oleh ekstensi Azure Diagnostics ke Application Insights. Misalnya, apa pun yang ditentukan dalam simpul Directories. Untuk Crash Dumps, crash dump yang sebenarnya dikirim ke penyimpanan blob dan hanya pemberitahuan yang dihasilkan crash dump yang dikirim ke Application Insights.

Langkah berikutnya