一個Serilog接收器,將事件直接發送到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上的HTTP轉發到DATADOG到美國站點。您可以使用url屬性將網站更改為歐盟,並將其設置為https://http-intake.logs.datadoghq.eu 。
您可以通過手動指定以下屬性(URL,端口,USESSL,USETCP)來覆蓋默認行為並使用TCP轉發。
您還可以將以下屬性(源,服務,主機,標籤)添加到Serilog接收器中。
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有效載荷中添加/刪除/修改字段,或將非JSON日誌發射到Datadog,這將很有用。
實施自定義格式器有幾種選擇。最簡單的方法是使用Serilog表達。下面是刪除MessageTemplate字段的Serilog表達ITextFormatter的示例:
public class DatadogJsonNoTemplateFormatter : ExpressionTemplate
{
public DatadogJsonNoTemplateFormatter ( ) : base ( @"{ {
Timestamp: @t,
level: @l,
message: @m,
Properties: {..@p},
Renderings: @r}
}" ) { }
}如果由於框架兼容性而無法使用Serilog表達式 - 您可以使用JsonValueFormatter或默認實現實現自己的實現:
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超過了1MB的已記錄的API限制 - 任何大於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.sinks.periodicbatching時,不建議使用serilog.sinks.async。
來自serilog.sinks.s.ashync文檔:
注意:許多基於網絡的水槽(Couchdb,Elasticsearch,MongoDB,Seq,Splunk ...)已經進行了異步批次,並且無法從該包裝器中受益。