이벤트와 로그를 Datadog에 바로 보내는 Serilog 싱크. 기본적으로 싱크는 HTTPS를 통해 로그를 보냅니다
패키지 -serilog.sinks.datadog.logs | 플랫폼 - .NET 4.5, .NET 4.6.1, .NET 4.7.2, 넷 스탠드 1.3, 넷 스탠드 2.0
참고 : 다른 .NET 버전의 경우 사용 된 기본 TLS 버전이 1.2 인지 확인하십시오.
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// Some code
} 기본적으로 로그는 포트 443의 HTTPS 를 통해 미국 사이트로 Datadog로 전달됩니다. url 속성을 사용하여 사이트를 EU로 변경하여 https://http-intake.logs.datadoghq.eu 로 설정할 수 있습니다.
다음 속성 (URL, Port, 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 섹션은 선택 사항이므로 기본값을 무시할 수 있습니다.
Custom ITextFormatter 구현하여 싱크대로 전달하여 로그의 형식을 변경할 수 있습니다. 최종 JSON 페이로드에서 필드를 추가/제거/수정하거나 Datadog에 비 JSON 로그를 방출하려는 경우 유용합니다.
맞춤형 포맷터를 구현하기위한 몇 가지 옵션이 있습니다. 가장 쉬운 방법은 Serilog- 표현을 사용하는 것입니다. 아래는 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 ...)는 이미 기본적으로 비동기 배치를 수행 하며이 래퍼의 이점을 얻지 못합니다.