Un puits Serilog qui envoie immédiatement des événements et se connectés à Datadog. Par défaut, l'évier envoie des journaux sur HTTPS
Package - Serilog.sinks.datadog.logs | Plateformes - .net 4.5, .net 4.6.1, .net 4.7.2, netstandard1.3, netstandard2.0
Remarque: Pour les autres versions .NET, assurez-vous que la version TLS par défaut utilisée est 1.2
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// Some code
} Par défaut, les journaux sont transmis à Datadog via HTTPS sur le port 443 vers le site américain. Vous pouvez changer le site en UE en utilisant la propriété url et le définir sur https://http-intake.logs.datadoghq.eu .
Vous pouvez remplacer le comportement par défaut et utiliser le transfert TCP en spécifiant manuellement les propriétés suivantes (URL, port, USESSL, USETCP).
Vous pouvez également ajouter les propriétés suivantes (source, service, hôte, balises) au puits 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
} Envoi du journal suivant:
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 ( ) ;Dans la plate-forme, le journal ressemble à l'objet JSON suivant:
{
"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 Depuis 0.2.0, vous pouvez configurer le puits de forme de données en utilisant un fichier appsettings.json avec le package Serilog.settings.configuration.
Dans le tableau "Serilog.WriteTo" , ajoutez une entrée pour DatadogLogs . Un exemple est indiqué ci-dessous:
"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 "
}
} Remarque: La section configuration est facultative afin que vous puissiez remplacer les valeurs par défaut.
Vous pouvez implémenter un ITextFormatter personnalisé et le transmettre à l'évier pour modifier le format de vos journaux. Ceci est utile si vous souhaitez ajouter / supprimer / modifier les champs de la charge utile JSON finale ou émettre des journaux non JSON à Datadog.
Il existe plusieurs options pour implémenter des formateurs personnalisés. Le moyen le plus simple est d'utiliser des expressions de Serilog. Vous trouverez ci-dessous un exemple d'un ITextFormatter Serilog qui laisse tomber le champ MessageTemplate :
public class DatadogJsonNoTemplateFormatter : ExpressionTemplate
{
public DatadogJsonNoTemplateFormatter ( ) : base ( @"{ {
Timestamp: @t,
level: @l,
message: @m,
Properties: {..@p},
Renderings: @r}
}" ) { }
} Si vous ne pouvez pas utiliser les expressions Serilog en raison de la compatibilité du cadre - vous pouvez implémenter le vôtre avec JsonValueFormatter ou une implémentation par défaut Ex: serilog-formatting-compact
DatadogLogs prend en charge les arguments suivants:
| argument | Taper | Description |
|---|---|---|
apiKey | string | Votre clé API Datadog. |
source | string | Le nom d'intégration. |
service | string | Le nom du service. |
host | string | Le nom d'hôte. |
tags | string[] | Tags personnalisés. |
configuration | DatadogConfiguration | La configuration du client des journaux de datadog. |
restrictedToMinimumLevel | LogEventLevel | Le niveau de journal minimum pour l'évier. |
batchSizeLimit | int | Le nombre maximum d'événements à émettre en un seul lot. |
batchPeriod | TimeSpan | Le temps d'attendre avant d'émettre un nouveau lot d'événements. |
queueLimit | int | Nombre maximum d'événements à tenir dans la file d'attente interne de l'évier, ou null pour une file d'attente illimitée. La valeur par défaut est 10000 |
exceptionHandler | Action<Exception> | Cette fonction est appelée lorsqu'une exception se produit lors de l'utilisation DatadogConfiguration.UseTCP=false (la configuration par défaut). |
detectTCPDisconnection | bool | Détecter quand la connexion TCP est perdue et recréer une nouvelle connexion. |
formatter | ITextFormatter | Une implémentation de format personnalisée pour modifier le format des journaux |
maxMessageSize | int | La taille maximale en octets d'un message avant d'être divisé en morceaux |
Remarque: Si maxMessageSize dépasse la limite API documentée de 1 Mo - toutes les charges utiles supérieures à 1 Mo seront supprimées par l'admission.
Bump la version dans src/Serilog.Sinks.Datadog.Logs.csproj et fusionnez votre branche
Exécutez ces commandes dans le dossier racine du projet
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 Vous pouvez trouver le fichier .nupkg sur src/Serilog.Sinks.Datadog.Logs/bin/Release/Serilog.Sinks.Datadog.Logs.<version>.nupkg
Comme Serilog.Sinks.Datadog.Logs implémente Sentelog.sinks.perioddicBatching, en utilisant serilog.sinks.async n'est pas recommandé.
De la documentation de Serilog.Sinks.async:
Remarque: De nombreux puits basés sur le réseau (CouchDB, Elasticsearch, MongoDB, SEQ, Splunk ...) effectuent déjà un lot asynchrone nativement et ne bénéficient pas de cet emballage.