Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Scott Mitchell
Sistem pemantauan kesehatan Microsoft menyediakan cara yang mudah dan dapat disesuaikan untuk mencatat berbagai peristiwa web, termasuk pengecualian yang tidak tertangani. Tutorial ini menjelaskan cara menyiapkan sistem pemantauan kesehatan untuk mencatat pengecualian yang tidak tertangani ke database dan memberi tahu pengembang melalui pesan email.
Pendahuluan
Pengelogan adalah alat yang berguna untuk memantau kesehatan aplikasi yang disebarkan dan untuk mendiagnosis masalah apa pun yang mungkin muncul. Sangat penting untuk mencatat kesalahan yang terjadi dalam aplikasi yang disebarkan sehingga dapat diperbaiki. Peristiwa Error
ini dimunculkan setiap kali pengecualian yang tidak tertangani terjadi dalam aplikasi ASP.NET; tutorial sebelumnya menunjukkan cara memberi tahu pengembang tentang kesalahan dan mencatat detailnya dengan membuat penanganan aktivitas untuk peristiwa tersebut Error
. Namun, membuat Error
penanganan aktivitas untuk mencatat detail kesalahan dan memberi tahu pengembang tidak perlu, karena tugas ini dapat dilakukan oleh ASP. Sistem pemantauan kesehatan NET.
Sistem pemantauan kesehatan diperkenalkan di ASP.NET 2.0 dan dirancang untuk memantau kesehatan aplikasi ASP.NET yang disebarkan dengan mencatat peristiwa yang terjadi selama aplikasi atau masa pakai permintaan. Peristiwa yang dicatat oleh sistem pemantauan kesehatan disebut sebagai peristiwa pemantauan kesehatan atau peristiwa Web, dan meliputi:
- Peristiwa seumur hidup aplikasi, seperti ketika aplikasi dimulai atau dihentikan
- Peristiwa keamanan, termasuk upaya masuk yang gagal dan permintaan otorisasi URL yang gagal
- Kesalahan aplikasi, termasuk pengecualian yang tidak tertangani, melihat pengecualian penguraian status, pengecualian validasi permintaan, dan kesalahan kompilasi, di antara jenis kesalahan lainnya.
Ketika peristiwa pemantauan kesehatan dinaikkan, peristiwa tersebut dapat dicatat ke sejumlah sumber log yang ditentukan. Sistem pemantauan kesehatan dikirim dengan sumber log yang mencatat peristiwa Web ke database Microsoft SQL Server, ke Log Peristiwa Windows, atau melalui pesan email, antara lain. Anda juga dapat membuat sumber log Anda sendiri.
Peristiwa log sistem pemantauan kesehatan, bersama dengan sumber log yang digunakan, didefinisikan dalam Web.config
. Dengan beberapa baris markup konfigurasi, Anda dapat menggunakan pemantauan kesehatan untuk mencatat semua pengecualian yang tidak tertangani ke database dan untuk memberi tahu Anda tentang pengecualian melalui email.
Menjelajahi Konfigurasi Sistem Monitor Kondisi
Perilaku sistem pemantauan kesehatan didefinisikan oleh informasi konfigurasinya, yang terletak di <healthMonitoring>
elemen di Web.config
. Bagian konfigurasi ini mendefinisikan, antara lain, tiga informasi penting berikut:
- Peristiwa pemantauan kesehatan yang, ketika dinaikkan, harus dicatat,
- Sumber log, dan
- Bagaimana setiap peristiwa pemantauan kesehatan yang ditentukan dalam (1) dipetakan ke sumber log yang ditentukan dalam (2).
Informasi ini ditentukan melalui tiga elemen konfigurasi anak: <eventMappings>
, , <providers>
dan <rules>
, masing-masing.
Informasi konfigurasi sistem pemantauan kesehatan default dapat ditemukan dalam Web.config
file di %WINDIR%\Microsoft.NET\Framework\version\CONFIG
folder. Informasi konfigurasi default ini, dengan beberapa markup dihapus untuk brevity, ditunjukkan di bawah ini:
<configuration>
<system.web>
<healthMonitoring>
<eventMappings>
<add name="All Errors" type="System.Web.Management.WebBaseErrorEvent,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" startEventCode="0" endEventCode="2147483647"/>
<add name="Failure Audits" type="System.Web.Management.WebFailureAuditEvent,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" startEventCode="0" endEventCode="2147483647"/>
</eventMappings>
<providers>
<add name="EventLogProvider" type="System.Web.Management.EventLogWebEventProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"/>
<add connectionStringName="LocalSqlServer" maxEventDetailsLength="1073741823" buffer="false" bufferMode="Notification" name="SqlWebEventProvider" type="System.Web.Management.SqlWebEventProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
<rules>
<add name="All Errors Default" eventName="All Errors" provider="EventLogProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:01:00" custom=""/>
<add name="Failure Audits Default" eventName="Failure Audits" provider="EventLogProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:01:00" custom=""/>
</rules>
</healthMonitoring>
</system.web>
</configuration>
Peristiwa pemantauan kesehatan yang menarik didefinisikan dalam <eventMappings>
elemen , yang memberikan nama yang ramah manusia ke kelas peristiwa pemantauan kesehatan. Dalam markup di atas, <eventMappings>
elemen menetapkan nama ramah manusia "Semua Kesalahan" ke peristiwa pemantauan kesehatan jenis WebBaseErrorEvent
dan nama "Audit Kegagalan" ke peristiwa pemantauan kesehatan jenis WebFailureAuditEvent
.
Elemen mendefinisikan <providers>
sumber log, memberi mereka nama yang ramah manusia dan menentukan informasi konfigurasi khusus sumber log. Elemen pertama <add>
mendefinisikan penyedia "EventLogProvider", yang mencatat peristiwa pemantauan kesehatan yang ditentukan menggunakan EventLogWebEventProvider
kelas . Kelas EventLogWebEventProvider
mencatat peristiwa ke Log Peristiwa Windows. Elemen kedua <add>
mendefinisikan penyedia "SqlWebEventProvider", yang mencatat peristiwa ke database Microsoft SQL Server melalui SqlWebEventProvider
kelas . Konfigurasi "SqlWebEventProvider" menentukan string koneksi database (connectionStringName
) di antara opsi konfigurasi lainnya.
Elemen <rules>
memetakan peristiwa yang ditentukan dalam <eventMappings>
elemen untuk mencatat sumber dalam <providers>
elemen. Secara default, ASP.NET aplikasi web mencatat semua pengecualian yang tidak tertangani dan kegagalan audit ke Log Peristiwa Windows.
Mencatat Peristiwa ke Database
Konfigurasi default sistem pemantauan kesehatan dapat disesuaikan berdasarkan aplikasi web-demi-web dengan menambahkan <healthMonitoring>
bagian ke file aplikasi Web.config
. Anda dapat menyertakan elemen tambahan di bagian <eventMappings>
, , <providers>
dan <rules>
dengan menggunakan <add>
elemen . Untuk menghapus pengaturan dari konfigurasi default, gunakan <remove>
elemen , atau gunakan <clear />
untuk menghapus semua nilai default dari salah satu bagian ini. Mari kita konfigurasikan aplikasi web Ulasan Buku untuk mencatat semua pengecualian yang tidak tertangani ke database Microsoft SQL Server menggunakan SqlWebEventProvider
kelas .
Kelas SqlWebEventProvider
adalah bagian dari sistem pemantauan kesehatan dan mencatat peristiwa pemantauan kesehatan ke database SQL Server tertentu. Kelas SqlWebEventProvider
mengharapkan bahwa database yang ditentukan menyertakan prosedur tersimpan bernama aspnet_WebEvent_LogEvent
. Prosedur tersimpan ini diteruskan detail peristiwa dan ditugaskan untuk menyimpan detail peristiwa. Kabar baiknya adalah Anda tidak perlu membuat prosedur tersimpan ini atau tabel untuk menyimpan detail peristiwa. Anda dapat menambahkan objek ini ke database Anda menggunakan alat ini aspnet_regsql.exe
.
Catatan
Alat ini aspnet_regsql.exe
dibahas kembali dalam tutorial Mengonfigurasi Situs Web yang Menggunakan Layanan Aplikasi ketika kami menambahkan dukungan untuk ASP. Layanan aplikasi NET. Akibatnya, database situs web Ulasan Buku sudah berisi aspnet_WebEvent_LogEvent
prosedur tersimpan, yang menyimpan informasi peristiwa ke dalam tabel bernama aspnet_WebEvent_Events
.
Setelah Anda memiliki prosedur dan tabel tersimpan yang diperlukan yang ditambahkan ke database Anda, semua yang tersisa adalah menginstruksikan pemantauan kesehatan untuk mencatat semua pengecualian yang tidak tertangani ke database. Selesaikan ini dengan menambahkan markup berikut ke file situs web Web.config
Anda:
<configuration>
...
<system.web>
...
<healthMonitoring enabled="true">
<eventMappings>
<clear />
<add name="All Errors" type="System.Web.Management.WebBaseErrorEvent"
startEventCode="0" endEventCode="2147483647" />
</eventMappings>
<providers>
<clear />
<add connectionStringName="ReviewsConnectionString" maxEventDetailsLength="1073741823"
buffer="false" name="SqlWebEventProvider"
type="System.Web.Management.SqlWebEventProvider" />
</providers>
<rules>
<clear />
<add name="All Errors Default" eventName="All Errors" provider="SqlWebEventProvider"
profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" />
</rules>
</healthMonitoring>
</system.web>
</configuration>
Markup konfigurasi pemantauan kesehatan di atas menggunakan <clear />
elemen untuk menghapus informasi konfigurasi pemantauan kesehatan yang telah ditentukan sebelumnya dari bagian <eventMappings>
, <providers>
, dan <rules>
. Kemudian menambahkan satu entri ke masing-masing bagian ini.
- Elemen ini
<eventMappings>
mendefinisikan peristiwa pemantauan kesehatan tunggal yang menarik bernama "Semua Kesalahan", yang dimunculkan setiap kali pengecualian yang tidak tertangani terjadi. - Elemen mendefinisikan
<providers>
satu sumber log bernama "SqlWebEventProvider" yang menggunakanSqlWebEventProvider
kelas . AtributconnectionStringName
telah diatur ke "ReviewsConnectionString", yang merupakan nama string koneksi kami yang ditentukan di bagian .<connectionStrings>
- Terakhir, <elemen aturan> menunjukkan bahwa ketika peristiwa "Semua Kesalahan" menerjemahkan bahwa itu harus dicatat menggunakan penyedia "SqlWebEventProvider".
Informasi konfigurasi ini menginstruksikan sistem pemantauan kesehatan untuk mencatat semua pengecualian yang tidak tertangani ke database Ulasan Buku.
Catatan
Kejadian WebBaseErrorEvent
ini hanya dimunculkan untuk kesalahan server; tidak dimunculkan untuk kesalahan HTTP, seperti permintaan sumber daya ASP.NET yang tidak ditemukan. Ini berbeda dari perilaku HttpApplication
peristiwa kelas Error
, yang dimunculkan untuk kesalahan server dan HTTP.
Untuk melihat sistem pemantauan kesehatan beraksi, kunjungi situs web dan hasilkan kesalahan runtime dengan mengunjungi Genre.aspx?ID=foo
. Anda akan melihat halaman kesalahan yang sesuai - Baik Detail Pengecualian Layar Kuning Kematian (saat mengunjungi secara lokal) atau halaman kesalahan kustom (saat mengunjungi situs dalam produksi). Di balik layar, sistem pemantauan kesehatan mencatat informasi kesalahan ke database. Harus ada satu rekaman dalam aspnet_WebEvent_Events
tabel (lihat Gambar 1); rekaman ini berisi informasi tentang kesalahan runtime yang baru saja terjadi.
Gambar 1: Detail Kesalahan Dicatat ke aspnet_WebEvent_Events
Tabel
(Klik untuk melihat gambar ukuran penuh)
Menampilkan Log Kesalahan Di Halaman Web
Dengan konfigurasi situs web saat ini, sistem pemantauan kesehatan mencatat semua pengecualian yang tidak tertangani ke database. Namun, pemantauan kesehatan tidak menyediakan mekanisme apa pun untuk melihat log kesalahan melalui halaman web. Namun, Anda dapat membuat halaman ASP.NET yang menampilkan informasi ini dari database. (Seperti yang akan kita lihat sesaat, Anda dapat memilih untuk mengirim detail kesalahan kepada Anda dalam pesan email.)
Jika Anda membuat halaman seperti itu, pastikan Anda mengambil langkah-langkah untuk mengizinkan hanya pengguna yang berwenang untuk melihat detail kesalahan. Jika situs Anda sudah menggunakan akun pengguna, Anda dapat menggunakan aturan otorisasi URL untuk membatasi akses ke halaman ke pengguna atau peran tertentu. Untuk informasi selengkapnya tentang cara memberikan atau membatasi akses ke halaman web berdasarkan pengguna yang masuk, lihat Tutorial Keamanan Situs Web saya.
Catatan
Tutorial berikutnya menjelajahi sistem pengelogan dan pemberitahuan kesalahan alternatif bernama ELMAH. ELMAH menyertakan mekanisme bawaan untuk melihat log kesalahan dari halaman web dan sebagai umpan RSS.
Mencatat Peristiwa ke Email
Sistem pemantauan kesehatan mencakup penyedia sumber log yang "mencatat" peristiwa ke pesan email. Sumber log menyertakan informasi yang sama yang dicatat ke database dalam isi pesan email. Anda dapat menggunakan sumber log ini untuk memberi tahu pengembang saat peristiwa pemantauan kesehatan tertentu terjadi.
Mari kita perbarui konfigurasi situs web Ulasan Buku sehingga kami menerima email setiap kali pengecualian terjadi. Untuk mencapai hal ini, kita perlu melakukan tiga tugas:
- Konfigurasikan aplikasi web ASP.NET untuk mengirim email. Ini dicapai dengan menentukan bagaimana pesan email dikirim melalui
<system.net>
elemen konfigurasi. Untuk informasi selengkapnya tentang mengirim pesan email dalam aplikasi ASP.NET, lihat Mengirim Email di ASP.NET dan System.Net.Mail. - Daftarkan penyedia sumber log email di
<providers>
elemen , dan - Tambahkan entri ke
<rules>
elemen yang memetakan peristiwa "Semua Kesalahan" ke penyedia sumber log yang ditambahkan pada langkah (2).
Sistem pemantauan kesehatan mencakup dua kelas penyedia sumber log email: SimpleMailWebEventProvider
dan TemplatedMailWebEventProvider
. Kelas SimpleMailWebEventProvider
mengirimkan pesan email teks biasa yang menyertakan detail peristiwa dan memberikan sedikit penyesuaian isi email. TemplatedMailWebEventProvider
Dengan kelas Anda menentukan halaman ASP.NET yang markup yang dirender digunakan sebagai isi untuk pesan email. Kelas ini TemplatedMailWebEventProvider
memberi Anda kontrol yang jauh lebih besar atas konten dan format pesan email, tetapi memerlukan sedikit lebih banyak pekerjaan di muka karena Anda harus membuat halaman ASP.NET yang menghasilkan isi pesan email. Tutorial ini berfokus pada penggunaan SimpleMailWebEventProvider
kelas .
Perbarui elemen sistem <providers>
pemantauan kesehatan dalam Web.config
file untuk menyertakan sumber log untuk SimpleMailWebEventProvider
kelas :
<providers>
<clear />
<add type="System.Web.Management.SimpleMailWebEventProvider"
name="EmailWebEventProvider" buffer="false"
from="support@example.com" to="support@example.com"
subjectPrefix="Book Reviews Runtime Error: " />
<add connectionStringName="ReviewsConnectionString" maxEventDetailsLength="1073741823"
buffer="false" name="SqlWebEventProvider"
type="System.Web.Management.SqlWebEventProvider" />
</providers>
Markup di atas menggunakan SimpleMailWebEventProvider
kelas sebagai penyedia sumber log, dan menetapkannya nama yang mudah diingat "EmailWebEventProvider". Selain itu, <add>
atribut menyertakan opsi konfigurasi tambahan, seperti alamat Ke dan Dari pesan email.
Dengan sumber log email yang ditentukan, semua yang tersisa adalah menginstruksikan sistem pemantauan kesehatan untuk menggunakan sumber ini untuk "mencatat" pengecualian yang tidak tertangani. Ini dicapai dengan menambahkan aturan baru di bagian <rules>
:
<rules>
<clear />
<add name="All Errors To Email" eventName="All Errors" provider="EmailWebEventProvider"
profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" />
<add name="All Errors To Database" eventName="All Errors" provider="SqlWebEventProvider"
profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" />
</rules>
Bagian <rules>
sekarang menyertakan dua aturan. Yang pertama, bernama "Semua Kesalahan Ke Email", mengirimkan semua pengecualian yang tidak tertangani ke sumber log "EmailWebEventProvider". Aturan ini memiliki efek mengirim detail tentang kesalahan di situs web ke alamat Kepada yang ditentukan. Aturan "Semua Kesalahan Ke Database" mencatat detail kesalahan ke database situs. Akibatnya, setiap kali pengecualian yang tidak tertangani terjadi di situs detailnya keduanya dicatat ke database dan dikirim ke alamat email yang ditentukan.
Gambar 2 menunjukkan email yang dihasilkan oleh SimpleMailWebEventProvider
kelas saat mengunjungi Genre.aspx?ID=foo
.
Gambar 2: Detail Kesalahan Dikirim dalam Pesan Email
(Klik untuk melihat gambar ukuran penuh)
Ringkasan
Sistem pemantauan kesehatan ASP.NET dirancang untuk memungkinkan administrator memantau kesehatan aplikasi web yang disebarkan. Peristiwa pemantauan kesehatan dimunculkan ketika tindakan tertentu terungkap, seperti ketika aplikasi berhenti, ketika pengguna berhasil masuk ke situs, atau ketika pengecualian yang tidak tertangani terjadi. Peristiwa ini dapat dicatat ke sejumlah sumber log. Tutorial ini menunjukkan cara mencatat detail pengecualian yang tidak tertangani ke database dan melalui pesan email.
Tutorial ini berfokus pada penggunaan pemantauan kesehatan untuk mencatat pengecualian yang tidak tertangani, tetapi perlu diingat bahwa pemantauan kesehatan dirancang untuk mengukur kesehatan keseluruhan aplikasi ASP.NET yang disebarkan dan mencakup banyak peristiwa pemantauan kesehatan dan sumber log yang tidak dieksplorasi di sini. Terlebih lagi, Anda dapat membuat peristiwa pemantauan kesehatan dan sumber log Anda sendiri, jika kebutuhan muncul. Jika Anda tertarik untuk mempelajari lebih lanjut tentang pemantauan kesehatan, langkah pertama yang baik adalah membaca FAQ pemantauan kesehatan Erik Reitan. Setelah itu, lihat Cara: Gunakan Monitor Kondisi di ASP.NET 2.0.
Selamat Pemrograman!
Bacaan lebih lanjut
Untuk informasi selengkapnya tentang topik yang dibahas dalam tutorial ini, lihat sumber daya berikut: