サービスファブリッククラスタでEventSourceとElasticSearchが正しく設定されました。これで、サービスファブリックアプリケーションと対話するWebアプリケーションにEventSourcesを追加して、すべてのイベント(アプリケーションログ)を1か所で表示し、Kibanaを介してフィルタ/クエリを表示できるようになりました。WebアプリケーションにEventSourceを追加する方法
私たちの問題は、exeであるサービスファブリックアプリケーションとステートレスの.NET 4.6(.net CORE)Webアプリケーションとの違いに関連しているようです。サービスファブリックでは、Program.csにパイプラインをインスタンシエートするusingステートメントを配置し、無限のスリープを設定します。
private static void Main()
{
try
{
using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("CacheApp-CacheAPI-DiagnosticsPipeline"))
{
ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Endpoint).Name);
// Prevents this host process from terminating so services keeps running.
Thread.Sleep(Timeout.Infinite);
}
ウェブアプリケーションでこれを行うにはどうすればよいですか?これは、EventSourceのServiceFabric以外の実装で使用しているパイプラインコードです。
using (var pipeline = DiagnosticPipelineFactory.CreatePipeline("eventFlowConfig.json"))
{
IEnumerable ie = System.Diagnostics.Tracing.EventSource.GetSources();
ServiceEventSource.Current.Message("initialize eventsource");
}
を私たちは、パイプラインを参照し、使用して文の中からではなく、それ以外でElasticSearchにイベントを送信することができます:これは私たちが使用しているものです。したがって、質問は次のとおりです。
- どのようにWebアプリケーションのステートメントを使用してパイプラインを配置しますか?
- ログを記録するたびに、またはステートレスWebイベント全体でパイプラインを再利用する方法がある場合に、パイプラインをインスタンス化して破棄する必要がありますか?それは非常に高価で、パフォーマンスを傷つけるように思えるでしょう。パイプラインをキャッシュすることはできますか?
これはジストです。明確にする必要がある場合はお知らせください。私はそこにクライアントアプリケーションのための多くのドコが見えますが、Webアプリケーションのための多くはありません。
おかげで、ソリューションコード
DiagnosticPipelineパイプラインWITH グレッグ
UPDATE。
EventFlowパイプラインを初期化する最も簡単な方法は、例えば、Program.csのMain()
方法であろうASP.NETコアを仮定
protected void Application_Start(Object sender, EventArgs e)
{
try
{
pipeline = DiagnosticPipelineFactory.CreatePipeline("eventFlowConfig.json");
IEnumerable ie = System.Diagnostics.Tracing.EventSource.GetSources();
AppEventSource.Current.Message("initialize eventsource");
}
}
protected void Application_End(Object sender, EventArgs e)
{
pipeline.Dispose();
}
ありがとうございますが、これはネットではありません.COREはIISでホストされている古いWebフォームアプリケーションです。これらのアプリでは、「メイン」はありません。多分global.asaxを使うことができますか? - – gperrego
はい、global.asaxは私が試みるものです。私は元の答えにいくつかの詳細を追加しました。 –
それではusingステートメントを使用しないでください。Application_Startのソートはusingステートメントとして機能し、Startに変数rightを入れますか? var pipeline = DiagnosticPipelineFactory.CreatePipeline( "eventFlowConfig.json");その後、変数Application_Endを破棄します。今試してみてください – gperrego