Partager via


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

Les journaux JSON 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 ou JSON.

De nombreuses applications et services consignent des informations dans des fichiers JSON 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 JSON.

  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 défini par l’utilisateur est utilisé pour analyser les données de journal en colonnes.
  3. Une transformation par défaut est utilisée si le schéma du flux entrant correspond au schéma de la table cible.

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

Exigences du fichier JSON 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.
  • Le texte JSON doit être contenu dans une seule ligne. Le format du corps JSON n’est pas pris en charge. Voir l’exemple ci-dessous.

Respectez les recommandations suivantes pour ne perdre aucune donnée et 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.

Table personnalisée

Pour collecter les données de journal d’un fichier JSON, 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 colonnes du flux entrant. 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 personnalisée existante utilisée par l’agent Log Analytique. Les agents hérités ne pourront pas écrire dans la table une fois que le premier agent Azure Monitor y écrit. Créez une table pour l’agent Azure Monitor à utiliser pour empêcher la perte de données de l’agent Log Analytique.

Par exemple, vous pouvez utiliser le script PowerShell suivant pour créer une table personnalisée avec plusieurs colonnes.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "DateTime"
                    }, 
                    {
                        "name": "MyStringColumn",
                        "type": "string"
                    },
                    {
                        "name": "MyIntegerColumn",
                        "type": "int"
                    },
                    {
                        "name": "MyRealColumn",
                        "type": "real"
                    },
                    {
                        "name": "MyBooleanColumn",
                        "type": "bool"
                    },
                    {
                        "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 JSON

Remarque

L’ingestion de fichier personnalisé JSON basée sur l’agent est actuellement en préversion et n’a pas encore d’expérience d’interface utilisateur complète dans le portail. Bien que vous puissiez créer la DCR à l’aide du portail, vous devez le modifier pour définir les colonnes dans le flux entrant. Cette section contient des détails sur la création du DCR à l’aide d’un modèle ARM.

Schéma de 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

Les fichiers JSON incluent un nom de propriété avec chaque valeur, et le flux entrant dans la DCR doit inclure une colonne correspondant au nom de chaque propriété. Vous devez modifier la section columns du modèle ARM avec les colonnes de votre journal.

Le tableau suivant décrit les colonnes facultatives que vous pouvez inclure en plus des colonnes définissant les données dans votre fichier journal.

Colonne Type Description
TimeGenerated DATETIME Date et heure de génération de l’enregistrement. Cette valeur est automatiquement remplie au moment où l’enregistrement est ajouté à l’espace de travail log Analytique s’il n’est pas inclus dans le flux entrant.
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.

Transformation

La transformation modifie potentiellement le flux entrant pour filtrer les enregistrements ou modifier le schéma pour qu’il corresponde à la table cible. Si le schéma du flux entrant est identique à la table cible, vous pouvez utiliser la transformation par défaut de source. Si ce n’est pas le cas, modifiez la section transformKql du modèle ARM avec une requête KQL qui retourne le schéma requis.

Modèle ARM

Utilisez le modèle ARM suivant pour créer une DCR pour collecter des fichiers journaux de texte, en apportant les modifications décrites dans les sections précédentes. Le tableau suivant décrit les paramètres qui nécessitent des valeurs lorsque vous déployez le modèle.

Setting Description
Nom de la règle de collecte de données Nom unique du DCR.
ID de ressource du point de terminaison de collecte de données ID de ressource du point de terminaison de collecte de données (DCE).
Emplacement Région du DCR. Il doit être le même emplacement que l’espace de travail log Analytique.
Modèles de fichiers 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 (AMA version 1.26 ou ultérieure requise pour plusieurs modèles de fichiers sur Linux).

Exemples :
– C:\Logs\MyLog.json
– C:\Logs\MyLog*.json
– C:\App01\AppLog.json, C:\App02\AppLog.json
– /var/mylog.json
– /var/mylog*.json
Nom de table Nom de la table cible dans l’espace de travail Log Analytics.
ID de la ressource d’espace de travail ID de ressource de l’espace de travail log Analytique avec la table cible.

Important

Lorsque vous créez une DCR avec un modèle ARM, vous devez toujours associer la DCR aux agents qui l’utiliseront. Vous pouvez modifier la DCR dans le portail Azure et sélectionner les agents comme décrit dans Ajouter des ressources

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "dataCollectionRuleName": {
            "type": "string",
            "metadata": {
                "description": "Unique name for the DCR. "
            }
        },
        "dataCollectionEndpointResourceId": {
            "type": "string",
            "metadata": {
              "description": "Resource ID of the data collection endpoint (DCE)."
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "Region for the DCR. Must be the same location as the Log Analytics workspace. "
            }
        },
        "filePatterns": {
            "type": "string",
            "metadata": {
                "description": "Path on the local disk for the log file to collect. May include wildcards.Enter multiple file patterns separated by commas (AMA version 1.26 or higher required for multiple file patterns on Linux)."
            }
        },
        "tableName": {
            "type": "string",
            "metadata": {
                "description": "Name of destination table in your Log Analytics workspace. "
            }
        },
        "workspaceResourceId": {
            "type": "string",
            "metadata": {
                "description": "Resource ID of the Log Analytics workspace with the target table."
            }
        }
    },
    "variables": {
        "tableOutputStream": "[concat('Custom-', parameters('tableName'))]"
    },
    "resources": [
        {
            "type": "Microsoft.Insights/dataCollectionRules",
            "apiVersion": "2022-06-01",
            "name": "[parameters('dataCollectionRuleName')]",
            "location": "[parameters('location')]",
            "properties": {
                "dataCollectionEndpointId": "[parameters('dataCollectionEndpointResourceId')]",
                "streamDeclarations": {
                    "Custom-Json-stream": {
                        "columns": [
                            {
                                "name": "TimeGenerated",
                                "type": "datetime"
                            },
                            {
                                "name": "FilePath",
                                "type": "string"
                            },
                            {
                                "name": "MyStringColumn",
                                "type": "string"
                            },
                            {
                                "name": "MyIntegerColumn",
                                "type": "int"
                            },
                            {
                                "name": "MyRealColumn",
                                "type": "real"
                            },
                            {
                                "name": "MyBooleanColumn",
                                "type": "boolean"
                            }
                        ]
                    }
                },
                "dataSources": {
                    "logFiles": [
                        {
                            "streams": [
                                "Custom-Json-stream"
                            ],
                            "filePatterns": [
                                "[parameters('filePatterns')]"
                            ],
                            "format": "json",
                            "name": "Custom-Json-stream"
                        }
                    ]
                },
                "destinations": {
                    "logAnalytics": [
                        {
                            "workspaceResourceId": "[parameters('workspaceResourceId')]",
                            "name": "workspace"
                        }
                    ]
                },
                "dataFlows": [
                    {
                        "streams": [
                            "Custom-Json-stream"
                        ],
                        "destinations": [
                            "workspace"
                        ],
                        "transformKql": "source",
                        "outputStream": "[variables('tableOutputStream')]"
                    }
                ]
            }
        }
    ]
}

Dépannage

Si vous ne collectez pas les données attendues du journal JSON, effectuez 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 du flux entrant dans la DCR correspond au schéma dans le fichier journal.
  • 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 :