2016-09-15 6 views
2

У нас был серьезный страшный инцидент этим утром. Наша команда QA (которая, к счастью, начинает работать до начала рабочего дня в США) сообщила, что наш веб-сайт производства внезапно упал. В то время мы не делали ничего странного; неудача была внезапной и одновременно затронула все наши среды. Я пошел на веб-сервер производства (IIS) и обнаружил, что пул приложений остановлен. Я перезапустил его, и он сразу же разбился. Я проверил просмотра событий Windows, и обнаружил следующую ошибку в журналах:Log4Net/LogEntries сбили наш производственный сайт

Источник: .NET время выполнения

Применение: w3wp.exe

Framework Версия: v4.0.30319

Описание: Процесс был прерван из-за необработанного исключения.

Exception Информация: System.Security.Authentication.AuthenticationException Stack: в System.Net.Security.SslState.ForceAuthentication (Boolean, Byte [], System.Net.AsyncProtocolRequest) в System.Net.Security.SslState .ProcessAuthentication (System.Net.LazyAsyncResult) на System.Net.Security.SslStream.AuthenticateAsClient (System.String) в LogentriesCore.AsyncLoggerBase.Run() в System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) в System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) на System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) в System.Threading.ThreadHelper.ThreadStart()

Источник: ASP.NET 4.0 .30319.0

Произошло необработанное исключение, и процесс был прерван.

ID приложения:/LM/W3SVC/1/ROOT

Идентификатор процесса: 10156

Исключение: System.Security.Authentication.AuthenticationException

сообщение: Удаленный сертификат недействителен в соответствии с процедура проверки.

StackTrace: в System.Net.Security.SslState.StartSendAuthResetSignal (ProtocolToken сообщение, AsyncProtocolRequest AsyncRequest, исключение) Исключение в System.Net.Security.SslState.StartSendBlob (байт [] входящие, граф Int32, AsyncProtocolRequest AsyncRequest) в System.Net.Security.SslState.ProcessReceivedBlob (байт [] buffer, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReceiveBlob (байт [] buffer, AsyncProtocolRequest asyncRequest) в System.Net.Security. SslState.StartSendBlob (Byte [] incoming, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.ProcessReceivedBlob (байт [] buffer, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReceiveBlob (Байт [] buffer, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartSendBlob (Byte [] входящий, Int32-счет, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.ProcessReceivedBlob (байт [] buffer, Int32 рассчитывать, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.StartReceiveBlob (байт [] буфера, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.StartSendBlob (байт [] входящие, граф Int32, AsyncProtocolRequest AsyncRequest) в System.Net.Security.SslState.ProcessReceivedBlob (байт [] buffer, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReceiveBlob (байт [] buffer, AsyncProtocolRequest asyncRequest) в System.Net.Security. SslState.StartSendBlob (байт [] входящие, Int32 рассчитывать, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.ProcessReceivedBlob (байт [] буфера, граф Int32, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.StartReceiveBlob (байт [] буфера, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.StartSendBlob (байт [] входящие, Int32 рассчитывать, AsyncProtocolRequest AsyncRequest) в System.Net.Security.SslState.ProcessReceivedBlob (байт [] буфера, граф Int32, AsyncProtocolRequest AsyncRequest) в системе .Net.Security.SslState.StartReceiveBlob (Byte [] buffer, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartSendBlob (Byte [] incoming, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState. ProcessReceivedBlob (байт [] b uffer, Int32 рассчитывать, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.StartReceiveBlob (байт [] буфера, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.StartSendBlob (байт [] входящие, граф Int32, AsyncProtocolRequest AsyncRequest) в System.Net.Security.SslState.ForceAuthentication (Boolean receiveFirst, байт [] буфера, AsyncProtocolRequest AsyncRequest) на System.Net.Security.SslState.ProcessAuthentication (LazyAsyncResult lazyResult) в System.Net.Security.SslStream.AuthenticateAsClient (String targetHost) в LogentriesCore.AsyncLoggerBase.Run() в System.Threading.ExecutionContext.RunInternal (ИсполнениеКонтекстовое исполнениеКонтекст, Обратный вызов ContextCallback, Состояние объекта, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run (ExecutionContext executeContext, ContextCallback callback, состояние объекта, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run (ИсполнениеКонтекстовое исполнениеКонтекст, Обратный вызов ContextCallback, Состояние объекта) в System.Threading.ThreadHelper.ThreadStart()

Эта трассировка стека не содержит никакого собственного кода; единственное, что означало для меня что-то, было немного о Logentries. Поэтому я сразу же открыл файл web.config и закомментировать следующую строку в Log4Net конфигурации:

<appender-ref ref="LeAppender" /> 

где LeAppender был определен до того, как

<appender name="LeAppender" type="log4net.Appender.LogentriesAppender, LogentriesLog4net"> 
    <UseHttp value="false" /> 
    <UseSsl value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger [host=%P{log4net:HostName}:appdomain=%appdomain:referenceid=%property{referenceid}] - %message%newline" /> 
    </layout> 
</appender> 

Я перезагрузил веб-сайт и все началось снова работает, и наши клиенты не были более мудрыми; очень повезло, что все это произошло и разрешилось до рабочего времени (но было близко!).

Это полностью уродливает меня. Log4Net, на мой взгляд, должен быть абсолютно надежной структурой, которая не может нанести никакого ущерба. Мне кажется, что у Logentries истекали срок действия сертификата (или что-то в этом роде), и эффект от этого был немедленно разрушен на нашем производственном веб-сайте!

Что-то не так с нашей установкой Log4Net/Logentries?

Первоначальная конфигурация (не знаю, что может быть не так с этим):

XmlConfigurator.Configure(); 

Сам регистратор является ILog, и ему присваивается следующим образом:

_log = LogManager.GetLogger("Logger"); 

и регистрация осуществляется как так:

_log.Logger.Log(typeof(MyLogger), level, message, ex); 

Ничего неприятного здесь. И он работает отлично уже более года. Более того, трассировка стека, как я упоминал ранее, не имеет никакого отношения к какому-либо из нашего собственного кода, поэтому, вероятно, это не из-за плохого кода, который мы написали.

Любые идеи, что пошло не так, как это исправить, и как убедиться, что этот отключение никогда не приводит нашу систему к работе снова?

+0

Это может произойти из-за множественного экземпляра объекта logger. Я предлагаю вам следовать шаблону singleton, чтобы избежать создания множественного экземпляра –

+0

@Chandruvelan - если это проблема из-за нескольких экземпляров, то почему это не сработало один раз раньше прошедший год? И к тому же, почему это разрушает весь наш сайт? –

ответ

1

«14 сентября новые сертификаты SSL были выданы на api.logentries.com. Из-за ограничений эти сертификаты не соответствуют старым сертификатам, которые ранее были предоставлены для api.logentries.com. Мы рекомендуем всем пользователям, которые в настоящее время внедряя старые сертификаты api.logentries.com, чтобы переключиться на использование своего системного пула сертификатов. Для получения справки об изменении вашей настройки обратитесь в службу поддержки@logentries.com «

Это сообщение должно было отображаться при первом входе в записи журнала Cегодня. Вот почему ваши проблемы начались сегодня.

Если вы обновите свой пакет log4net до последней версии и ваш пакет logentries до последней версии, ваша проблема будет решена.

+0

Спасибо, я обновил с 2.7.1 до 2.8.0 и проблема исправлена. –