Partager via


Collecter des journaux à partir d’un fichier texte avec l’agent Azure Monitor

Les journaux texte personnalisés constituent l’une des sources de données utilisées dans une règle de collecte de données (DCR). Les détails sur la création d’une DCR sont fournis dans Collecter des données avec l’agent Azure Monitor. Cet article fournit des informations complémentaires sur le type de journaux texte.

De nombreuses applications et services consignent des informations dans des fichiers texte au lieu des services de journalisation standard tels que le Journal des événements Windows ou Syslog. Vous pouvez collecter ces données avec l’agent Azure Monitor et les stocker dans un espace de travail Log Analytics avec des données collectées à partir d’autres sources.

Prérequis

Fonctionnement de base

Le diagramme suivant montre l’opération de base pour collecter des données de journal à partir d’un fichier texte.

  1. L’agent surveille les fichiers journaux qui correspondent à un modèle de nom spécifié sur le disque local.
  2. Chaque entrée du journal est collectée et envoyée à Azure Monitor. Le flux entrant inclut l’intégralité de l’entrée de journal dans une même colonne.
  3. Si vous utilisez la transformation par défaut, l’intégralité de l’entrée de journal est envoyée dans une même colonne de la table cible.
  4. Si vous utilisez la transformation personnalisée, l’entrée de journal peut être analysée dans plusieurs colonnes de la table cible.

Diagramme montrant la collecte d’un journal texte par l’agent Azure Monitor, représentant montrant à la fois une collecte simple et la transformation d’un fichier délimité par des virgules.

Exigences du fichier texte et meilleures pratiques

Le fichier que l’agent Azure Monitor surveille doit répondre aux exigences suivantes :

  • Vous devez stocker le fichier sur le lecteur local de la machine contenant l’agent Azure Monitor du répertoire en cours de surveillance.
  • Chaque enregistrement doit être délimité par une fin de ligne.
  • Le fichier doit utiliser un encodage ASCII ou UTF-8. D’autres formats, tel UTF-16, ne sont pas pris en charge.
  • Vous devez ajouter les nouveaux enregistrements à la fin du fichier et ne pas remplacer les anciens enregistrements. Le remplacement entraîne une perte de données.

Respectez les recommandations suivantes pour ne perdre aucune donnée et de ne rencontrer aucun problème de performances :

  • Créez un fichier journal tous les jours pour pouvoir supprimer facilement les anciens fichiers.
  • Nettoyez tous les fichiers journaux du répertoire surveillé de façon continue. Le suivi de nombreux fichiers journaux peut entraîner une augmentation de l’utilisation de la mémoire et du processeur de l’agent. Patientez au moins 2 jours afin d’allouer le temps nécessaire au traitement des journaux.
  • Ne renommez pas un fichier qui correspond au modèle d’analyse de fichier en utilisant un autre nom qui correspond également au modèle d’analyse de fichier. Cette opération entraîne l’ingestion de données en double.
  • Ne renommez ni ne copiez pas de fichiers journaux volumineux qui correspondent au modèle d’analyse de fichier dans le répertoire surveillé. Si vous devez l’effectuer, ne dépassez pas 50 Mo par minute.

Flux entrant

Remarque

La prise en charge multiligne qui utilise un horodatageISO 8601 pour délimiter les événements est attendue pour la mi-octobre 2024

Le flux entrant de données inclut les colonnes du tableau suivant.

Colonne Type Description
TimeGenerated DATETIME Date et heure de génération de l’enregistrement. Cette valeur est automatiquement renseignée lorsque l’enregistrement est ajouté à l’espace de travail Log Analytics. Vous pouvez remplacer cette valeur en utilisant une transformation pour définir TimeGenerated sur une autre valeur.
RawData string Intégralité de l’entrée de journal dans une même colonne. Vous pouvez utiliser une transformation pour décomposer ces données en plusieurs colonnes avant de les envoyer à la table.
FilePath string Si vous ajoutez cette colonne au flux entrant dans la DCR, le chemin du fichier journal est renseigné dans cette dernière. Cette colonne n’est pas créée automatiquement. Vous ne pouvez pas l’ajouter avec le portail. Vous devez modifier la DCR créée par le portail ou créer une DCR manuellement en utilisant une autre méthode permettant de définir explicitement le flux entrant.
Computer string Si vous ajoutez cette colonne au flux entrant dans la DCR, le nom de l’ordinateur y sera renseigné avec le nom du journal. Cette colonne n’est pas créée automatiquement. Vous ne pouvez pas l’ajouter avec le portail. Vous devez modifier la DCR créée par le portail ou créer une DCR manuellement en utilisant une autre méthode permettant de définir explicitement le flux entrant.

