Un sumidero serilog que envía eventos y registra de inmediato a Datadog. Por defecto, el fregadero envía registros a través de HTTPS
Paquete - Serilog.sinks.datadog.logs | Plataformas - .NET 4.5, .NET 4.6.1, .NET 4.7.2, NetStandard1.3, NetStandard2.0
Nota: Para otras versiones de .NET, asegúrese de que la versión TLS predeterminada utilizada sea 1.2
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// Some code
} De manera predeterminada, los registros se reenvían a Datadog a través de HTTPS en el puerto 443 al sitio de EE. UU. Puede cambiar el sitio a la UE utilizando la propiedad url y establecerlo en https://http-intake.logs.datadoghq.eu .
Puede anular el comportamiento predeterminado y usar el reenvío TCP especificando manualmente las siguientes propiedades (URL, Port, USesSL, USETCP).
También puede agregar las siguientes propiedades (fuente, servicio, host, etiquetas) al fregadero de 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
} Enviar el siguiente registro:
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 ) ;
}o
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 ( ) ;En la plataforma, el registro se parece al siguiente objeto 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 Desde 0.2.0, puede configurar el fregadero de Datadog utilizando un archivo appsettings.json con el paquete serilog.settings.configuration.
En la matriz "Serilog.WriteTo" , agregue una entrada para DatadogLogs . A continuación se muestra un ejemplo:
"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 "
}
} Nota: La sección configuration es opcional para que pueda anular los valores predeterminados.
Puede implementar un ITextFormatter personalizado y pasarlo al fregadero para cambiar el formato de sus registros. Esto es útil si desea agregar/eliminar/modificar los campos de la carga útil JSON final, o emitir registros no JSON a Datadog.
Hay varias opciones para implementar formators personalizados. La forma más fácil es usar las expresiones serilog. A continuación se muestra un ejemplo de una expresión serilog ITextFormatter que deja caer el campo MessageTemplate :
public class DatadogJsonNoTemplateFormatter : ExpressionTemplate
{
public DatadogJsonNoTemplateFormatter ( ) : base ( @"{ {
Timestamp: @t,
level: @l,
message: @m,
Properties: {..@p},
Renderings: @r}
}" ) { }
} Si no puede usar Serilog-Expressions debido a la compatibilidad de Framework, puede implementar el suyo con JsonValueFormatter o una implementación predeterminada Ej: SERILOG-Formatting-Compact
DatadogLogs admite los siguientes argumentos:
| argumento | Tipo | Descripción |
|---|---|---|
apiKey | string | Su clave de API Datadog. |
source | string | El nombre de integración. |
service | string | El nombre del servicio. |
host | string | El nombre de host. |
tags | string[] | Etiquetas personalizadas. |
configuration | DatadogConfiguration | El Datadog registra la configuración del cliente. |
restrictedToMinimumLevel | LogEventLevel | El nivel de registro mínimo para el fregadero. |
batchSizeLimit | int | El número máximo de eventos para emitir en un solo lote. |
batchPeriod | TimeSpan | El momento de esperar antes de emitir un nuevo lote de eventos. |
queueLimit | int | El número máximo de eventos para mantener en la cola interna del fregadero, o null para una cola ilimitada. El valor predeterminado es 10000 |
exceptionHandler | Action<Exception> | Esta función se llama cuando se produce una excepción cuando se usa DatadogConfiguration.UseTCP=false (la configuración predeterminada). |
detectTCPDisconnection | bool | Detectar cuándo se pierde la conexión TCP y recree una nueva conexión. |
formatter | ITextFormatter | Una implementación de formatilla personalizada para cambiar el formato de los registros |
maxMessageSize | int | El tamaño máximo en los bytes de un mensaje antes de que se divida en trozos |
Nota: Si maxMessageSize excede el límite de API documentado de 1 MB, la ingesta eliminará cualquier carga útil mayor de 1 MB.
Golpee la versión en src/Serilog.Sinks.Datadog.Logs.csproj y fusione su rama
Ejecute estos comandos en la carpeta Root del proyecto
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 Puede encontrar el archivo .nupkg en src/Serilog.Sinks.Datadog.Logs/bin/Release/Serilog.Sinks.Datadog.Logs.<version>.nupkg
Como Serilog.Sinks.Datadog.Logs implementa serilog.sinks.periodicbatching, no se recomienda el uso de serilog.sinks.async.
De serilog.sinks.async Documentation:
Nota: Muchos de los sumideros basados en la red (CouchDB, Elasticsearch, MongoDB, SEQ, Splunk ...) ya realizan un lote asíncrono de forma nativa y no se benefician de este envoltorio.