Partager via


Obtenir des données de Serilog

Serilog est un framework de journalisation populaire pour les applications .NET. Serilog permet aux développeurs de contrôler les instructions de journal qui sont sorties avec une granularité arbitraire en fonction du nom, du niveau d’enregistreur d’événements et du modèle de message du journal. Le récepteur Serilog, également appelé appender, diffuse vos données de journal dans votre table, où vous pouvez analyser et visualiser vos journaux en temps réel.

Cet article explique comment ingérer des données avec Serilog.

Pour obtenir la liste complète des connecteurs de données, veuillez consulter la vue d’ensemble des connecteurs de données.

Prérequis

Authentification

L’authentification Microsoft Entra est utilisée pour les applications qui doivent accéder à votre table de base de données KQL sans qu’un utilisateur soit présent. Pour ingérer des données à l’aide du connecteur Serilog, vous pouvez utiliser l’une des méthodes d’authentification suivantes :

  • Un principal de service Microsoft Entra est une identité de sécurité utilisée par les applications pour accéder à des ressources Azure spécifiques. Cette identité est utilisée pour authentifier le connecteur auprès de votre base de données KQL à l’aide d’un ID client et d’un mot de passe, et peut être utilisée pour les applications qui s’exécutent en dehors d’Azure.

  • Une identité managée est utilisée pour authentifier le connecteur sur votre base de données KQL à l’aide d’un ID client. Les identités managées sont utilisées pour les applications qui s’exécutent dans Azure.

Créer un principal de service Microsoft Entra

Créez un principal de service Microsoft Entra, puis autorisez ce principal comme identité utilisée par le connecteur pour ingérer des données dans votre base de données KQL.

Le principal du service Microsoft Entra peut être créé dans le portail Azure ou programmatiquement, comme dans l’exemple suivant.

Vous accorderez ultérieurement des autorisations pour ce principal de service afin d’accéder à des ressources Kusto

  1. Connectez-vous à votre abonnement Azure via Azure CLI. Authentifiez-vous ensuite dans le navigateur.

    az login
    
  2. Choisissez l’abonnement pour héberger le principal. Cette étape est nécessaire quand vous avez plusieurs abonnements.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Créez le principal de service. Dans cet exemple, le principal de service est appelé my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. À partir des données JSON retournées, copiez le appId, password et tenant pour une utilisation ultérieure.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "my-service-principal",
      "name": "my-service-principal",
      "password": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "tenant": "00001111-aaaa-2222-bbbb-3333cccc4444"
    }
    

Vous avez créé votre application Microsoft Entra et votre principal de service.

Créer une table cible et un mappage d’ingestion

Créez une table cible pour les données entrantes et un mappage d’ingestion pour mapper les colonnes de données ingérées aux colonnes de la table cible. Dans les étapes suivantes, le schéma de table et le mappage correspondent aux données envoyées à partir de l’exemple d’application.

  1. Exécutez la commande de création de table dans votre éditeur de requête, en remplaçant l’espace réservé TableName par le nom de la table cible :

    .create table <TableName> (Timestamp: datetime, Level: string, Message: string, Exception: string, Properties: dynamic, Position: dynamic, Elapsed: int)
    
  2. Exécutez la commande de mappage d’ingestion .create suivante, en remplaçant les espaces réservés TableName par le nom de la table cible et TableNameMapping par le nom du mappage d’ingestion :

    .create table <TableName> ingestion csv mapping '<TableNameMapping>' '[{"Name":"Timestamp","DataType":"","Ordinal":"0","ConstValue":null},{"Name":"Level","DataType":"","Ordinal":"1","ConstValue":null},{"Name":"Message","DataType":"","Ordinal":"2","ConstValue":null},{"Name":"Exception","DataType":"","Ordinal":"3","ConstValue":null},{"Name":"Properties","DataType":"","Ordinal":"4","ConstValue":null},{"Name":"Position","DataType":"","Ordinal":"5","ConstValue":null},{"Name":"Elapsed","DataType":"","Ordinal":"6","ConstValue":null}]'
    
  3. Accordez au principal de service Créer un principal de service Microsoft Entra les autorisations de rôle d’ingestion de base de données pour travailler avec la base de données. Pour plus d’informations, consultez Exemples. Remplacez l’espace réservé DatabaseName par le nom de la base de données cible et ApplicationID par la valeur AppId que vous avez enregistrée lors de la création d’un principal de service Microsoft Entra.

    .add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'App Registration'
    

Utiliser Serilog dans votre application ASP.NET Core

Cette section explique comment intégrer Serilog dans votre application ASP.NET Core pour journaliser les données et les envoyer à votre table KQL.

Installer le package

Ajoutez le package de bibliothèque NuGet Serilog.Sinks.AzureDataExplorer. Utilisez la commande Install-Package en spécifiant le nom du package NuGet.

Install-Package Serilog.Sinks.AzureDataExplorer

Ajouter le récepteur Serilog à votre application