Table personnalisée

Pour collecter les données de journal d’un fichier texte, vous devez créer une table personnalisée dans votre espace de travail Log Analytics pour recevoir les données. Le schéma de table doit correspondre aux données que vous collectez. Sinon, vous devez ajouter une transformation pour vous assurer que le schéma de sortie correspond à la table.

Avertissement

Vous ne devez pas utiliser une table de journal personnalisée existante utilisée par les agents MMA. Lorsque le premier agent AMA aura écrit dans la table, vos agents MMA ne pourront plus écrire dans cette table. Pour éviter la perte de données MMA, vous devez créer une nouvelle table pour que AMA puisse l’utiliser.

Par exemple, vous pouvez utiliser le script PowerShell suivant pour créer une table personnalisée avec RawData, FilePath et Computer. Vous n’avez pas besoin de transformation avec cette table, car le schéma correspond au schéma par défaut du flux entrant.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "DateTime"
                    }, 
                    {
                        "name": "RawData",
                        "type": "String"
                    },
                    {
                        "name": "FilePath",
                        "type": "String"
                    },
                    {
                        "name": "Computer",
                        "type": "String"
                    }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

Créer une règle de collecte de données pour un fichier texte

Créez une règle de collecte de données, comme décrit dans Collecter des données avec l’agent Azure Monitor. Dans l’étape Collecter et livrer, sélectionnez Journaux texte personnalisés dans la liste déroulante Type de source de données.

Setting Description
Modèle de fichier Identifie l’emplacement et le nom des fichiers journaux sur le disque local. Utilisez un caractère générique pour les noms de fichiers qui varient, par exemple lorsque vous créez un nouveau fichier chaque jour avec un nouveau nom. Vous pouvez entrer plusieurs modèles de fichiers séparés par des virgules.

Exemples :
- C:\Logs\MyLog.txt
- C:\Logs\MyLog*.txt
- C:\App01\AppLog.txt, C:\App02\AppLog.txt
- /var/mylog.log
- /var/mylog*.log
Nom de table Nom de la table cible dans l’espace de travail Log Analytics.
Séparateur d’enregistrements Actuellement inutilisé, mais réservé à une potentielle utilisation future visant à autoriser les délimiteurs autres que la fin de ligne actuellement prise en charge (/r/n).
Transformation Transformation de la durée d’ingestion en vue de filtrer les enregistrements ou de mettre en forme les données entrantes pour la table cible. Utilisez source pour laisser les données entrantes en l’état.

Fichiers journaux délimités

De nombreux fichiers journaux texte comportent des entrées délimitées par un caractère (comme une virgule). Pour analyser ces données en plusieurs colonnes, utilisez une transformation avec la fonction split.

Par exemple, étudiez le fichier texte avec les données délimitées par des virgules ci-dessous. Ces champs peuvent être décrits comme suit : Time, Code, Severity, Module et Message.

2024-06-21 19:17:34,1423,Error,Sales,Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,Nightly backup complete.

La transformation suivante analyse les données en plusieurs colonnes. split retourne des données dynamiques : vous devez utiliser des fonctions comme tostring et toint pour convertir les données dans le type scalaire qui convient. Vous devez également indiquer un nom pour chaque entrée correspondant au nom de colonne dans la table cible. Notez que cet exemple fournit une valeur TimeGenerated. Si ce n’était pas le cas, la durée d’ingestion serait utilisée.

source | project d = split(RawData,",") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])

Capture d’écran montrant la configuration de la collecte de fichiers délimités par des virgules.

La récupération de ces données avec une requête de journal retourne les résultats suivants.

Capture d’écran montrant la requête de journal retournant les résultats de la collecte de fichiers délimités par des virgules.

Dépannage

Si vous ne collectez pas les données attendues, appliquez les étapes suivantes.

  • Vérifiez que les données sont écrites dans le fichier journal en cours de collecte.
  • Vérifiez que le nom et l’emplacement du fichier journal correspondent au modèle de fichier spécifié.
  • Vérifiez que le schéma de la table cible correspond au flux entrant ou que vous utilisez une transformation qui convertit le flux entrant dans le schéma qui convient.
  • Pour vérifier que l’agent est opérationnel et que les données sont reçues, consultez Vérifier l’opération.

Étapes suivantes

Pour en savoir plus :