Общие сведения о мониторинге работоспособности системы ASP.NET
Обновлен: Ноябрь 2007
Мониторинг работоспособности системы ASP.NET позволяет администраторам системы следить за состоянием развертываемых веб-приложений.
Примечание. |
---|
Для порождения события мониторинга работоспособности требуется как минимум средний уровень доверия. |
В этом разделе рассматриваются следующие темы:
Сценарии
Функции мониторинга работоспособности ASP.NET
Базовые сведения
Примеры кода
Ссылки на классы
Сценарии
Мониторинг работоспособности ASP.NET позволяет выполнять следующие задачи:
Отслеживать выполнение приложения, чтобы убедиться в его работоспособности.
Быстро диагностировать приложения или системы, в которых возникают ошибки.
Оценить значимость событий во время жизненного цикла приложения.
Отслеживать выполняющиеся приложения ASP.NET как отдельно, так и в веб-форме.
Записывать в журнал события, которые не обязательно относятся к ошибкам приложений ASP.NET.
К началу
Функциональные возможности
Система мониторинга работоспособности системы ASP.NET включает в себя следующие элементы:
Типы событий, упаковывающие сведения о работоспособности приложения.
Типы поставщиков, обрабатывающие сведения о событиях.
Дополнительные типы, с помощью которых можно управлять событиями работоспособности.
К началу
Базовые сведения
С помощью системы мониторинга работоспособности системы ASP.NET разработчик легко может отслеживать состояние приложения ASP.NET и получать подробную информацию времени выполнения о ресурсах ASP.NET (для инструментирования приложения). Мониторинг работоспособности содержит готовые к использованию события мониторинга работоспособности (веб-события) и поставщики мониторинга работоспособности (прослушиватели). Веб-события упаковывают сведения о событиях работоспособности.
Поставщики прослушивают события и обрабатывают сведения о них, записывая информацию в журнал или уведомляя администратора. Веб-событие можно подключить к поставщику (этот процесс называется включением события) путем изменения настроек в файле конфигурации приложения.
Система мониторинга работоспособности ASP.NET реализуется с помощью классов в пространстве имен System.Web.Management.
Настройка мониторинга работоспособности ASP.NET
Приложения можно настроить на использование встроенных или пользовательских поставщиков мониторинга, которые обрабатывают сведения о работоспособности и сообщают о состоянии и характеристиках производительности инструментированного приложения.
Веб-события и поставщики можно подключить к приложению путем настройки раздела healthMonitoring файла конфигурации. Затем для прослушивания сведений события и его обработки используются встроенные или пользовательские классы.
Дополнительные сведения о файлах конфигурации см. в разделе Файлы конфигурации ASP.NET.
Иерархия классов веб-событий
При возникновении веб-события создается экземпляр связанного класса события. Данные события собираются в свойства этого объекта. Поставщики событий обрабатывают эти данные.
Веб-события могут содержать сведения о рабочем процессе, домене приложения, данных запроса и ответа, ошибках приложения и конфигурации, а также о событиях аудита. Содержащаяся в родительском классе события информация работоспособности наследуется всеми дочерними классами событий.
Отношения между классами веб-событий показаны на следующем рисунке.
Иерархия классов веб-событий
Чем ниже событие расположено в иерархии классов веб-событий, тем более специфичной является информация для приложения ASP.NET. Например, производные классы могут предоставлять такую информацию, как трассировки стека, IP-адреса клиентов, а также данные потоков и процессов.
Информация веб-события
В следующей таблице представлена информация, которая поможет выбрать класс веб-события для прямого использования или наследования. Строки соответствуют классам веб-событий. Столбцы соответствуют информационным классам, которые обычно доступны в качестве свойств классов веб-событий.
Если приложение выполняется не в режиме полного доверия, наследовать можно только от класса WebBaseEvent. Это поможет защитить персональную информацию от предоставления через информационные классы, перечисленные в таблице.
Классы веб-событий |
|||||
---|---|---|---|---|---|
Данные, создаваемые этим классом |
Недоступно |
Недоступно |
Недоступно |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые этим классом |
Недоступно |
Недоступно |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Данные, создаваемые этим классом |
Недоступно |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые этим классом |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Недоступно |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Недоступно |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые этим классом |
Данные, создаваемые этим классом |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые этим классом |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые родительским классом |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые родительским классом |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые родительским классом |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые родительским классом |
Недоступно |
|
Данные, создаваемые родительским классом |
Данные, создаваемые родительским классом |
Недоступно |
Данные, создаваемые родительским классом |
Недоступно |
Иерархия классов поставщиков
ASP.NET использует встроенные поставщики, которые можно использовать для обработки веб-событий. Чтобы создать пользовательский поставщик, можно также наследовать от встроенных классов. При этом учитываются следующие ограничения наследования:
Класс WebEventProvider может наследоваться приложениями, выполняемыми с любым уровнем доверия.
Класс BufferedWebEventProvider может наследоваться приложениями, выполняемыми с любым уровнем доверия.
Класс SqlWebEventProvider может наследоваться только приложениями, выполняемыми с уровнем полного доверия.
Другие классы могут наследоваться всеми приложениями вне зависимости от уровня доверия. Дополнительные сведения см. в обзорах отдельных классов поставщиков.
На следующем рисунке показана связь между классами веб-поставщиков пространства имен System.Web.Management.
Иерархия классов веб-поставщиков
Использование событий мониторинга работоспособности ASP.NET
События мониторинга работоспособности ASP.NET можно использовать следующими способами:
Используйте встроенные классы веб-событий и поставщиков. Обычно предоставление пользовательских настроек классов веб-событий ASP.NET не требуется. Обратите внимание, что приложение не вызывает события, этим занимается .NET Framework. В то же время приложения необходимо настроить способом, описанным далее в этом разделе. Дополнительные сведения см. в разделе Практическое руководство. Отправка электронной почты для извещений мониторинга работоспособности.
Создавайте пользовательские классы для веб-событий или поставщиков. Пользовательские веб-события обычно создаются для того, чтобы добавлять настраиваемые данные к той информации, которая уже предоставлена встроенными веб-событиями. Пользовательские шаблоны создаются для доставки сведений о событии с помощью другого механизма, отличного от предоставленного встроенными поставщиками. Дополнительные сведения см. в разделе Расширение событий мониторинга состояния ASP.NET.
Использование встроенных веб-событий и поставщиков
Для мониторинга работоспособности чаще всего используются встроенные веб-события и поставщики. Для этого необходимо настроить приложение на использование требуемых событий и поставщиков. Необходимо выполнить следующие действия:
Добавьте требуемый встроенный класс веб-события ASP.NET в элемент eventMappings раздела healthMonitoring в файле конфигурации приложения.
Добавьте поставщик, который будет обрабатывать это событие, в элемент providers раздела healthMonitoring.
В элемент rules добавьте запись, определяющую связь между событием и поставщиком.
По умолчанию встроенные классы мониторинга работоспособности ASP.NET настроены в разделе healthMonitoring корневого файла Web.config. Раздел healthMonitoring обеспечивает следующую конфигурацию по умолчанию:
Все классы веб-событий, производные от WebBaseEvent, указаны в элементе eventMappings. Этот раздел используется для присвоения группе классов событий понятного имени.
Все классы событий, производные от WebBaseEvent, включены по крайней мере в одну группу, определенную в элементе eventMappings.
Поставщики событий EventLogWebEventProvider, WmiWebEventProvider и SqlWebEventProvider указаны в элементе providers. В элементе providers можно указать другие встроенные поставщики, например, классы SimpleMailWebEventProvider, TemplatedMailWebEventProvider или TraceWebEventProvider.
Правила, связывающие веб-события ошибок и аудита с классами EventLogWebEventProvider, указаны в элементе rules. Чтобы включить другие веб-события и поставщики, следует добавить элементы rules. Событие считается включенным, если оно сопоставлено с поставщиком события в элементе rules. Элементы eventMappings и providers должны быть настроены для события, но если они не подключены в элементе rules, то событие не включено.
Разработчик может указать значения параметров для настраиваемых элементов. В число этих параметров входят параметры, ограничивающие число возникающих событий, указывающие интервал между двумя событиями или определяющие параметры буферизации событий для поставщиков SQL и электронной почты.
Настройка пользовательского поставщика
Если необходима настраиваемая обработка информации веб-событий, разработчик может создать пользовательский поставщик событий работоспособности. Поставщик — это класс, наследующий от классов WebEventProvider или BufferedWebEventProvider. Пример см. в разделе Практическое руководство. Пример реализации пользовательского поставщика для наблюдения за состоянием системы. Создание пользовательского поставщика чаще всего применяется при настройке мониторинга работоспособности. Для создания необходимо изменить файл конфигурации следующими способами:
Добавьте обрабатывающий события пользовательский поставщик в элемент providers раздела файла конфигурации healthMonitoring.
В элемент rules добавьте запись, определяющую связь между событием и поставщиком.
Поместите сборку, содержащую реализацию пользовательского поставщика, в подкаталог приложения Bin. Файл исходного кода пользовательского поставщика нельзя разместить в каталоге App_Code, так как система мониторинга работоспособности настраивается и создается до компиляции любых файлов кода в каталоге App_Code.
Атрибут type элемента providers требует по крайней мере указания имени класса. Если сборка не расположена в каталоге приложения Bin, она должна быть строго именованной и должна быть установлена в глобальный кэш сборок. В этом случае атрибут type элемента providers требует полное строгое имя, как показано в следующем примере. При этом значения Version и PublicKeyToken должны совпадать со сборкой:
type="Microsoft.Samples.Web.Management.SampleCustomEventProvider, Sample.SampleCustomEventProvider,Version=n.n.n.n,Culture=neutral, PublicKeyToken=xxxx"
В следующем примере показано, как связать поставщик SampleCustomEventProvider с событием WebHeartbeatEvent. Событие Heartbeats уже настроено в корневом файле Web.config.
<healthMonitoring
heartBeatInterval="1"
enabled="true">
<rules>
<add
name="Heartbeat Events"
eventName="Heartbeats"
provider="Sample Custom Event Provider"
profile="Default"
minInstances="1"
maxLimit="Infinite"
minInterval="00:01:00"
custom=""
/>
</rules>
<providers>
<add
name="Sample Custom Event Provider"
type="Microsoft.Samples.Web.Management.SampleCustomEventProvider, Sample.SampleCustomEventProvider,Version=1.0.0.0,Culture=neutral, PublicKeyToken=xxxxxxxxxxxx"
/>
</providers>
</healthMonitoring>
Настройка пользовательского события
Для настраиваемой информации событий работоспособности разработчик может создать пользовательское событие работоспособности. Пример см. в разделе Практическое руководство. Реализация и вызов пользовательских событий мониторинга состояния ASP.NET. Создание пользовательского веб-события при настройке мониторинга работоспособности применяется реже, чем создание пользовательского поставщика. Для создания необходимо изменить файл конфигурации. Пользовательское событие также необходимо вызвать в соответствующий момент.
Для настройки события нужно выполнить следующие действия:
Добавьте класс пользовательского события в элемент eventMappings раздела файла конфигурации healthMonitoring.
Добавьте элемент rules, определяющий связь между событием и поставщиком.
Добавьте сборку, содержащую реализацию пользовательского веб-события, в подкаталог Bin для ASP.NET. Файл исходного кода события можно также добавить в подкаталог App_Code.
При использовании сборки атрибут type элемента eventMappings требует указания имени класса и имени файла сборки, как показано в следующем примере кода:
type="System.Web.Management.SampleCustomWebEvent, Sample.SampleCustomWebEvent"
При использовании файла исходного кода необходимо указать только имя класса.
В следующем примере показано, как связать поставщик события EventLogWebEventProvider с пользовательским событием под именем SampleCustomWebEvent. Поставщик событий EventLogProvider уже настроен в корневом файле Web.config.
<healthMonitoring
heartBeatInterval="0"
enabled="true">
<rules>
<add
name="Sample Custom Events"
eventName="SampleCustomWebEvent"
provider="EventLogProvider"
profile="Default"
minInstances="1"
maxLimit="Infinite"
minInterval="00:01:00"
custom=""
/>
</rules>
<eventMappings>
<add
name="SampleCustomWebEvent"
type="System.Web.Management.SampleCustomWebEvent, Sample.SampleCustomWebEvent,Version=1.0.0.0,Culture=neutral, PublicKeyToken=xxxxxxxxxxxx" "
startEventCode="0"
endEventCode="2147483647"
/>
</eventMappings>
</healthMonitoring>
Защита мониторинга работоспособности ASP.NET
По умолчанию функция мониторинга работоспособности включена для приложений ASP.NET. Эту функцию можно отключить, установив для атрибута enabled элемента конфигурации healthMonitoring значение false. По умолчанию параметры конфигурации заданы наиболее безопасными значениями из доступных. Дополнительные сведения о параметрах мониторинга работоспособности см. в разделе healthMonitoring. Рассмотрите возможность блокировки настроек мониторинга работоспособности с помощью раздела location.
Примечание. |
---|
При реализации пользовательских потребителей или поставщиков событий необходимо закодировать или проверить содержимое события, чтобы избежать межузловых сценарных атак. |
Защита значений параметров настройки
При сохранении конфиденциальных сведений в файле конфигурации приложения следует зашифровать важные значения, используя защищенную конфигурацию. Особо конфиденциальными сведениями являются ключи шифрования, хранящиеся в элементе конфигурации machineKey и строки подключений к источнику данных, хранящиеся в элементе конфигурации connectionStrings. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.
Доступ к разделу конфигурации healthMonitoring возможен только для кода, использующего средний уровень доверия или выше. Это предотвращает регистрацию пользовательских типов приложениями низкого уровня доверия.
Защита для расширения мониторинга работоспособности ASP.NET
Типы мониторинга работоспособности в пространстве имен System.Web.Management имеют следующие характеристики:
Конструкторы базовых классов отмечены как protectedinternal. Соответственно, экземпляры типов событий базового класса не могут быть созданы напрямую через пользовательский код.
Доступ к экземплярам веб-событий ограничен указанными в конфигурации поставщиками, фильтрами и страницами шаблонов.
Требования наследственной связи в событиях с защищенным содержимым разрешают создание производных пользовательских событий только с полным доверием.
Надежные пользовательские события, предоставляющие конфиденциальную информацию из защищенных свойств события, должны самостоятельно обеспечивать управление доступом для кода, чтобы предотвратить отвлекающие атаки. Дополнительные сведения об управлении доступом для кода см. в разделах Управление доступом для кода в ASP.NET и Основы управления доступом для кода.
Используемые для просмотра веб-страниц типы инструментария управления Windows (WMI) заблокированы, чтобы запретить пользователям доступ к данным событий.
Примечание. При реализации пользовательских потребителей или поставщиков событий необходимо закодировать или проверить содержимое события, чтобы избежать межузловых сценарных атак.
Защита соединений с источниками данных
Пользовательские поставщики событий мониторинга работоспособности можно создавать для записи информации событий в базу данных. В состав ASP.NET входит поставщик SQL. Дополнительные сведения о записи данных событий см. в разделе Безопасность доступа к данным.
Чтобы обеспечить безопасность подключения к серверу базы данных, следует зашифровать информацию о строке подключения в файле конфигурации с помощью защищенной конфигурации. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации.
При использовании поставщика SQL необходимо соответствующим образом обеспечить безопасность данных с помощью проверки подлинности. Файлы Microsoft SQL Server, экспресс-выпуск должны быть защищены с помощью списков управления доступом и проверки подлинности SQL.
Примечание. |
---|
SQL Server, экспресс-выпуск не следует запускать под непривилегированной учетной записью, если осуществляется запись событий в базу данных. |
Защита от атак типа "Отказ в обслуживании"
Веб-события можно вызвать с помощью HTTP-запроса или кода приложения, создающего исключения или события. Емкость поставщика событий может быть превышена большим количеством событий или большими по размеру событиями. В этом случае приложение или сервер ASP.NET могут переполниться, что может повлиять на использование памяти, места на диске и сетевого трафика.
Чтобы сократить для приложения риск атаки типа "отказ в обслуживании", ASP.NET по умолчанию имеют следующую структуру:
ASP.NET ограничивает число событий одним экземпляром события в минуту. Эта частота запросов настраивается в элементом profiles и связана с событиями и поставщиками в элементе rules.
Буферизация событий изолирована для каждого типа поставщика, чтобы предотвратить конкуренцию за буферное пространство. Параметры буфера определяются в элементе bufferModes. Поставщики можно настроить на использование указанного набора настроек буфера путем указания элемент bufferModes, который содержит соответствующие параметры.
Для порождения пользовательского события требуется как минимум средний уровень доверия или выше.
Чтобы избежать переполнения, системный администратор может настроить параметры частоты запросов и буфера. В особенности это необходимо для событий, которые вызываются HTTP-запросами. В дополнение к этому можно настроить отдельные режимы буфера для обработки важных и менее важных событий.
Безопасность сообщений об ошибках и событий
Чтобы предотвратить предоставление конфиденциальных сведений нежелательным источникам, настройте приложение так, чтобы оно не отображало подробные сообщения об ошибках. Приложение можно настроить на отображение подробных сообщений об ошибках только в том случае, если сам клиент является веб-сервером. Дополнительные сведения см. в описании элемента customErrors.
Веб-события большого объема, события исключений и события по запросу ASP.NET по умолчанию записывает в систему мониторинга производительности. В конфигурации по умолчанию это приводит к тому, что при неудачной попытке входа в систему в журнал событий приложений будет записано имя пользователя и другая диагностическая информация. Эта информация доступна для просмотра в средстве просмотра событий Windows. Если сервер работает под управлением одного из продуктов Microsoft Windows Server, то для улучшения безопасности приложения можно защитить журнал событий. Кроме того, разработчик может установить параметры для указания размеров, хранения и других характеристик журнала событий, чтобы предотвратить атаки типа "отказ в обслуживании".
Блокировка конфигурации мониторинга работоспособности ASP.NET
В сценариях размещения приложений разработчику может потребоваться заблокировать определенные параметры веб-узла или сделать их неизменяемыми, чтобы предотвратить их последующую модификацию. Например, можно заблокировать параметры мониторинга работоспособности для размещенных приложений, чтобы снизить вероятность случайных изменений конфигурации веб-приложения.
Чтобы заблокировать параметры конфигурации, необходимо добавить атрибут allowOverride="false" в тег <location>. При наличии этого атрибута попытка изменения в файлах конфигурации нижнего уровня любого раздела конфигурации, определенного в заблокированной директиве location, приводит к возникновению ошибки.
Приведенный ниже пример файла конфигурации показывает метод блокировки раздела healthMonitoring приложения ASP.NET с названием application1. Параметры можно хранить на уровне сервера (в файле machine.config) или на уровне узла.
<configuration>
<location path="application1" allowOverride="false">
<system.web>
<healthMonitoring
enabled="true"
heartBeatInterval="60">
<bufferModes>
<add name="Logging"
maxBufferSize="1000"
maxFlushSize="200"
urgentFlushThreshold="800"
regularFlushInterval="00:30:00"
urgentFlushInterval="00:05:00"
maxBufferThreads="1"
/>
</bufferModes>
<providers>
<add name="EventLogProvider"
type="System.Web.Management.EventLogWebEventProvider, System.Web, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%MICROSOFT_PUBLICKEY%"
buffer="true"
bufferMode="Logging"
/>
</providers>
<eventMappings>
<add name="All Errors"
type="System.Web.Management.WebBaseErrorEvent, System.Web, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%MICROSOFT_PUBLICKEY%"
/>
</eventMappings>
<profiles>
<add name="Default"
minInstances="1"
maxLimit="Infinite"
minInterval="00:10:00"
/>
</profiles>
<rules>
<add name="All Errors Default"
eventName="All Errors"
provider="EventLogProvider"
profile="Default"
minInterval="00:01:00"
/>
</rules>
</healthMonitoring>
</system.web>
</location>
</configuration>
Индивидуальная блокировка элементов выполняется с помощью дополнительных атрибутов, например, lockItem, lockAttributes и lockElements. Дополнительные сведения см. в разделе Общие атрибуты, наследуемые элементами раздела.
К началу
Примеры кода
Практическое руководство. Реализация и вызов пользовательских событий мониторинга состояния ASP.NET
Практическое руководство. Отправка электронной почты для извещений мониторинга работоспособности.
Пошаговое руководство. Прослушивание WMI-событий в мониторинге работоспособности ASP.NET
К началу
Ссылки на классы
System.Web.Management
Пространство имен, которое содержит типы для управления и мониторинга статуса работоспособности веб-приложений.System.Management
Пространство имен, содержащее типы для соединения с инфраструктурой инструментария управления Windows (WMI).System.Management.Instrumentation
Пространство имен, содержащее типы для инструментирования приложений для потенциальных клиентов WMI.HealthMonitoringSection
Тип, который программным образом Возвращает или задает атрибуты конфигурации healthMonitoring.
К началу
См. также
Задачи
Пошаговое руководство. Отключение параметров конфигурации ASP.NET
Основные понятия
Расширение событий мониторинга состояния ASP.NET
Общие сведения о конфигурационном ASP.NET
Ссылки
Элемент bufferModes для элемента healthMonitoring (схема параметров ASP.NET)
Элемент providers для элемента healthMonitoring (схема параметров ASP.NET)