イベントやログをDataDogにすぐに送信するセリログシンク。デフォルトでは、シンクはhttpsにログを送信します
パッケージ-Serilog.sinks.datadog.logs |プラットフォーム-.NET 4.5、.NET 4.6.1、.NET 4.7.2、NetStandard1.3、NetStandard2.0
注:他の.NETバージョンの場合、使用されるデフォルトのTLSバージョンが1.2あることを確認してください
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// Some code
}デフォルトでは、ログは、ポート443のHTTPSを介して米国のサイトに転送されます。 urlプロパティを使用してサイトをEUに変更し、 https://http-intake.logs.datadoghq.euに設定できます。
デフォルトの動作をオーバーライドし、次のプロパティ(URL、ポート、USESSL、USETCP)を手動で指定することにより、 TCP転送を使用できます。
また、次のプロパティ(ソース、サービス、ホスト、タグ)をセリログシンクに追加することもできます。
var config = new DatadogConfiguration ( url : " intake.logs.datadoghq.com " , port : 10516 , useSSL : true , useTCP : true ) ;
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs (
" <API_KEY> " ,
source : " <SOURCE_NAME> " ,
service : " <SERVICE_NAME> " ,
host : " <HOST_NAME> " ,
tags : new string [ ] { " <TAG_1>:<VALUE_1> " , " <TAG_2>:<VALUE_2> " } ,
configuration : config
)
. CreateLogger ( ) )
{
// Some code
} 次のログを送信します:
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// An example
var position = new { Latitude = 25 , Longitude = 134 } ;
var elapsedMs = 34 ;
log . Information ( " Processed {@Position} in {Elapsed:000} ms. " , position , elapsedMs ) ;
}または
Log . Logger = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) ;
// An example
var position = new { Latitude = 25 , Longitude = 134 } ;
var elapsedMs = 34 ;
Log . Information ( " Processed {@Position} in {Elapsed:000} ms. " , position , elapsedMs ) ;
Log . CloseAndFlush ( ) ;プラットフォームでは、ログは次のJSONオブジェクトのように見えます。
{
"message" : " Processed { Latitude: 25, Longitude: 134 } in 034 ms. " ,
"MessageTemplate" : " Processed {@Position} in {Elapsed:000} ms. " ,
"timestamp" : " 2022-11-23T09:48:56.0262350-05:00 " ,
"level" : " Information " ,
"Properties" : {
"Position" : {
"Latitude" : 25 ,
"Longitude" : 134
},
"Elapsed" : 34
},
"Renderings" : [
" 034 "
]
}appsettings.jsonからの構成0.2.0以降、serilog.settings.configurationパッケージを使用してappsettings.jsonファイルを使用して、datadogシンクを構成できます。
"Serilog.WriteTo"アレイで、 DatadogLogsのエントリを追加します。例を以下に示します。
"Serilog" : {
"Using" : [ " Serilog.Sinks.Console " , " Serilog.Sinks.Datadog.Logs " ],
"MinimumLevel" : " Debug " ,
"WriteTo" : [
{ "Name" : " Console " },
{
"Name" : " DatadogLogs " ,
"Args" : {
"apiKey" : " <API_KEY> " ,
"source" : " <SOURCE_NAME> " ,
"host" : " <HOST_NAME> " ,
"tags" : [ " <TAG_1>:<VALUE_1> " , " <TAG_2>:<VALUE_2> " ],
"configuration" : {
"url" : " intake.logs.datadoghq.com " ,
"port" : 10516 ,
"useSSL" : true ,
"useTCP" : true
}
}
}
],
"Enrich" : [ " FromLogContext " , " WithMachineName " , " WithThreadId " ],
"Properties" : {
"Application" : " Sample "
}
}注: configurationセクションはオプションであるため、デフォルトをオーバーライドできます。
カスタムITextFormatterを実装して、ログの形式を変更するためにシンクに渡すことができます。これは、最終的なJSONペイロードからフィールドを追加/削除/変更するか、DataDOGに非JSONログを発したい場合に役立ちます。
カスタムフォーマッタを実装するには、いくつかのオプションがあります。最も簡単な方法は、セリログ発現を使用することです。以下は、 MessageTemplateフィールドをドロップするSerilog-Expression ITextFormatterの例です。
public class DatadogJsonNoTemplateFormatter : ExpressionTemplate
{
public DatadogJsonNoTemplateFormatter ( ) : base ( @"{ {
Timestamp: @t,
level: @l,
message: @m,
Properties: {..@p},
Renderings: @r}
}" ) { }
}フレームワークの互換性のためにSerilog-Expressionsを使用できない場合 - JsonValueFormatterまたはデフォルトの実装Ex:Serilog-formatting-compactで独自の実装を実装できます
DatadogLogs次の議論をサポートしています。
| 口論 | タイプ | 説明 |
|---|---|---|
apiKey | string | DataDog APIキー。 |
source | string | 統合名。 |
service | string | サービス名。 |
host | string | ホスト名。 |
tags | string[] | カスタムタグ。 |
configuration | DatadogConfiguration | DataDogはクライアントの構成を記録します。 |
restrictedToMinimumLevel | LogEventLevel | シンクの最小ログレベル。 |
batchSizeLimit | int | 単一のバッチでエミストするイベントの最大数。 |
batchPeriod | TimeSpan | 新しいイベントバッチを発する前に待つ時間。 |
queueLimit | int | シンクの内部キューに保持するイベントの最大数、または固定されていないキュー用のnull 。デフォルトは10000です |
exceptionHandler | Action<Exception> | この関数は、 DatadogConfiguration.UseTCP=false (デフォルトの構成)を使用するときに例外が発生するときに呼び出されます。 |
detectTCPDisconnection | bool | TCP接続が失われたときに検出し、新しい接続を再作成します。 |
formatter | ITextFormatter | ログの形式を変更するためのカスタムフォーマッタの実装 |
maxMessageSize | int | メッセージがチャンクに分割される前に、メッセージのバイトの最大サイズ |
注: maxMessageSize文書化されたAPI制限1MBを超えた場合 - 1MBを超えるペイロードは、摂取量によって削除されます。
src/Serilog.Sinks.Datadog.Logs.csprojでバージョンをバンプし、ブランチをマージします
これらのコマンドをプロジェクトルートフォルダーで実行します
git checkout master && git pull
msbuild Serilog.Sinks.Datadog.Logs.sln /t:restore /p:Configuration=Release
msbuild Serilog.Sinks.Datadog.Logs.sln /t:pack /p:Configuration=Release src/Serilog.Sinks.Datadog.Logs/bin/Release/Serilog.Sinks.Datadog.Logs.<version>.nupkgで.nupkgファイルを見つけることができます
Serilog.Sinks.Datadog.Logsがserilog.sinks.periodicbatchingを実装するにつれて、serilog.sinks.asyncを使用することは推奨されません。
serilog.sinks.asyncドキュメントから:
注:ネットワークベースのシンクの多く(CouchDB、Elasticsearch、Mongodb、seq、Splunk ...)は、すでに非同期バッチをネイティブに実行しており、このラッパーの恩恵を受けていません。