Serilog Sink ที่ส่งเหตุการณ์และบันทึกทันทีไปยัง Datadog โดยค่าเริ่มต้น Sink จะส่งบันทึกผ่าน 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
} โดยค่าเริ่มต้นบันทึกจะถูกส่งต่อไปยัง Datadog ผ่าน HTTPS บนพอร์ต 443 ไปยังไซต์สหรัฐอเมริกา คุณสามารถเปลี่ยนเว็บไซต์เป็น EU โดยใช้คุณสมบัติ url และตั้งค่าเป็น https://http-intake.logs.datadoghq.eu
คุณสามารถแทนที่พฤติกรรมเริ่มต้นและใช้การส่งต่อ TCP โดยการระบุคุณสมบัติต่อไปนี้ด้วยตนเอง (URL, พอร์ต, USESSL, USETCP)
นอกจากนี้คุณยังสามารถเพิ่มคุณสมบัติต่อไปนี้ (แหล่งที่มา, บริการ, โฮสต์, แท็ก) ลงในอ่างล้างจาน 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 คุณสามารถกำหนดค่า Sink Datadog โดยใช้ไฟล์ appsettings.json ด้วยแพ็คเกจ serilog.settings.configuration
ในอาร์เรย์ "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 ที่กำหนดเองและส่งผ่านไปยังอ่างล้างจานเพื่อเปลี่ยนรูปแบบของบันทึกของคุณ สิ่งนี้มีประโยชน์หากคุณต้องการเพิ่ม/ลบ/แก้ไขฟิลด์จาก Payload JSON สุดท้ายหรือปล่อยบันทึกที่ไม่ใช่ JSON ไปยัง Datadog
มีตัวเลือกหลายอย่างสำหรับการใช้งานฟอร์มเตอร์แบบกำหนดเอง วิธีที่ง่ายที่สุดคือการใช้ serilog-expressions ด้านล่างนี้เป็นตัวอย่างของการแสดงออกของ ITextFormatter ที่ลดลงของฟิลด์ MessageTemplate :
public class DatadogJsonNoTemplateFormatter : ExpressionTemplate
{
public DatadogJsonNoTemplateFormatter ( ) : base ( @"{ {
Timestamp: @t,
level: @l,
message: @m,
Properties: {..@p},
Renderings: @r}
}" ) { }
} หากคุณไม่สามารถใช้ serilog-expressions เนื่องจากความเข้ากันได้ของเฟรมเวิร์ก-คุณสามารถใช้งานของคุณเองด้วย JsonValueFormatter หรือการใช้งานเริ่มต้นเช่น: Serilog-Formatting-compacting
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 | การใช้งาน Formatter ที่กำหนดเองเพื่อเปลี่ยนรูปแบบของบันทึก |
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 คุณสามารถค้นหาไฟล์ .nupkg ที่ src/Serilog.Sinks.Datadog.Logs/bin/Release/Serilog.Sinks.Datadog.Logs.<version>.nupkg
ในฐานะ Serilog.Sinks.Datadog.Logs ใช้ serilog.sinks.periodicbatching โดยใช้ serilog.sinks.async ไม่แนะนำ
จาก serilog.sinks.async เอกสาร:
หมายเหตุ: อ่างล้างมือที่ใช้เครือข่ายหลายแห่ง (Couchdb, Elasticsearch, MongoDB, SEQ, Splunk ... ) ทำการแบทช์แบบอะซิงโครนัสแล้วและไม่ได้รับประโยชน์จากเสื้อคลุมนี้