Um pia serilog que envia eventos e logs imediatamente para o Datadog. Por padrão, a pia envia logs sobre https
Pacote - Serilog.sinks.datadog.logs | Plataformas - .NET 4.5, .NET 4.6.1, .NET 4.7.2, NetStandard1.3, NetStandard2.0
Nota: Para outras versões .NET, verifique se a versão TLS padrão usada é 1.2
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// Some code
} Por padrão, os logs são encaminhados para o DATADOG via HTTPS na porta 443 para o site dos EUA. Você pode alterar o site para a UE usando a propriedade url e configurá-lo como https://http-intake.logs.datadoghq.eu .
Você pode substituir o comportamento padrão e usar o encaminhamento do TCP especificando manualmente as seguintes propriedades (URL, porta, usessl, USETCP).
Você também pode adicionar as seguintes propriedades (origem, serviço, host, tags) ao coletor 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
} Enviando o seguinte log:
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 ) ;
}ou
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 ( ) ;Na plataforma, o log parece como o seguinte 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, você pode configurar o pia do datadog usando um arquivo appsettings.json com o pacote Serilog.Settings.Configuration.
Na matriz "Serilog.WriteTo" , adicione uma entrada para DatadogLogs . Um exemplo é mostrado abaixo:
"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: A seção configuration é opcional para que você possa substituir os padrões.
Você pode implementar um ITextFormatter personalizado e passá -lo para a pia para alterar o formato de seus logs. Isso é útil se você deseja adicionar/remover/modificar os campos da carga útil final do JSON ou emitir logs não json para Datadog.
Existem várias opções para implementar formatados personalizados. A maneira mais fácil é usar expressões de serilog. Abaixo está um exemplo de um ITextFormatter de expressão de serilog que solta o campo MessageTemplate :
public class DatadogJsonNoTemplateFormatter : ExpressionTemplate
{
public DatadogJsonNoTemplateFormatter ( ) : base ( @"{ {
Timestamp: @t,
level: @l,
message: @m,
Properties: {..@p},
Renderings: @r}
}" ) { }
} Se você não puder usar o Serilog-Expressions devido à compatibilidade da estrutura-você pode implementar o seu próprio com JsonValueFormatter ou uma implementação padrão Ex: Serilog-formating-Compact
DatadogLogs suporta os seguintes argumentos:
| argumento | Tipo | Descrição |
|---|---|---|
apiKey | string | Sua chave de API do Datadog. |
source | string | O nome da integração. |
service | string | O nome do serviço. |
host | string | O nome do host. |
tags | string[] | Tags personalizadas. |
configuration | DatadogConfiguration | A configuração do cliente Datadog Logs. |
restrictedToMinimumLevel | LogEventLevel | O nível mínimo de log para a pia. |
batchSizeLimit | int | O número máximo de eventos a serem emitidos em um único lote. |
batchPeriod | TimeSpan | A hora de esperar antes de emitir um novo lote de eventos. |
queueLimit | int | Número máximo de eventos a serem mantidos na fila interna da pia, ou null para uma fila ilimitada. O padrão é 10000 |
exceptionHandler | Action<Exception> | Esta função é chamada quando ocorre uma exceção ao usar DatadogConfiguration.UseTCP=false (a configuração padrão). |
detectTCPDisconnection | bool | Detecte quando a conexão TCP é perdida e recrie uma nova conexão. |
formatter | ITextFormatter | Uma implementação de formatador personalizada para alterar o formato dos logs |
maxMessageSize | int | O tamanho máximo em bytes de uma mensagem antes de ser dividido em pedaços |
Nota: Se maxMessageSize exceder o limite da API documentado de 1 MB - quaisquer cargas úteis maiores que 1 MB serão descartadas pela ingestão.
Bumpe a versão em src/Serilog.Sinks.Datadog.Logs.csproj e mescla sua filial
Execute esses comandos na pasta Root do Projeto
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 Você pode encontrar o arquivo .nupkg em src/Serilog.Sinks.Datadog.Logs/bin/Release/Serilog.Sinks.Datadog.Logs.<version>.nupkg
Como Serilog.Sinks.Datadog.Logs implementa o Serilog.sinks.periodicbatching, usando o Serilog.sinks.async não é recomendado.
De Serilog.sinks.async Documentation:
NOTA: Muitos dos sumidouros baseados em rede (CouchDB, Elasticsearch, MongoDB, SEQ, Splunk ...) já realizam lote assíncrono nativamente e não se beneficiam desse invólucro.