2

今朝、非常に恐ろしい出来事がありました。私たちの QA チーム (幸いなことに、米国の就業日が始まる前に作業を開始しました) は、本番 Web サイトが突然ダウンしたことを報告しました。その時、私たちは何も奇妙なことをしていませんでした。障害は突然発生し、同時にすべての環境に影響を与えました。運用 Web サーバー (IIS) にアクセスすると、アプリケーション プールが停止していることに気付きました。再起動したところ、すぐにまたクラッシュしました。Windows イベント ビューアーを確認したところ、ログに次のエラーが見つかりました。

ソース: .NET ランタイム

アプリケーション: w3wp.exe

フレームワークのバージョン: v4.0.30319

説明: 未処理の例外が発生したため、プロセスが終了しました。

例外情報: System.Security.Authentication.AuthenticationException スタック: 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

プロセス ID: 10156

例外: System.Security.Authentication.AuthenticationException

メッセージ: 検証手順によると、リモート証明書は無効です。

スタックトレース: System.Net.Security.SslState.StartSendAuthResetSignal (ProtocolToken メッセージ、AsyncProtocolRequest asyncRequest、例外例外) で System.Net.Security.SslState.StartSendBlob (Byte[] 受信、Int32 カウント、AsyncProtocolRequest asyncRequest) で System.Net.Security .SslState.ProcessReceivedBlob(Byte[] バッファー、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.StartReceiveBlob(Byte[] バッファー、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartSendBlob(Byte[] 受信) 、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.ProcessReceivedBlob(Byte[] バッファー、Int32 カウント、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartReceiveBlob(Byte[] バッファー、AsyncProtocolRequest asyncRequest) システムで.Net.セキュリティ。SslState.StartSendBlob(Byte[] 着信、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.ProcessReceivedBlob(Byte[] バッファー、Int32 カウント、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartReceiveBlob(Byte[ ] バッファー、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.StartSendBlob(Byte[] 着信、Int32 カウント、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.ProcessReceivedBlob(Byte[] バッファー、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.StartReceiveBlob (Byte[] バッファー、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartSendBlob (Byte[] 受信、Int32 カウント、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState で。 ProcessReceivedBlob(Byte[] バッファ、Int32 カウント、System.Net.Security.SslState.StartReceiveBlob(Byte[] バッファー、AsyncProtocolRequest asyncRequest) での AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.StartSendBlob(Byte[] 着信、Int32 カウント、AsyncProtocolRequest asyncRequest) での System.Net.Security .SslState.ProcessReceivedBlob(Byte[] バッファー、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.StartReceiveBlob(Byte[] バッファー、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartSendBlob(Byte[] 受信) 、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.ProcessReceivedBlob(Byte[] バッファー、Int32 カウント、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartReceiveBlob(Byte[] バッファー、AsyncProtocolRequest asyncRequest) システムで.Net.Security.SslState.System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst、Byte[] buffer、AsyncProtocolRequest asyncRequest) での StartSendBlob (Byte[] 受信、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) でSystem.Net.Security.SslStream.AuthenticateAsClient(String targetHost) で LogentriesCore.AsyncLoggerBase.Run() で System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) で System.Threading.ExecutionContext.Run で(ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態、ブール値の preserveSyncCtx) System.Threading.ExecutionContext.Run (ExecutionContext executionContext、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>

Web サイトを再開したところ、すべてが再び機能し始めました。これがすべて発生し、営業時間前に解決されたことは非常に幸運です (しかし、営業時間は迫っていました!)。

これは完全に私をびっくりさせます。私の考えでは、Log4Net は完全に堅牢なフレームワークであり、損害を与える可能性はありません。Logentries の証明書の有効期限が切れた (またはそのようなもの) ように思われ、その結果、すぐに実稼働 Web サイトがクラッシュしました。

Log4Net/Logentries のセットアップに何か問題がありますか?

初期設定 (何が問題なのかはわかりません):

XmlConfigurator.Configure();

ロガー自体は でありILog、次のように割り当てられます。

_log = LogManager.GetLogger("Logger");

ロギングは次のように行われます。

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

ここで厄介なことは何もありません。そして、それは1年以上うまく機能しています。さらに、前に述べたように、スタック トレースには独自のコードへの参照がないため、おそらく、私たちが書いた悪いコードによるものではありません。

何がうまくいかなかったのか、それを修正する方法、そしてこの種の停止によってシステムが二度とダウンしないようにする方法はありますか?

4

1 に答える 1

1

「9 月 14 日、api.logentries.com に対して新しい SSL 証明書が発行されました。制約により、これらの証明書は以前に api.logentries.com に提供された古い証明書と一致しません。現在、古い API を埋め込んでいるすべてのユーザーにお勧めします。システム証明書プールを使用するように切り替える logentries.com 証明書。セットアップの変更については、support@logentries.com にお問い合わせください。"

このメッセージは、今日初めてログ エントリにログインしたときに表示されるはずでした。これが、あなたの問題が今日始まった理由です。

log4net パッケージを最新のものにアップグレードし、logentries パッケージを最新のものにアップグレードすると、問題は解決されます。

于 2016-09-15T13:34:04.413 に答える