現在、Azureスケールセット(負荷分散と1つの可用性セットを備えた1つのソースグループ上の多くのVM)を使用しており、以前はNLogを使用してWebアプリのアクションとエラーをログに記録していましたが、ElasticSearchを使用するように要求/必要になりました。インスタンスごとのファイルではなく、すべてのAzureVMインスタンスの集中ログ。
ESとLogStashの概念は初めてですが、NLogを別のものに置き換える必要がありますか? ESを使用してすべてのログを1つに統合するにはどうすればよいですか(統合結果としてAzureストレージテーブルにnlogストアを作成すると思いますか、LogStashを使用する必要がありますか、それとも他のものを使用しますか)?
上記のように、AzureマルチVMで.netコアアプリをサポートする最も多くのログは何ですか?
何か助けてください?
ElasticSearch
にログインしたいので、[NLog]にこの機能が含まれている構造化ロギングをサポートするロギングフレームワークを使用するのが最適です。 ベータ[〜#〜] rtm [〜#〜]。
構造化ロギングをサポートするロギングフレームワークとして Serilog を使用できます。
また、ElasticSearch用のSerilogシンクもあります https://github.com/serilog/serilog-sinks-elasticsearch
これらのnugetパッケージをプロジェクトに追加する必要があります。
Serilog
Serilog.Sinks.ElasticSearch
これは、Serilog
をElasticSearch
にシンクするための設定のサンプルコードです。
var logger = new LoggerConfiguration()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
ModifyConnectionSettings = x => x.SetBasicAuthentication(username, password);
})
.CreateLogger();
NLogには、Elasticsearch.Netパッケージを使用するターゲット「NLog.Targets.ElasticSearch」( nuget )があります。
使用法:
<nlog>
<extensions>
<add Assembly="NLog.Targets.ElasticSearch"/>
</extensions>
<targets>
<target name="elastic" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch"
requireAuth="true"
username="myUserName"
password="coolpassword"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="elastic" />
</rules>
</nlog>
パラメータのドキュメント: https://github.com/ReactiveMarkets/NLog.Targets.ElasticSearch/wiki
ご注意ください:
多くの人が、アプリケーションがElasticSearchに直接書き込むのではなく、ローカルファイルに書き込むことを推奨しています。
次に、ログファイルの内容をElasticSearchにアップロードするサービス(例:FileBeat)を用意します。
これにより、ElasticSearchインスタンス(バルク)へのネットワークトラフィックが最適化され、メンテナンスのためにネットワークまたはElasticSearchインスタンスの問題が再開された場合にログが失われないようになります。