Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Autor: Scott Mitchell
System monitorowania kondycji firmy Microsoft zapewnia łatwy i dostosowywalny sposób rejestrowania różnych zdarzeń internetowych, w tym nieobsługiwane wyjątki. W tym samouczku opisano konfigurowanie systemu monitorowania kondycji w celu rejestrowania nieobsługiwane wyjątki w bazie danych i powiadamiania deweloperów za pośrednictwem wiadomości e-mail.
Wprowadzenie
Rejestrowanie jest przydatnym narzędziem do monitorowania kondycji wdrożonej aplikacji i diagnozowania wszelkich problemów, które mogą wystąpić. Szczególnie ważne jest, aby rejestrować błędy występujące w wdrożonej aplikacji, aby można było je usunąć. Zdarzenie Error jest zgłaszane za każdym razem, gdy w aplikacji ASP.NET wystąpi nieobsługiwany wyjątek. W poprzednim samouczku pokazano, jak powiadomić dewelopera o błędzie i zarejestrować jego szczegóły, tworząc procedurę obsługi zdarzeń dla Error zdarzenia. Jednak utworzenie procedury obsługi zdarzeń Error w celu zarejestrowania szczegółów błędu i powiadomienia dewelopera jest niepotrzebne, ponieważ to zadanie może być wykonywane przez system monitorowania kondycji ASP.NET.
System monitorowania kondycji został wprowadzony w ASP.NET 2.0 i został zaprojektowany pod kątem monitorowania kondycji wdrożonej aplikacji ASP.NET przez rejestrowanie zdarzeń występujących w okresie istnienia aplikacji lub żądania. Zdarzenia rejestrowane przez system monitorowania kondycji są określane jako zdarzenia monitorowania kondycji lub zdarzenia sieci Web i obejmują:
- Zdarzenia okresu istnienia aplikacji, takie jak po uruchomieniu lub zatrzymaniu aplikacji
- Zdarzenia zabezpieczeń, w tym nieudane próby logowania i nieudane żądania autoryzacji adresu URL
- Błędy aplikacji, w tym nieobsługiwane wyjątki, wyjątki analizowania stanu widoku, wyjątki weryfikacji żądań oraz błędy kompilacji, oraz inne typy błędów.
Gdy wystąpi zdarzenie monitorowania kondycji, można je zarejestrować w dowolnej liczbie określonych źródeł logowania. System monitorowania kondycji jest dostarczany ze źródłami dzienników, które rejestrują zdarzenia internetowe w bazie danych programu Microsoft SQL Server, dziennik zdarzeń systemu Windows lub za pośrednictwem wiadomości e-mail, między innymi. Możesz również utworzyć własne źródła dzienników.
Zdarzenia dzienników systemu monitorowania kondycji wraz ze używanymi źródłami dzienników są definiowane w pliku Web.config. Za pomocą kilku wierszy znaczników konfiguracji można użyć monitorowania stanu zdrowia systemu, aby rejestrować wszystkie nieobsługiwane wyjątki w bazie danych i powiadamiać o wyjątku za pośrednictwem poczty e-mail.
Eksplorowanie konfiguracji systemu monitorowania kondycji
Zachowanie systemu monitorowania kondycji jest definiowane przez informacje o konfiguracji, które znajdują się w elemencie <healthMonitoring> w Web.config. Ta sekcja konfiguracji definiuje między innymi następujące trzy ważne informacje:
- Zdarzenia monitorowania kondycji, które gdy wystąpią, powinny być rejestrowane,
- Źródła dzienników i
- Jak każde zdarzenie monitorowania kondycji zdefiniowane w (1) jest mapowane na źródła dziennika zdefiniowane w (2).
Te informacje są określane za pomocą trzech elementów konfiguracji podrzędnych: <eventMappings>, <providers>i <rules>, odpowiednio.
Informacje o konfiguracji domyślnego Web.config systemu monitorowania kondycji można znaleźć w pliku w %WINDIR%\Microsoft.NET\Framework\version\CONFIG folderze . Poniżej przedstawiono domyślne informacje o konfiguracji, z usuniętymi niektórymi znacznikami dla większej przejrzystości:
<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>
Zdarzenia zdrowotne, które nas interesują, są zdefiniowane w elemencie <eventMappings>, który nadaje przyjazną dla człowieka nazwę klasie tych zdarzeń. W powyższym <eventMappings> znaczniku element przypisuje przyjazną dla człowieka nazwę "Wszystkie błędy" do zdarzeń monitorowania kondycji typu WebBaseErrorEvent i nazwę "Inspekcje niepowodzeń" do zdarzeń monitorowania kondycji typu WebFailureAuditEvent.
Element <providers> definiuje źródła dzienników, nadając im przyjazną dla człowieka nazwę i określając wszelkie informacje o konfiguracji specyficzne dla źródła dziennika. Pierwszy <add> element definiuje dostawcę "EventLogProvider", który rejestruje określone zdarzenia monitorowania kondycji EventLogWebEventProvider przy użyciu klasy . Klasa EventLogWebEventProvider rejestruje zdarzenie w dzienniku zdarzeń systemu Windows. Drugi <add> element definiuje dostawcę "SqlWebEventProvider", który rejestruje zdarzenia w bazie danych programu Microsoft SQL Server za pośrednictwem SqlWebEventProvider klasy . Konfiguracja "SqlWebEventProvider" określa łańcuch połączenia z bazą danych (connectionStringName) oraz inne opcje konfiguracji.
Element <rules> mapuje zdarzenia określone w elemecie <eventMappings> w celu rejestrowania źródeł w elemecie <providers> . Domyślnie aplikacje internetowe ASP.NET rejestrują wszystkie nieobsługiwane wyjątki i niepowodzenia audytu w dzienniku zdarzeń systemu Windows.
Rejestrowanie zdarzeń w bazie danych
Domyślną konfigurację systemu monitorowania kondycji można dostosować dla każdej aplikacji internetowej, dodając sekcję <healthMonitoring> do pliku Web.config aplikacji. Możesz uwzględnić dodatkowe elementy w sekcjach <eventMappings>, <providers> i <rules> przy użyciu elementu <add>. Aby usunąć ustawienie z konfiguracji domyślnej, użyj <remove> elementu lub użyj polecenia <clear /> , aby usunąć wszystkie wartości domyślne z jednej z tych sekcji. Skonfigurujmy aplikację internetową Recenzje książek, aby rejestrować wszystkie nieobsługiwane wyjątki do bazy danych programu Microsoft SQL Server przy użyciu SqlWebEventProvider klasy .
Klasa SqlWebEventProvider jest częścią systemu monitorowania kondycji i rejestruje zdarzenie monitorowania kondycji do określonej bazy danych programu SQL Server. Klasa oczekuje, że określona SqlWebEventProvider baza danych zawiera procedurę składowaną o nazwie aspnet_WebEvent_LogEvent. Ta procedura składowana otrzymuje szczegóły zdarzenia i jest odpowiedzialna za ich przechowywanie. Dobrą wiadomością jest to, że nie trzeba tworzyć ani przechowywanej procedury, ani tabeli do przechowywania szczegółów zdarzenia. Te obiekty można dodać do bazy danych przy użyciu aspnet_regsql.exe narzędzia .
Uwaga
Narzędzie aspnet_regsql.exe było omawiane wcześniej w samouczku Konfigurowanie witryny internetowej korzystającej z usług aplikacji, gdy dodawaliśmy obsługę usług aplikacji platformy ASP.NET. W związku z tym baza danych witryny Book Reviews już zawiera procedurę składowaną aspnet_WebEvent_LogEvent, która przechowuje informacje o zdarzeniu w tabeli o nazwie aspnet_WebEvent_Events.
Po dodaniu niezbędnej procedury składowanej i tabeli do bazy danych wystarczy poinstruować monitorowanie kondycji w celu zarejestrowania wszystkich nieobsługiwanych wyjątków w bazie danych. W tym celu dodaj następujący znacznik do pliku witryny internetowej Web.config :
<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>
Powyższy znacznik konfiguracji monitorowania zdrowia używa elementów <clear /> do czyszczenia wstępnie zdefiniowanych informacji o konfiguracji monitorowania zdrowia z sekcji <eventMappings>, <providers> i <rules>. Następnie dodaje pojedynczy wpis do każdej z tych sekcji.
- Element
<eventMappings>definiuje jedno zdarzenie monitorowania kondycji systemu o nazwie "Wszystkie błędy", które jest generowane za każdym razem, gdy wystąpi nieobsługiwany wyjątek. - Element
<providers>definiuje jedno źródło dziennika o nazwie "SqlWebEventProvider", które używaSqlWebEventProviderklasy . AtrybutconnectionStringNamezostał ustawiony na wartość "ReviewsConnectionString", czyli nazwę stringu połączenia zdefiniowaną w sekcji<connectionStrings>. - Na koniec element <rules> wskazuje, że gdy wystąpi zdarzenie "Wszystkie błędy", powinno ono zostać zarejestrowane przy użyciu dostawcy "SqlWebEventProvider".
Te informacje konfiguracyjne nakazują systemowi monitorowania zdrowia, aby rejestrował wszystkie nieobsługiwane wyjątki do bazy danych Recenzji książek.
Uwaga
Zdarzenie WebBaseErrorEvent jest zgłaszane tylko w przypadku błędów serwera; nie jest zgłaszane w przypadku błędów HTTP, takich jak żądanie dla zasobu ASP.NET, który nie został znaleziony. To zachowanie różni się od zdarzenia HttpApplication klasy Error, który jest wywoływany zarówno dla błędów serwera, jak i HTTP.
Aby zobaczyć, jak działa system monitorowania kondycji, odwiedź witrynę internetową i wygeneruj błąd środowiska uruchomieniowego, odwiedzając stronę Genre.aspx?ID=foo. Powinna zostać wyświetlona odpowiednia strona błędu — ekran "Yellow Screen of Death" pokazujący szczegóły wyjątku (podczas lokalnej wizyty) lub niestandardowa strona błędu (podczas odwiedzania witryny w środowisku produkcyjnym). W tle system monitorowania kondycji zarejestrował informacje o błędzie w bazie danych. W tabeli powinien znajdować się jeden rekord aspnet_WebEvent_Events (patrz Rysunek 1). Ten rekord zawiera informacje o błędzie środowiska uruchomieniowego, który właśnie wystąpił.
Rysunek 1. Szczegóły błędu zostały zarejestrowane w aspnet_WebEvent_Events tabeli
(Kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Wyświetlanie dziennika błędów na stronie sieci Web
Po bieżącej konfiguracji witryny internetowej system monitorowania kondycji rejestruje wszystkie nieobsługiwane wyjątki do bazy danych. Jednak monitorowanie kondycji nie zapewnia żadnego mechanizmu wyświetlania dziennika błędów za pośrednictwem strony internetowej. Można jednak utworzyć stronę ASP.NET wyświetlającą te informacje z bazy danych. (Jak zobaczymy chwilowo, możesz zdecydować się na wysłanie szczegółów błędu w wiadomości e-mail).
Jeśli tworzysz taką stronę, upewnij się, że wykonasz kroki, aby zezwolić tylko autoryzowanym użytkownikom na wyświetlanie szczegółów błędu. Jeśli witryna już korzysta z kont użytkowników, możesz użyć reguł autoryzacji adresów URL, aby ograniczyć dostęp do strony do określonych użytkowników lub ról. Aby uzyskać więcej informacji na temat udzielania lub ograniczania dostępu do stron internetowych na podstawie zalogowanego użytkownika, zapoznaj się z moimi samouczkami dotyczącymi zabezpieczeń witryny internetowej.
Uwaga
W poniższym samouczku zbadany zostanie alternatywny system rejestrowania błędów i powiadomień o nazwie ELMAH. ElMAH zawiera wbudowany mechanizm umożliwiający wyświetlanie dziennika błędów zarówno ze strony internetowej, jak i jako kanału informacyjnego RSS.
Rejestrowanie zdarzeń w wiadomości e-mail
System monitorowania kondycji obejmuje dostawcę źródła dziennika logów, który rejestruje zdarzenie poprzez wiadomość e-mail. Źródło dziennika zawiera te same informacje, które są rejestrowane w bazie danych w treści wiadomości e-mail. Tego źródła dziennika można użyć do powiadamiania dewelopera o wystąpieniu określonego zdarzenia monitorowania kondycji.
Zaktualizujmy konfigurację witryny internetowej Recenzje książek, aby otrzymywać wiadomość e-mail za każdym razem, gdy wystąpi wyjątek. Aby to osiągnąć, musimy wykonać trzy zadania:
- Skonfiguruj aplikację internetową ASP.NET do wysyłania wiadomości e-mail. Jest to realizowane przez określenie sposobu wysyłania wiadomości e-mail za pośrednictwem
<system.net>elementu konfiguracji. Aby uzyskać więcej informacji na temat wysyłania wiadomości e-mail w aplikacji ASP.NET, zobacz Wysyłanie wiadomości e-mail w ASP.NET i System.Net.Mail. - Zarejestruj dostawcę źródła dziennika poczty e-mail w elemecie
<providers>i - Dodaj wpis do elementu
<rules>, który mapuje zdarzenie „Wszystkie błędy” na dostawcę źródła dziennika dodanego w kroku (2).
System monitorowania kondycji obejmuje dwie klasy dostawców źródeł dzienników poczty e-mail: SimpleMailWebEventProvider i TemplatedMailWebEventProvider. Klasa SimpleMailWebEventProvider wysyła wiadomość e-mail w postaci zwykłego tekstu zawierającą szczegóły zdarzenia i zapewnia niewielkie dostosowanie treści wiadomości e-mail.
TemplatedMailWebEventProvider W klasie należy określić stronę ASP.NET, której renderowany znacznik jest używany jako treść wiadomości e-mail. Klasa TemplatedMailWebEventProvider zapewnia znacznie większą kontrolę nad zawartością i formatem wiadomości e-mail, ale wymaga nieco większej pracy z góry, ponieważ musisz utworzyć stronę ASP.NET, która generuje treść wiadomości e-mail. Ten samouczek koncentruje się na korzystaniu z klasy SimpleMailWebEventProvider.
Zaktualizuj element systemu monitorowania stanu zdrowia <providers> w pliku Web.config, aby uwzględnić źródło dziennika dla klasy SimpleMailWebEventProvider.
<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>
Powyższy znacznik używa klasy SimpleMailWebEventProvider jako dostawcy źródła dziennika logów i przypisuje mu przyjazną nazwę "EmailWebEventProvider".
<add> Ponadto atrybut zawiera dodatkowe opcje konfiguracji, takie jak adresy do i od wiadomości e-mail.
pl-PL: Po zdefiniowaniu źródła dziennika poczty e-mail wystarczy poinstruować system monitorowania kondycji, aby używał tego źródła do rejestrowania nieobsługiwanych wyjątków. Jest to realizowane przez dodanie nowej reguły w <rules> sekcji:
<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>
Sekcja <rules> zawiera teraz dwie reguły. Pierwszy o nazwie "Wszystkie błędy do wiadomości e-mail" wysyła wszystkie nieobsługiwane wyjątki do źródła dziennika "EmailWebEventProvider". Ta reguła ma wpływ na wysyłanie szczegółowych informacji o błędach w witrynie internetowej do określonego adresu To. Reguła "Wszystkie błędy do bazy danych" rejestruje szczegóły błędów w bazie danych witryny. W związku z tym za każdym razem, gdy w witrynie wystąpi nieobsługiwany wyjątek, jego szczegóły są rejestrowane w bazie danych i wysyłane na określony adres e-mail.
Rysunek 2 przedstawia wiadomość e-mail wygenerowaną przez klasę SimpleMailWebEventProvider podczas odwiedzania obiektu Genre.aspx?ID=foo.
Rysunek 2. Szczegóły błędu są wysyłane w wiadomości e-mail
(Kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Podsumowanie
System monitorowania kondycji ASP.NET został zaprojektowany tak, aby umożliwić administratorom monitorowanie kondycji wdrożonej aplikacji internetowej. Zdarzenia monitorowania kondycji są zgłaszane, gdy nastąpią pewne działania, takie jak zatrzymanie aplikacji, gdy użytkownik pomyślnie zaloguje się na stronę, lub gdy wystąpi nieobsługiwany wyjątek. Te zdarzenia można rejestrować w dowolnej liczbie źródeł dzienników. W tym samouczku pokazano, jak rejestrować szczegóły nieobsługiwanych wyjątków w bazie danych oraz wysyłać je poprzez wiadomość e-mail.
W tym samouczku skoncentrowano się na używaniu monitorowania stanu zdrowia do rejestrowania nieobsługiwanych wyjątków. Należy jednak pamiętać, że monitorowanie stanu zdrowia jest przeznaczone do mierzenia kompleksowej kondycji wdrożonej aplikacji ASP.NET i obejmuje szereg zdarzeń oraz źródeł dzienników monitorowania stanu zdrowia, które nie zostały tutaj zbadane. Co więcej, możesz utworzyć własne zdarzenia związane z monitorowaniem stanu zdrowia i źródła dzienników, jeśli zajdzie taka potrzeba. Jeśli chcesz dowiedzieć się więcej na temat monitorowania kondycji, dobrym pierwszym krokiem jest zapoznanie się z często zadawanymi pytaniami dotyczącymi monitorowania kondycji Erika Reitana. Następnie zapoznaj się z tematem How To: Use Health Monitoring in ASP.NET 2.0 (Jak używać monitorowania kondycji w ASP.NET 2.0).
Szczęśliwe programowanie!
Dalsze informacje
Aby uzyskać więcej informacji na temat tematów omówionych w tym samouczku, zapoznaj się z następującymi zasobami:
- Monitorowanie kondycji ASP.NET — omówienie
- Konfigurowanie i dostosowywanie systemu monitorowania kondycji ASP.NET
- Często zadawane pytania — monitorowanie kondycji w ASP.NET 2.0
- Instrukcje: wysyłanie wiadomości e-mail na potrzeby powiadomień monitorowania kondycji
- Instrukcje: korzystanie z monitorowania kondycji w ASP.NET
- Monitorowanie kondycji w ASP.NET