Procédez comme suit pour :

  • Ajoutez le récepteur Serilog à votre application.
  • Configurez les variables utilisées par le récepteur.
  • Générez et exécutez l'application.
  1. Ajoutez le code suivant à votre application :

    using Serilog.Sinks.AzureDataExplorer;
    
  2. Configurez le récepteur Serilog, en remplaçant les espaces réservés à l’aide des informations de la table suivantes :

    Pour l’authentification du principal de service Microsoft Entra, utilisez le code suivant :

    var log = new LoggerConfiguration()
    .WriteTo.AzureDataExplorerSink(new AzureDataExplorerSinkOptions
    {
        IngestionEndpointUri = "<TargetURI>",
        DatabaseName = "<MyDatabase>",
        TableName = "<MyTable>",
        BufferBaseFileName = "<BufferBaseFileName>"
    })
    .CreateLogger();
    
    

    Utilisez le tableau ci-dessous pour définir les valeurs des options d'évier :

    Variable Descriptif
    IngestionEndPointUri L’URI d’ingestion.
    DatabaseName Nom de la base de données cible, respectant la casse.
    TableName Le nom respectant la casse d’une table cible existante. Par exemple, SerilogTest est le nom de la table créée dans Créer une table cible et un mappage d’ingestion.
    AppId ID client d’application requis pour l’authentification du principal de service Microsoft Entra. Vous avez enregistré cette valeur dans Créer un principal de service Microsoft Entra.
    AppKey Clé d’application requise pour l’authentification du principal du service Microsoft Entra. Vous avez enregistré cette valeur sous password dans Créer un principal de service Microsoft Entra.
    Tenant ID du locataire dans lequel l’application est inscrite lors de l’utilisation de l’authentification du principal de service Microsoft Entra. Vous avez enregistré cette valeur dans Créer un principal de service Microsoft Entra.
    BufferBaseFileName Nom de fichier de base facultatif pour le fichier de mémoire tampon. Définissez cette valeur si vous avez besoin que vos journaux soient durables par rapport à la perte de défaillances de connexion résultantes sur votre cluster. Par exemple : C:/Temp/Serilog.
    ManagedIdentityClientId L'ID client de l'identité managée assignée par l'utilisateur, lors de l'utilisation de l'authentification par identité managée.

    Pour plus d’options, consultez Options du récepteur.

  3. Envoyez des données à votre base de données à l’aide du récepteur Serilog. Par exemple :

    log.Verbose("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Information("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Warning("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Error(new Exception(), "Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Debug("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    
  4. Générez et exécutez l'application. Par exemple, si vous utilisez Visual Studio, appuyez sur F5.

  5. Vérifiez que les données se trouvent dans votre table. Exécutez la requête suivante en remplaçant l’espace réservé par le nom de la table créée à l’étape précédente :

    <TableName>
    | take 10
    

Exécution de l'exemple d'application

Si vous n’avez pas vos propres données à tester, vous pouvez utiliser l’exemple d’application de générateur de journaux avec des exemples de données pour tester la configuration et l’utilisation du récepteur Serilog.

  1. Clonez le référentiel Git du récepteur Serilog à l’aide de la commande Git suivante :

    git clone https://github.com/Azure/serilog-sinks-azuredataexplorer
    
  2. Définissez les variables environnementales suivantes pour configurer le récepteur Serilog :

    Variable Descriptif
    IngestionEndPointUri L’URI d’ingestion.
    DatabaseName Nom de la base de données cible, respectant la casse.
    TableName Le nom respectant la casse d’une table cible existante. Par exemple, SerilogTest est le nom de la table créée dans Créer une table cible et un mappage d’ingestion.
    AppId ID client d’application requis pour l’authentification du principal du service Microsoft Entra. Vous avez enregistré cette valeur dans Créer un principal de service Microsoft Entra.
    AppKey Clé d'application requise pour l'authentification du principal de service Microsoft Entra. Vous avez enregistré cette valeur dans Créer un principal de service Microsoft Entra.
    Tenant ID du locataire dans lequel l’application est inscrite lors de l’utilisation de l’authentification du principal de service Microsoft Entra. Vous avez enregistré cette valeur dans Créer un principal de service Microsoft Entra.
    BufferBaseFileName Nom de fichier de base pour le fichier de mémoire tampon. Définissez cette valeur si vous avez besoin que vos journaux soient durables par rapport à la perte de défaillances de connexion résultantes sur votre cluster. Par exemple, C:/Temp/Serilog
    ManagedIdentityClientId L'ID client de l'identité managée assignée par l'utilisateur, lors de l'utilisation de l'authentification par identité managée.

    Vous pouvez définir manuellement les variables d’environnement ou à l’aide des commandes suivantes :

    $env:ingestionURI="<ingestionURI>"
    $env:appId="<appId>"
    $env:appKey="<appKey>"
    $env:tenant="<tenant>"
    $env:databaseName="<databaseName>"
    $env:tableName="<tableName>"
    $env:managedIdentityClientId="<managedIdentityClientId>"
    
  3. Dans votre terminal, accédez au dossier racine du référentiel cloné et exécutez la commande .NET suivante pour générer l’application :

    dotnet build src
    
  4. Dans votre terminal, accédez au dossier des échantillons et exécutez la commande .NET suivante pour exécuter l’application :

    dotnet build run
    
  1. Sélectionnez la base de données KQL cible et exécutez la requête suivante pour explorer les données ingérées, en remplaçant l’espace réservé TableName par le nom de la table cible :

    <TableName>
    | take 10
    

    Vous devez obtenir un résultat semblable à ce qui suit :

    Horodatage Niveau Message Exception Propriétés Poste Écoulé
    2023-03-12 1248:474590 Informations Traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 1248474770 Avertissement Traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 1248475590 Erreur Zohar traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 1248474790 Informations Traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 124847.5610 Avertissement Traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 124847.5620 Erreur Zohar traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 124847.5630 Informations Traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 124847.5660 Erreur Traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 124847.5670 Informations Zohar traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34
    2023-03-12 124847.5680 Avertissement Traité { Latitude : 25, Longitude :30} {"Position » : { « Latitude » : 25, « Longitude » :30} { « Latitude » : 25, « Longitude » :30} 34