Création d'un analyseur
En créant un analyseur, vous définissez le mode d'extraction des entrées de journal d'un fichier journal et le mode d'extraction des champs d'une entrée de journal.
-
Ouvrez le menu de navigation et cliquez sur Observation et gestion. Sous Logging Analytics, cliquez sur Administration. La page Présentation de l'administration apparaît.
-
Les ressources d'administration sont répertoriées dans le panneau de navigation de gauche sous Ressources. Cliquez sur Analyseurs.
- Sur la page Analyseurs, cliquez sur Créer.
- Sélectionnez l'une des options suivantes : Type d'expression régulière, Type de JSON, Type XML ou Type délimité.
La page Créer un analyseur apparaît.
Dans le cas du type d'expression régulière, la page Créer un analyseur s'ouvre en mode Guidé, par défaut. Poursuivez dans ce mode si vous voulez que Logging Analytics génère l'expression régulière pour analyser les journaux après avoir sélectionné les champs. Si vous souhaitez écrire une expression régulière pour l'analyse, passez en mode Avancé.
Vous pouvez également créer un analyseur en utilisant comme modèle un analyseur défini par Oracle. Sélectionnez un analyseur défini par Oracle sur la page Analyseurs, cliquez sur Dupliquer, puis modifiez les valeurs des champs en fonction de vos besoins.
Oracle Logging Analytics fournit de nombreux analyseurs définis par Oracle pour différentes sources de journal telles que les journaux de vidage Java Hotspot, pour différents systèmes tels que Linux, Siebel, PeopleSoft, etc., ainsi que pour différents types d'entité tels qu'Oracle Database, Oracle WebLogic Server et Oracle Enterprise Manager Cloud Control. Vous pouvez accéder à la liste complète des analyseurs et des sources de journal pris en charge à partir de l'interface utilisateur Oracle Logging Analytics.
Pour effectuer d'autres actions sur l'analyseur, sur la page Analyseurs, sélectionnez le type de création de l'analyseur et affinez votre recherche en sélectionnant le type d'analyseur dans la section Filtres. Après avoir identifié l'analyseur, cliquez sur l'icône Actions sur la ligne de l'analyseur :
-
Visualiser les détails : la page de détails de l'analyseur apparaît. Si nécessaire, affichez les détails de l'analyseur et modifiez-les.
-
Modifier : la boîte de dialogue Modifier l'analyseur apparaît. Vous pouvez modifier les propriétés de l'analyseur ici.
-
Dupliquer : cliquez sur cette option si vous voulez créer un doublon de l'analyseur existant, après quoi vous pouvez modifier le doublon pour le personnaliser.
- Définition d'export : si vous utilisez Oracle Logging Analytics dans plusieurs régions, vous pouvez exporter et réimporter le contenu de configuration de l'analyseur. Vous pouvez également l'utiliser si vous voulez stocker une copie de vos définitions en dehors d'Oracle Logging Analytics. Reportez-vous à Import et export du contenu de configuration.
-
Supprimer : vous devrez peut-être supprimer certains de vos analyseurs anciens ou inutilisés. Pour supprimer l'analyseur, confirmez l'opération dans la boîte de dialogue Supprimer une entité. Vous ne pouvez supprimer un analyseur que s'il ne contient aucune source dépendante.
Rubriques :
Conseil d'accessibilité : pour sélectionner le contenu à extraire des journaux à l'aide du clavier, utilisez les touches ALT+arrow.
Création d'un analyseur de type Expression régulière
Par défaut, la page Créer un analyseur s'ouvre en mode Guidé. Poursuivez dans ce mode si vous voulez que Logging Analytics génère l'expression régulière pour analyser les journaux après avoir sélectionné les champs. Pour le mode guidé, reportez-vous à Vidéo : utilisation du générateur d'analyseur RegEx. Si vous souhaitez écrire une expression régulière pour l'analyse, passez en mode Avancé et suivez les étapes suivantes :
-
Dans le champ Nom, entrez le nom de l'analyseur. Par exemple, entrez
Custom Audit Logs
. -
Vous pouvez éventuellement ajouter une description appropriée de l'analyseur pour faciliter l'identification.
-
Dans le champ Exemple de contenu du journal, collez le contenu d'un fichier journal que vous voulez analyser, par exemple :
Jun 20 2020 15:19:29 hostabc rpc.gssd: ERROR: can't open clnt5aa9: No such file or directory Jul 29 2020 11:26:28 hostabc kernel: FS-Cache: Loaded Jul 29 2020 11:26:28 hostxyz kernel: FS-Cache: Netfs 'nfs' registered for caching Aug 8 2020 03:20:01 slc08uvu rsyslogd-2068: could not load module '/lib64/rsyslog/lmnsd_gtls.so', rsyslog error -2078 [try http://www.rsyslog.com/e/2068 ] Aug 8 2020 03:20:36 0064:ff9b:0000:0000:0000:0000:1234:5678 rsyslogd-2066: could not load module '/lib64/rsyslog/lmnsd_gtls.so', dlopen: /lib64/rsyslog/lmnsd_gtls.so: cannot open shared object file: Too many open files [try http://www.rsyslog.com/e/2066 ] Sep 13 2020 03:36:06 hostnam sendmail: uAD3a6o5009542: from=root, size=263, class=0, nrcpts=1, msgid=<201611130336.uAD3a6o5009542@hostname.example.com>, relay=root@localhost Sep 13 2020 03:36:06 hostnam sendmail: uAD3a6o5009542: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30263, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (uAD3a6KW009543 Message accepted for delivery) Sep 20 2020 08:11:03 hostnam sendmail: STARTTLS=client, relay=userv0022.example.com, version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-GCM-SHA384, bits=256/256]]>
Il s'agit d'une entrée de journal multiligne car les entrées 4 et 5 couvrent plusieurs lignes.
-
Dans le champ Expression régulière d'analyse, entrez l'expression régulière permettant d'analyser les champs. Chaque paire de parenthèses indique la clause d'expression régulière à extraire vers un seul champ.
L'expression d'analyse est unique pour chaque type de journal et dépend du format des entrées de journal réelles. Dans cet exemple, entrez ce qui suit :
(\w+)\s+(\d+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+([^\s]+)\s+([^:]+):\s+(.*)
Remarque
-
N'incluez pas d'espace avant ou après le contenu.
-
L'expression régulière doit correspondre au texte complet de l'enregistrement de journal.
-
Si vous incluez des caractères masqués dans votre expression d'analyse, l'interface Créer un analyseur génère un message d'avertissement :
L'expression d'analyseur contient des caractères de contrôle masqués.
Pour désactiver cette réponse par défaut, désélectionnez la case Afficher les caractères de contrôle masqués lorsque le message d'erreur s'affiche.
Pour en savoir plus sur la création d'expressions d'analyse, reportez-vous à Exemples d'expression d'analyse.
-
-
Sélectionnez l'étendue d'enregistrement de journal appropriée.
L'entrée de journal peut figurer sur une seule ligne ou sur plusieurs lignes. Si vous avez choisi une étendue de plusieurs lignes, entrez l'expression de début de l'enregistrement de journal.
Vous devez définir l'expression régulière comme la règle minimale requise pour identifier le début d'une nouvelle entrée de journal. Dans l'exemple, l'expression de début peut être la suivante :(\w+)\s+(\d+)\s+(\d+)\s+
Elle indique qu'une nouvelle entrée de journal débute chaque fois qu'une nouvelle ligne commence par le texte correspondant à cette expression de début d'entrée.
Vous pouvez également fournir l'expression de fin. Utilisez Expression de fin pour indiquer la fin de l'enregistrement de journal. Lorsqu'un enregistrement de journal est écrit dans le fichier sur une longue période et que vous voulez vous assurer que l'intégralité de l'entrée de journal soit collectée, vous devez utiliser l'expression régulière de fin. L'agent attend que le modèle d'expression régulière de fin soit détecté pour collecter l'enregistrement de journal. Les mêmes règles de format s'appliquent à l'expression de fin qu'à l'expression de début d'entrée.
Si nécessaire, cochez la case Gérer l'intégralité du fichier comme une entrée de journal unique. Cette option permet d'analyser et de stocker un fichier journal complet sous la forme d'une entrée de journal unique. Cela est particulièrement utile lors de l'analyse de sources de journal telles que les journaux de vidage Java Hotspot, la liste des RPM des journaux de packages, etc. Si l'entrée de journal contient une grande quantité de texte qui doit pouvoir faire l'objet de recherches, vous pouvez envisager de cocher la case Activer la recherche de texte brut sur ce contenu. Cette option permet d'effectuer des recherches sur les enregistrements de journal avec le champ Texte brut. Lorsque cette option est activée, vous pouvez afficher le contenu de journal d'origine avec le texte brut.
-
Dans l'onglet Champs, sélectionnez le champ approprié pour stocker chaque valeur capturée par l'expression régulière.
Pour créer un champ, cliquez sur l'icône
. La boîte de dialogue Créer un champ défini par l'utilisateur apparaît. Entrez les valeurs Nom, Type de données, Description et cochez la case Champ multivaleur si elle est applicable à vos journaux. Pour plus d'informations sur les valeurs à saisir, reportez-vous à Création d'un champ. Pour enlever le champ sélectionné sur la ligne, cliquez sur l'icône
.
Pour chaque valeur capturée, sélectionnez le champ dans lequel stocker les données. Le premier champ capturé dans l'exemple peut être entré comme suit :
-
Nom de champ : Mois (nom abrégé)
-
Type de données de champ : STRING
-
Description de champ : Composant Mois de l'heure d'entrée de journal sous forme de nom abrégé, par exemple, Jan
-
Expression de champ :
(\w{3})
Dans l'exemple de journal ci-dessus, vous pourriez mettre en correspondance les champs dans l'ordre suivant :
- Mois (nom abrégé)
- Jour
- Année (4 chiffres)
- Nom d'hôte (serveur)
- Service
- Message
-
-
Dans l'onglet Fonctions, cliquez sur Ajouter une fonction pour ajouter éventuellement une fonction afin de prétraiter les entrées de journal. Reportez-vous à Prétraitement des entrées de journal.
-
Cliquez sur l'onglet Test d'analyseur pour voir comment le nouvel analyseur extrait les valeurs du contenu de journal.
Vous pouvez afficher les entrées de journal de l'exemple de contenu que vous avez fourni précédemment. Utilisez cette étape pour déterminer si l'analyseur que vous avez défini fonctionne correctement.
En cas d'échec de l'expression régulière pour une entrée de journal, le statut de correspondance indique la partie de l'expression qui a fonctionné en vert et la partie qui a échoué en rouge. Vous pouvez ainsi identifier la partie de l'expression régulière à corriger.
Vous pouvez afficher la liste des événements ayant échoué au test d'analyseur, ainsi que les détails de l'échec. Vous pouvez également visualiser le nombre d'étapes, ce qui peut vous donner un aperçu de l'impact de l'expression régulière. Idéalement, cette valeur doit être aussi faible que possible. Tout nombre inférieur à 1 000 peut être acceptable, mais une expression régulière plus demandeuse est parfois nécessaire. Si l'expression régulière implique trop d'étapes, elle peut entraîner une utilisation plus importante de l'UC sur l'hôte d'agent et un traitement plus lent des journaux. Cela retarde la disponibilité des entrées de journal dans l'explorateur de journaux. Dans les cas extrêmes où l'expression régulière est trop exigeante, nous ignorons l'analyse de l'entrée de journal et de toutes les autres entrées collectées au cours de la même période.
Cliquez sur Enregistrer pour enregistrer l'analyseur que vous venez de créer.
Pour abandonner la création de l'analyseur, cliquez sur Annuler. Lorsque vous cliquez sur Annuler, vous perdez toutes les opérations de création de l'analyseur de type Expression régulière déjà effectuées.
Analyse de la date et de l'heure à l'aide de la macro TIMEDATE
-
Oracle Logging Analytics permet également d'analyser la date et l'heure disponibles dans les fichiers journaux à l'aide de la macro
TIMEDATE
.Par conséquent, pour les journaux qui utilisent le format d'expression
TIMEDATE
, l'expression d'analyse précédente doit être écrite comme suit :{TIMEDATE}\s+([^\s]+)\s+([^:]+):\s+(.*)
Dans ce cas, l'expression de début d'entrée est
{TIMEDATE}\s+
. -
Si aucune année n'est affectée à certaines entrées dans le journal, Oracle Logging Analytics tente d'identifier l'année en fonction des informations disponibles telles que le fuseau horaire de l'hôte, l'heure de dernière modification du fichier, etc. Le chargement à la demande permet à l'utilisateur de fournir des informations pour résoudre les dates ambiguës. Vous pouvez également utiliser le paramètre de remplacement de fuseau horaire lors de l'inclusion des journaux à l'aide du téléchargement à la demande ou de l'agent de gestion. Reportez-vous à Téléchargement de journaux à la demande et à Configuration de la collecte continue de journaux à partir des hôtes.
-
Si l'heure et la date ne sont pas spécifiées dans l'analyseur pour un fichier journal analysé en tant qu'enregistrement de journal unique, l'heure de dernière modification du fichier journal est prise en compte lors de la collecte des journaux à l'aide de l'agent de gestion. Si, au cours de la collecte, l'heure et la date d'une entrée de journal ne peuvent pas être établies, les entrées de journal sont stockées avec la date et l'heure d'inclusion des journaux dans Oracle Logging Analytics.
Création d'un analyseur de type JSON
Si chacune de vos entrées de journal ne contient pas les données de journal contextuelles/d'en-tête, vous pouvez enrichir les entrées de journal avec les données de journal d'en-tête pertinentes. Vous pouvez prétraiter les entrées de journal et enrichir le contenu avec des informations d'en-tête en indiquant une fonction de détail d'en-tête en procédant comme suit :
-
Créez d'abord un analyseur de contenu d'en-tête en fournissant l'exemple de contenu de journal à l'aide duquel le chemin JSON peut être identifié pour récupérer les informations d'en-tête.
-
Définissez un second analyseur pour analyser le corps restant de l'entrée de journal.
-
Dans l'analyseur de corps, ajoutez une instance de fonction de détails d'en-tête et sélectionnez l'analyseur d'en-tête que vous avez défini à l'étape 1.
-
Ajoutez l'analyseur de corps que vous avez défini à l'étape 2 à une source de journal, puis associez cette source à une entité pour démarrer la collecte de journal.
Voir la rubrique supplémentaire : Gestion de plusieurs formes JSON dans un analyseur JSON unique
Pour créer un analyseur JSON, procédez comme suit :
-
Dans le champ Analyseur, entrez le nom de l'analyseur. Par exemple, entrez
Custom API Log
. -
Sélectionnez le type d'analyseur JSON.
-
Vous pouvez éventuellement ajouter une description appropriée de l'analyseur pour faciliter l'identification.
-
Dans le champ Exemple de contenu du journal, collez le contenu d'un fichier journal que vous voulez analyser, par exemple :
{ "name": "helloapi", "hostname": "banana.local", "pid": 40442, "level": 30, "req": { "method": "GET", "url": "/hello?name=paul", "headers": { "user-agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1/2/3", "host": "0.0.0.0:8080", "accept": "*/*" }, "remoteAddress": "127.0.0.1", "remotePort": 59834 }, "msg": "start", "time": "2012-03-28T17:39:44.880Z", "v": 0 }
Sur la base de l'exemple de contenu de journal, les champs sont identifiés et affichés dans l'onglet Champs, comme dans l'exemple suivant :
- Dans l'onglet Champs, pour le chemin JSON concerné, sélectionnez le nom du champ dans les champs définis disponibles.
Pour créer un champ, cliquez sur l'icône
. La boîte de dialogue Créer un champ défini par l'utilisateur apparaît. Entrez les valeurs Nom, Type de données, Description et cochez la case Champ multivaleur si elle est applicable à vos journaux. Pour plus d'informations sur les valeurs à saisir, reportez-vous à Création d'un champ. Pour enlever le champ sélectionné sur la ligne, cliquez sur l'icône
.
Le chemin racine par défaut sélectionné est
$
. Pour modifier le chemin racine JSON, développez la section Options avancées et sélectionnez Chemin JSON d'entrée de journal. - Dans l'onglet Fonctions, cliquez sur Ajouter une fonction pour ajouter une fonction afin de prétraiter les entrées de journal à l'aide de la fonction d'analyseur d'en-tête. Reportez-vous à Prétraitement des entrées de journal.
- Une fois les champs sélectionnés, accédez à l'onglet Test d'analyseur pour visualiser le statut de correspondance et les champs identifiés dans l'exemple de contenu de journal.
- Cliquez sur Enregistrer pour enregistrer l'analyseur que vous venez de créer.
Pour abandonner la création d'un analyseur de type JSON et passer à la création d'un analyseur de type Expression régulière, sous Type, sélectionnez Expression régulière.
Gestion de plusieurs formes JSON dans un seul analyseur JSON
S'il existe plusieurs entrées de journal JSON avec le noeud racine $
pour la même source, ajoutez tous les journaux JSON échantillon à l'exemple de contenu d'un analyseur et mettez en correspondance l'union des champs contenus dans tous les exemples.
Par exemple, vous pouvez avoir un analyseur JSON et une source utilisant cet analyseur. Notez que ce journal peut avoir deux formes. Placez les deux exemples d'entrées de journal (formes) dans le champ Exemple de contenu comme suit :
{ "key_A":value1, "key_B":value2, "key_C":value3, "key_E":value4, "key_F",value5 } { "key_A":value6, "key_B":value7, "key_D":value8, "key_G":value9, "key_H":value10 }
Ensuite, dans la liste des champs d'analyseur, vous pouvez voir les clés key_A
, key_B
, key_C
, key_D
, key_E
, key_F
, key_G
et key_H
à mettre en correspondance.
Vous pouvez mapper ces clés aux champs comme suit :
Touche | Champ |
---|---|
key_A |
Heure |
key_B |
Adresse IP de l'hôte (client) |
key_C |
Message |
key_D |
Message |
key_E |
Gravité |
key_F |
User Name |
key_G |
Composant |
key_H |
Service |
Dans l'exemple ci-dessus, les clés JSON key_C
et key_D
apparaissent dans des journaux différents. Ils sont considérés comme mutuellement exclusifs. En général, key_C
et key_D
n'apparaissent pas ensemble dans une même forme de journal. Dans ce cas, les deux peuvent être mis en correspondance avec un seul champ Message. Quelle que soit la correspondance de clé, elle est stockée dans le champ Message.
Si key_C
et key_D
ne s'excluent pas mutuellement et que, dans une troisième forme d'entrée de journal, key_C
et key_D
apparaissent ensemble, le premier correspondant est stocké dans le champ Message.
Création d'un analyseur de type XML
-
Dans le champ Analyseur, entrez le nom de l'analyseur. Par exemple, entrez
Custom Database Audit Log
. -
Sélectionnez le type d'analyseur XML.
-
Vous pouvez éventuellement ajouter une description appropriée de l'analyseur pour faciliter l'identification.
-
Dans le champ Exemple de contenu du journal, collez le contenu d'un fichier journal que vous voulez analyser, par exemple : ExampleA :
<AuditRecord><Audit_Type>1</Audit_Type><Session_ld>201073</Session_ld><Statementid>13</Statementid><Entryld>6</Entryld> <Extended_Timestamp>2016-09-09T01:26:07.832814Z</Extended_Timestamp><DB_User>SYSTEM</DB_User><OS_User>UserA</OS_User><Userhost>host1</Userhost> <OS_Process>25839</OS_Process><Terminal>pts/4</Terminal><Instance_Number>0</Instance_Number><Object_Schema>HR</Object_Schema> <Object_Name>EMPLOYEES</Object_Name><Action>17</Action> <Returncode>0</Returncode><Sen>§703187</Sen><AuthPrivileges>--------¥-----</AuthPrivileges> <Grantee>SUMON</Grantee> <Priv_Used>244</Priv_Used><DBID>2791516383</DBID><Sql_Text>GRANT SELECT ON hr.employees TO sumon</Sql_Text></AuditRecord>
Sur la base de l'exemple de contenu de journal, Oracle Logging Analytics identifie automatiquement la liste des éléments XML qui représentent les enregistrements de journal.
-
Si vous le souhaitez, activez la case à cocher Ignorer l'espace de noms pour ignorer l'espace de noms dans le chemin XML.
-
Si vous le souhaitez, activez la case à cocher Activer la connaissance positionnelle pour détecter plusieurs valeurs d'un élément sous un chemin XML, comme dans le cas d'un tableau d'éléments. Par exemple, pour l'exemple de contenu de journal suivant, ExampleB :
<ListOfTrackingFields> <TrackingField> <Name>NameA</Name> </TrackingField> <TrackingField> <Name>NameB</Name> </TrackingField> <TrackingField> <Name>NameC</Name> </TrackingField> <TrackingField> <Name>NameD</Name> </TrackingField> <TrackingField> <Name>NameE</Name> </TrackingField> </ListOfTrackingFields>
Si la connaissance positionnelle n'est pas activée, vous serez limité au chemin XML
/ListOfTrackingFields/TrackingField/Name
, qui détectera uniquement la première valeur deName
. Si vous activez la connaissance de position, les 5 valeurs suivantes deName
sous l'élémentTrackingField
sont détectées :NameA
,NameB
,NameC
,NameD
,NameE
, si tous les chemins XML correspondants sont configurés. -
Dans le menu Chemin XML d'entrée de journal, sélectionnez l'élément XML pertinent pour les enregistrements de journal qui vous intéressent. Pour l'exemple de contenu de journal ExampleA ci-dessus, sélectionnez
/AuditRecord
.Selon le chemin XML sélectionné, les champs sont identifiés et affichés dans l'onglet Champs. Dans l'exemple de contenu de journal ci-dessus, les éléments en gras sont qualifiés en tant que champs. Pour l'exemple de chemin XML
/AuditRecord
, le chemin XML du champ est/AuditRecord/<élément_gras>
, par exemple,/AuditRecord/Audit_Type
. -
Dans l'onglet Champs, pour le chemin XML concerné, sélectionnez le nom du champ dans les champs définis disponibles.
Pour créer un champ, cliquez sur l'icône
. La boîte de dialogue Créer un champ défini par l'utilisateur apparaît. Entrez les valeurs Nom, Type de données, Description et cochez la case Champ multivaleur si elle est applicable à vos journaux. Pour plus d'informations sur les valeurs à saisir, reportez-vous à Création d'un champ. Pour enlever le champ sélectionné sur la ligne, cliquez sur l'icône
.
-
Une fois les champs sélectionnés, accédez à l'onglet Test d'analyseur pour visualiser le statut de correspondance.
-
Cliquez sur Enregistrer pour enregistrer l'analyseur que vous venez de créer.
Pour abandonner la création d'un analyseur de type XML et passer à la création d'un analyseur de type Expression régulière, sous Type, sélectionnez Expression régulière.
Créer un analyseur de type délimité
-
Entrez le nom de l'analyseur. Par exemple, entrez
Comma Separated Custom App Log
. -
Vous pouvez éventuellement ajouter une description appropriée de l'analyseur pour faciliter l'identification.
-
Sélectionnez le type d'analyseur Délimité.
-
Sous Délimiteur, sélectionnez le type de délimiteur utilisé dans les journaux pour séparer les champs, par exemple, virgule, point-virgule, espace ou onglet. Si elle est différente des options répertoriées, sélectionnez Autre et indiquez votre caractère de délimitation dans l'espace fourni.
Exemple de contenu de journal :
helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880Z
Dans l'exemple ci-dessus, la virgule (
,
) est le délimiteur.Assurez-vous que le caractère de délimiteur que vous indiquez est différent du qualificatif que vous sélectionnez ensuite.
-
Vous pouvez éventuellement sélectionner le qualificateur utilisé pour encapsuler le texte d'un champ dans vos journaux. Sélectionnez Devis double ou Devis unique.
Le qualificatif de texte est utilisé lorsque les délimiteurs sont contenus dans les données de champ. Prenons un scénario dans lequel field1 a la valeur
host,local
qui contient un délimiteur (,) et aucun qualificatif de texte n'est utilisé. Ensuite, les données qui se produisent après le délimiteur (local
) seront considérées comme la valeur du champ suivant.Dans l'exemple de contenu de journal de l'étape précédente, les guillemets doubles (
"
) sont le qualificatif.Remarque
Pour les valeurs des champs de la chaîne de type de données, le caractère espace avant et après le qualificatif est également considéré comme faisant partie de la chaîne. Assurez-vous que le qualificatif est placé juste en regard du délimiteur afin que la valeur de chaîne corresponde. Par exemple, dans,"host,local",
, l'espace après le premier délimiteur est supprimé. En outre, le caractère espace précédant le dernier séparateur est supprimé. Par conséquent, la valeur effective du champ de chaîne correspondant esthost,local
, comme le montre le résultat du test d'analyseur ultérieurement. -
Si vous le souhaitez, sous En-tête, collez la ligne d'en-tête de votre journal qui peut ensuite être mise en correspondance avec la colonne d'en-tête dans l'onglet Champs. Exemple :
name, hostname, pid, level, msg, time
Lorsque vous spécifiez un en-tête, toutes les lignes de journal des journaux réels qui correspondent exactement à l'en-tête sont filtrées.
-
Dans le champ Exemple de contenu du journal, collez le contenu d'un fichier journal que vous voulez analyser, par exemple :
helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880Z
Sur la base de l'exemple de contenu de journal, les champs sont identifiés et affichés dans l'onglet Champs, comme dans l'exemple suivant :
- Dans l'onglet Champs, pour la colonne d'en-tête, sélectionnez le nom du champ dans les champs définis disponibles. Toutefois, vous ne pouvez mapper que vos colonnes d'en-tête préférées de manière sélective, et il n'est pas nécessaire de mapper un champ pour chaque colonne d'en-tête.
Pour créer un champ, cliquez sur l'icône
. La boîte de dialogue Créer un champ défini par l'utilisateur apparaît. Entrez les valeurs Nom, Type de données, Description et cochez la case Champ multivaleur si elle est applicable à vos journaux. Pour plus d'informations sur les valeurs à saisir, reportez-vous à Création d'un champ. Pour enlever le champ sélectionné sur la ligne, cliquez sur l'icône
.
- Une fois les champs sélectionnés, accédez à l'onglet Test d'analyseur pour visualiser le statut de correspondance et les champs identifiés dans l'exemple de contenu de journal.
- Cliquez sur Créer un analyseur pour enregistrer l'analyseur que vous venez de créer.
Pour abandonner la création d'un analyseur de type Délimité et passer à la création d'un autre type d'analyseur, sélectionnez-le sous Type.
Mettre en correspondance le champ de base avec un analyseur
Si votre contenu de journal d'origine est encapsulé avec des informations supplémentaires, vous pouvez mettre en correspondance le champ de base contenant le contenu de journal d'origine avec un analyseur et extraire les champs de cet enregistrement de journal d'origine.
Considérons que votre contenu de journal d'origine est comme indiqué ci-dessous :
####<Feb 01, 2021 10:28:27 AM PST> <Info> <Diagnostics> <soaapps.example.com> <excstg_soa> <[ACTIVE] ExecuteThread: '34' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <kernel_version> <123456> <[severity-value:64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-320145> <Size based data retirement operation completed on archive HarvestedDataArchive. Retired 9,720 records in 11,242 ms.>
Lorsque le même contenu de journal est d'abord envoyé à OCI Logging, puis via Connector Hub envoyé à Oracle Logging Analytics, un wrapper JSON est ajouté au contenu de journal d'origine. Par exemple,
{
"data": {
"Labels": "LogPath:/u01/APPLTOP/instance/wlslogs/FADomain/servers/ServiceServer_1/logs/ServiceServer_1.log;ServiceName:Host;ServiceType:Oracle_Host;LogSet:TEST_POD;HostName:examplehost.oraclecloud.com;IP:192.0.2.1;WLS:NA;Domain:NA;AppName:myApp;Customer:CompanyA, (U.S.) Corp;CustomerType:NonHypercare;PODType:TEST;PODSize:S0;DC:CDC;Version:11.13.20.10.0;",
"action": "ACTION",
"msg": "####<Feb 01, 2021 10:28:27 AM PST> <Info> <Diagnostics> <soaapps.example.com> <excstg_soa> <[ACTIVE] ExecuteThread: '34' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <kernel_version> <123456> <[severity-value:64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-320145> <Size based data retirement operation completed on archive HarvestedDataArchive. Retired 9,720 records in 11,242 ms.>"
},
"id": "123123123",
"oracle": {
"compartmentid": "ocid1.compartment.oc1..aaaaaaaauniqueID",
"ingestedtime": "2021-02-01T18:32:49.204Z",
"loggroupid": "ocid1.loggroup.oc1.iad.amaaaaaauniqueID",
"logid": "ocid1.log.oc1.iad.amaaaaaayuniqueID",
"tenantid": "ocid1.tenancy.oc1..aaaaaaaaetuniqueID"
},
"source": "FA-APPS",
"specversion": "1.0",
"time": "2021-02-01T11:48:43.091Z",
"type": "FA Unified Apps Logs"
}
Dans l'exemple ci-dessus, le contenu du journal d'origine est présent dans le champ de base $.data.msg
.
Notez que dans l'exemple présenté, le contenu du journal comporte un wrapper JSON. Toutefois, vous pouvez suivre ces étapes même si le contenu et les wrappers de votre journal d'origine sont dans n'importe quel format d'analyseur pris en charge et que les journaux sont ingérés dans n'importe quelle méthode prise en charge.
Pour extraire les champs du contenu du journal d'origine, procédez comme suit :
-
En fonction du type de contenu de journal d'origine, identifiez ou créez un analyseur pour extraire les champs pertinents du contenu de journal d'origine. Reportez-vous à Création d'un analyseur.
Cet analyseur sera utilisé en tant qu'analyseur mis en correspondance dans l'analyseur de wrapper que vous allez créer ensuite.
-
En fonction du type de contenu de wrapper, créez l'analyseur correspondant en suivant les étapes décrites dans Création d'un analyseur.
Cet analyseur sera appelé analyseur de wrapper dans les étapes suivantes.
-
Pour l'analyseur de wrapper, indiquez un exemple de contenu de journal contenant un wrapper sur le contenu de journal d'origine.
En cas d'analyseur JSON, le chemin racine par défaut sélectionné est
$
. Pour modifier le chemin racine JSON, développez la section Options avancées et sélectionnez Chemin JSON d'entrée de journal. -
Dans l'onglet Champs, correspondant au champ de base contenant votre contenu de journal d'origine, cliquez sur le menu Actions
et sélectionnez Mettre en correspondance des champs via un analyseur. La boîte de dialogue dans laquelle vous pouvez sélectionner l'analyseur s'ouvre.
Dans l'exemple ci-dessus, la ligne pour laquelle un analyseur mis en correspondance doit être ajouté est
$.data.msg
.Dans un analyseur de wrapper, vous ne pouvez mettre en correspondance qu'un seul champ de base avec un analyseur mis en correspondance.
-
Dans la boîte de dialogue Mettre en correspondance les champs via un analyseur, sélectionnez l'analyseur à l'aide duquel les champs du champ de base doivent être extraits.
Vous pouvez éventuellement sélectionner l'une des actions
Base64 decode and unzip
ouBase64 decode
à effectuer sur le champ :- Base64 décoder et décompresser : sélectionnez cette option si le champ de base est un fichier ZIP encodé en Base64. Le champ de base est ensuite décodé et décompressé avant que l'analyseur mappé ne soit appliqué. Le champ de base étant un fichier ZIP encodé, l'application de l'analyseur mappé permet d'identifier un ou plusieurs enregistrements de journal. Ces enregistrements de journal sont affichés en tant que contenu du journal d'origine dans l'explorateur de journaux. Toutefois, le contenu du journal du wrapper n'est pas affiché. Si l'analyseur de wrapper contient des mappages de champs, ces champs sont également affichés.
Cette action ne peut être effectuée que sur les journaux collectés à l'aide de l'agent OMA.
- Base64 décoder : sélectionnez cette option si le champ de base est encodé en Base64 dans le contenu du journal d'origine. Le champ de base est décodé avant l'application de l'analyseur mappé. En outre,
- Utilisez l'option Enregistrer dans un champ pour enregistrer la chaîne décodée dans un champ.
- Si vous souhaitez enregistrer la valeur de champ de base décodée en tant que Contenu du journal d'origine afin qu'elle soit affichée en tant qu'enregistrement de journal dans l'explorateur de journaux, sélectionnez l'option Remplacer le contenu du journal d'origine. Si cette option est sélectionnée, la valeur du champ de base décodée est enregistrée dans le champ Contenu du journal d'origine et le contenu du journal wrapper est enregistré dans le champ Texte brut.
Cliquez sur Mettre en correspondance les champs. L'onglet Champs indique désormais que le champ de base est mis en correspondance avec l'analyseur mis en correspondance sélectionné et que la liste des champs est extraite.
Il est possible qu'un analyseur mis en correspondance soit également inclus dans l'analyseur mis en correspondance sélectionné. Oracle Logging Analytics prend en charge deux niveaux d'analyseurs mis en correspondance imbriqués. Par exemple, Wrapper-parser contient mapped-parser-1 contient mapped-parser-2.
- Base64 décoder et décompresser : sélectionnez cette option si le champ de base est un fichier ZIP encodé en Base64. Le champ de base est ensuite décodé et décompressé avant que l'analyseur mappé ne soit appliqué. Le champ de base étant un fichier ZIP encodé, l'application de l'analyseur mappé permet d'identifier un ou plusieurs enregistrements de journal. Ces enregistrements de journal sont affichés en tant que contenu du journal d'origine dans l'explorateur de journaux. Toutefois, le contenu du journal du wrapper n'est pas affiché. Si l'analyseur de wrapper contient des mappages de champs, ces champs sont également affichés.
-
Une fois les champs restants sélectionnés, dans l'onglet Test d'analyseur, exécutez le test d'analyseur pour vérifier le statut de correspondance et les champs sélectionnés dans l'exemple de contenu de journal.
Prétraitement des entrées de journal
Oracle Logging Analytics fournit les fonctions suivantes, permettant de prétraiter les entrées de journal et d'enrichir les entrées de journal obtenues :
Pour prétraiter les entrées de journal lors de la création d'un analyseur, cliquez sur l'onglet Fonctions, puis sur le bouton Ajouter une fonction.
Dans la boîte de dialogue Ajouter une fonction qui apparaît, entrez le nom de la fonction, sélectionnez la fonction requise et indiquez les valeurs de champ appropriées.
Pour tester le résultat de l'application de la fonction sur l'exemple de contenu de journal, cliquez sur Tester. Un résultat comparatif apparaît pour vous aider à déterminer si les valeurs de champ sont correctes.
Fonction de détails d'en-tête
Cette fonction permet d'enrichir les entrées de journal avec les champs de l'en-tête des fichiers journaux. Cette fonction est particulièrement utile pour les journaux contenant un bloc de corps en tant qu'en-tête, puis des entrées dans le corps.
Cette fonction enrichit chaque entrée de corps de journal avec les champs de l'entrée de journal d'en-tête. Les fichiers trace de base de données sont des exemples de journaux de ce type.
Pour capturer l'en-tête et ses champs correspondants afin d'enrichir les entrées de journal de corps basées sur l'heure, lors de la création de l'analyseur, sélectionnez l'analyseur de contenu d'en-tête correspondant dans la boîte de dialogue Ajouter une fonction.
Exemples d'analyseur de contenu d'en-tête d'expression régulière :
-
Dans ces types de journal, l'en-tête apparaît généralement au début du fichier journal, suivi d'autres entrées. Par exemple :
Trace file /scratch/emga/DB1212/diag/rdbms/lxr1212/lxr1212_1/trace/lxr1212_1_ora_5071.trc Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options ORACLE_HOME = /scratch/emga/DB1212/dbh System name: Linux Node name: slc00drj Release: 2.6.18-308.4.1.0.1.el5xen Version: #1 SMP Tue Apr 17 16:41:30 EDT 2012 Machine: x86_64 VM name: Xen Version: 3.4 (PVM) Instance name: lxr1212_1 Redo thread mounted by this instance: 1 Oracle process number: 35 Unix process pid: 5071, image: oracle@slc00drj (TNS V1-V3) *** 2020-10-12 21:12:06.169 *** SESSION ID:(355.19953) 2020-10-12 21:12:06.169 *** CLIENT ID:() 2020-10-12 21:12:06.169 *** SERVICE NAME:(SYS$USERS) 2020-10-12 21:12:06.169 *** MODULE NAME:(sqlplus@slc00drj (TNS V1-V3)) 2020-10-12 21:12:06.169 *** CLIENT DRIVER:() 2020-10-12 21:12:06.169 *** ACTION NAME:() 2020-10-12 21:12:06.169 2020-10-12 21:12:06.169: [ GPNP]clsgpnp_dbmsGetItem_profile: [at clsgpnp_dbms.c:345] Result: (0) CLSGPNP_OK. (:GPNP00401:)got ASM-Profile.Mode='legacy' *** CLIENT DRIVER:(SQL*PLUS) 2020-10-12 21:12:06.290 SERVER COMPONENT id=UTLRP_BGN: timestamp=2020-10-12 21:12:06 *** 2020-10-12 21:12:10.078 SERVER COMPONENT id=UTLRP_END: timestamp=2020-10-12 21:12:10 *** 2020-10-12 21:12:39.209 KJHA:2phase clscrs_flag:840 instSid: KJHA:2phase ctx 2 clscrs_flag:840 instSid:lxr1212_1 KJHA:2phase clscrs_flag:840 dbname: KJHA:2phase ctx 2 clscrs_flag:840 dbname:lxr1212 KJHA:2phase WARNING!!! Instance:lxr1212_1 of kspins type:1 does not support 2 phase CRS *** 2020-10-12 21:12:39.222 Stopping background process SMCO *** 2020-10-12 21:12:40.220 ksimdel: READY status 5 *** 2020-10-12 21:12:47.628 ... KJHA:2phase WARNING!!! Instance:lxr1212_1 of kspins type:1 does not support 2 phase CRS
Pour l'exemple précédent, à l'aide de la fonction de détails d'en-tête, Oracle Logging Analytics enrichit les entrées de journal de corps basées sur l'heure avec les champs du contenu d'en-tête.
-
Observez l'exemple de journal suivant :
Server: prodsrv123 Application: OrderAppA 2020-08-01 23:02:43 INFO DataLifecycle Starting backup process 2020-08-01 23:02:43 ERROR OrderModule Order failed due to transaction timeout 2020-08-01 23:02:43 INFO DataLifecycle Backup process completed. Status=success 2020-08-01 23:02:43 WARN OrderModule Order completed with warnings: inventory on backorder
Dans l'exemple précédent, quatre entrées de journal à capturer dans Oracle Logging Analytics. Le nom du serveur et le nom de l'application apparaissent uniquement au début du fichier journal. Pour inclure le nom du serveur et le nom de l'application dans chaque entrée de journal, procédez comme suit :
-
Définissez un analyseur pour l'en-tête, qui va analyser les champs de serveur et d'application :
Server:\s*(\S+).*?Application:\s*(\S+)
-
Définissez un second analyseur pour analyser le corps restant du journal :
{TIMEDATE}\s(\S+)\s(\S+)\s(.*)
-
Dans l'analyseur de corps, ajoutez une instance de fonction de détails d'en-tête et sélectionnez l'analyseur d'en-tête que vous avez défini à l'étape 1.
-
Ajoutez l'analyseur de corps que vous avez défini à l'étape 2 à une source de journal, puis associez cette source à une entité pour démarrer la collecte de journal.
Vous obtenez quatre entrées de journal avec le nom du serveur et le nom de l'application ajoutés à chaque entrée.
-
Exemples d'analyseur de contenu d'en-tête JSON :
Vous trouverez ci-dessous des exemples de cas pour Header-Detail. Les entrées de journal de détail sont enrichies avec les champs des entrées de journal d'en-tête. Les champs mis en évidence dans l'entrée de journal de détail enrichie sont les champs copiés à partir de l'entrée de journal d'en-tête.
-
PATH JSON : en-tête =
$
, détails =$.data
{ "id" : "id_ERROR1", "data": { "id" : "id_data_ERROR1", "childblock0": { "src": "127.0.0.1" }, "childblocks": [ { "childblock": { "srchost1": "host1_ERROR1" } }, { "childblock": { "srchost2": "host2_ERROR1" } } ], "hdr": { "time_ms": "2021-05-21T04:27:18.89714589Z", "error": "hdr_ERROR1" } }, "compartmentName": "comp_name_ERROR1", "eventName": "GetBucket_ERROR1" }
Entrées de journal extraites et enrichies :
Entrée de journal d'en-tête :
{"id":"id_ERROR1","compartmentName":"comp_name_ERROR1","eventName":"GetBucket_ERROR1"}
Entrée de journal de détails :
{"compartmentName":"comp_name_ERROR1","eventName":"GetBucket_ERROR1", "id": "id_data_ERROR1", "childblock0":{"src":"127.0.0.1"},"childblocks":[{"childblock":{"srchost1":"host1_ERROR1"}},{"childblock":{"srchost2":"host2_ERROR1"}}],"hdr":{"time_ms":"2021-05-21T04:27:18.89714589Z","error":"hdr_ERROR1"}}
Le champ
id
est disponible dans l'en-tête et les détails. Le champ des détails est sélectionné dans ce cas. -
PATH JSON : en-tête =
$.metadata
, détails =$.datapoints[*]
Dans cet exemple, le premier bloc comporte à la fois un en-tête et des détails, mais le second bloc ne comporte qu'une entrée de journal de détails.
{ "namespace":"oci_streaming", "resourceGroup":null, "name":"GetMessagesThroughput.Count1", "dimensions":{ "region":"phx1", "resourceId":"ocid1.stream.oc1.phx.1" }, "datapoints":[ { "timestamp":1652942170000, "value":1.1, "count":11 }, { "timestamp":1652942171001, "value":1.2, "count":12 } ], "metadata":{ "displayName":"Get Messages 1", "unit":"count1" } } { "namespace":"oci_streaming", "resourceGroup":null, "name":"GetMessagesThroughput.Count1", "dimensions":{ "region":"phx1", "resourceId":"ocid1.stream.oc1.phx.1" }, "datapoints":[ { "timestamp":1652942170002, "value":2.1, "count":21 }, { "timestamp":1652942171003, "value":3.2, "count":32 } ] }
Entrées de journal extraites et enrichies :
Entrée de journal d'en-tête :
{"displayName":"Get Messages 1","unit":"count1"}
Entrée de journal de détails :
{"displayName":"Get Messages 1","unit":"count1", "timestamp":1652942170000,"value":1.1,"count":11}
Entrée de journal de détails :
{"displayName":"Get Messages 1","unit":"count1", "timestamp":1652942171001,"value":1.2,"count":12}
Entrée de journal de détails :
{"timestamp":1652942170002,"value":2.1,"count":21}
Entrée de journal de détails :
{"timestamp":1652942171003,"value":3.2,"count":32}
-
PATH JSON : en-tête =
$.instanceHealths:[*]
, détails =$.instanceHealths[*].instanceHealthChecks[*]
{ "reportType": "Health Status Report 1", "instanceHealths": [ { "instanceHealthChecks": [ { "HealthCheckName": "Check-A1", "Result": "Passed", "time": "2022-11-17T06:05:01Z" }, { "HealthCheckName": "Check-A2", "Result": "Passed", "time": "2022-11-17T06:05:01Z" } ], "Datacenter-A" : "Remote A" } ] }
Entrées de journal extraites et enrichies :
Entrée de journal d'en-tête :
{"Datacenter-A":"Remote A"}
Entrée de journal de détails :
{"Datacenter-A":"Remote A", "HealthCheckName":"Check-A1","Result":"Passed","time":"2022-11-17T06:05:01Z"}
Entrée de journal de détails :
{"Datacenter-A":"Remote A", "HealthCheckName":"Check-A2","Result":"Passed","time":"2022-11-17T06:05:01Z"}
-
PATH JSON : Header1 =
$.dimensions
, Header2 =$.metadata
, Détails =$.datapoints[*]
Dans cet exemple, deux en-têtes différents sont appliqués.
{ "namespace":"oci_streaming", "resourceGroup":null, "name":"GetMessagesThroughput.Count1", "dimensions":{ "region":"phx1", "resourceId":"ocid1.stream.oc1.phx.1" }, "datapoints":[ { "timestamp":1652942170000, "value":1.1, "count":11 }, { "timestamp":1652942171001, "value":1.2, "count":12 } ], "metadata":{ "displayName":"Get Messages 1", "unit":"count1" } }
Entrées de journal extraites et enrichies :
Entrée de journal Header1 :
{"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1"}
Entrée de journal Header2 :
{"displayName":"Get Messages 1","unit":"count1"}
Entrée de journal de détails :
{"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1", displayName":"Get Messages 1","unit":"count1", "timestamp":1652942170000,"value":1.1,"count":11}
Entrée de journal de détails :
{"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1", displayName":"Get Messages 1","unit":"count1", "timestamp":1652942171001,"value":1.2,"count":12}
-
PATH JSON : Header1 =
$.hdr1
, Header2 =$.hdr2
, Détails =$.body
Dans ce cas, l'entrée de journal d'en-tête est associée à l'entrée de journal de détails si les deux se trouvent dans le même bloc.
{ "hdr1": { "module": "mod1", "error": "hdr1_error1" } } { "body": { "id": "data_id_ERROR2", "error": "body_ERROR2" } } { "hdr2": { "module": "mod3", "error": "hdr2_error3" } "body": { "id": "data_id_ERROR4", "error": "body_ERROR4" } }
Entrées de journal extraites et enrichies :
Entrée de journal d'en-tête :
{"id":"data_id_ERROR1","error":"hdr1_error1"}
Entrée de journal de détails :
{"id":"data_id_ERROR2","error":"body_ERROR2"}
Entrée de journal d'en-tête :
{"module":"mod3","error":"hdr2_error3"}
Entrée de journal de détails :
{"module":"mod3", "id":"data_id_ERROR4","error":"body_ERROR4"}
Notez que dans la deuxième entrée de journal Détails, la valeur de
error
est sélectionnée dans les détails lorsque le même élément est disponible dans l'en-tête ainsi que dans les détails. -
PATH JSON : en-tête =
$
, Details1 =$.JDBC
, Details2 =$.THREADS
Dans ce cas, une entrée de journal d'en-tête unique est associée à plusieurs entrées de journal de détail :
{ "time": "2024-09-10T00:20:00", "instance": "GBOSBMXR1PR", "name": "gbosbmxr1pr_server_2", "JDBC": [ { "name":"XXAlsGoldXADS", "Status": "Running", "Url": "jdbc:oracle:thin:@PSOAPR1" } ], "THREADS": [ { "name": "[HOGGING][ACTIVE] ExecuteThread 56 ", "WORKMGR": "OneWayJTACoordinatorWM", "CATEGORY": "Internal", "APPNAME": "None" } ] }
Entrées de journal extraites et enrichies :
Entrée de journal d'en-tête (appliquée aux entrées de journal de détails ci-dessous) :
{ "time": "2024-09-10T00:20:00", "instance": "GBOSBMXR1PR", "name": "gbosbmxr1pr_server_2" }
Entrée de journal de détails :
{ "name":"XXAlsGoldXADS", "Status": "Running", "Url": "jdbc:oracle:thin:@PSOAPR1" }
Entrée de journal de détails :
{ "name": "[HOGGING][ACTIVE] ExecuteThread 56 ", "WORKMGR": "OneWayJTACoordinatorWM", "CATEGORY": "Internal", "APPNAME": "None" }
Fonction de recherche et remplacement
Cette fonction permet d'extraire du texte d'une ligne de journal et de l'ajouter à d'autres lignes de journal sous condition, selon des modèles donnés. Par exemple, vous pouvez utiliser cette fonctionnalité pour ajouter les horodatages manquants aux journaux de requêtes lentes et généraux MySQL.
La fonction de recherche et remplacement possède les attributs suivants :
-
Expression régulière de détection : l'expression régulière mise en correspondance avec chaque ligne de journal et avec le texte du groupe nommé d'expressions régulières mis en correspondance est enregistrée en mémoire pour être utilisée dans l'expression de remplacement.
-
Si l'expression de détection correspond à une ligne complète, l'expression de remplacement n'est pas appliquée à la ligne de journal suivante. Cela permet d'éviter que la même ligne apparaisse deux fois lorsque vous voulez ajouter une ligne manquante au début.
-
Les lignes correspondant à l'expression de détection ne sont pas traitées pour l'expression de recherche. Une opération de recherche et de remplacement ne peut donc pas être effectuée sur la même ligne de journal.
-
Vous pouvez indiquer plusieurs groupes portant des noms différents.
-
-
Expression régulière de recherche : cette expression régulière spécifie le texte à remplacer par le texte mis en correspondance par les groupes nommés dans l'expression de détection sur les lignes de journal.
-
Le modèle à mettre en correspondance doit être groupé.
-
L'expression de recherche n'est pas exécutée sur les lignes correspondant à l'expression de détection. Une opération de recherche et de remplacement ne peut donc pas être effectuée sur la même ligne de journal.
-
L'expression de recherche peut comprendre plusieurs groupes. Le texte correspondant dans chaque groupe est remplacé par le texte créé par l'expression de remplacement.
-
-
Expression régulière de remplacement : cette notation personnalisée indique le texte à utiliser pour remplacer les groupes trouvés dans l'expression de recherche. Les noms de groupe doivent être placés entre parenthèses.
-
Le nom du groupe doit être placé entre crochets.
-
Vous pouvez inclure le texte statique.
-
Le texte créé par l'expression de remplacement remplace le texte correspondant dans tous les groupes de l'expression de recherche.
-
Cliquez sur l'icône Aide en regard des champs Expression régulière de détection, Expression régulière de recherche et Expression régulière de remplacement pour afficher la description du champ, un exemple d'expression, un exemple de contenu et l'action effectuée. Pour ajouter d'autres expressions de détection, cliquez sur Ajouter une expression sous Expression régulière de détection.
Exemples :
- L'objectif de cet exemple est d'obtenir l'horodatage de la ligne de journal contenant le texte
# Time:
et de l'ajouter aux lignes de journal commençant par# User@Host
sans horodatage.Examinez les données de journal suivantes :
# Time: 160201 1:55:58 # User@Host: root[root] @ localhost [] Id: 1 # Query_time: 0.001320 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1 select @@version_comment limit 1; # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000138 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 2 SET timestamp=1454579783; SELECT DATABASE();
Les valeurs des attributs Expression régulière de détection, Expression régulière de recherche et Expression régulière de remplacement peuvent être les suivantes :
-
La valeur Expression régulière de détection pour identifier la ligne de journal d'horodatage et l'enregistrer en mémoire sous le nom timestr est
^(?<timestr>^# Time:.*)
. -
La valeur Expression régulière de recherche pour rechercher les lignes au début desquelles la ligne de journal d'horodatage doit être ajoutée est
(^)# User@Host:.*
. -
La valeur Expression régulière de remplacement pour remplacer le début des lignes de journal dont l'horodatage est manquant est
(timestr)
.
Après l'ajout de la fonction de recherche et remplacement, vous pouvez observer la modification suivante dans les lignes de journal :
# Time: 160201 1:55:58 # User@Host: root[root] @ localhost [] Id: 1 # Query_time: 0.001320 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1 select @@version_comment limit 1; # Time: 160201 1:55:58 # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000138 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 2 SET timestamp=1454579783; SELECT DATABASE();
Dans le résultat précédent de l'exemple, vous pouvez remarquer que la fonction de recherche et remplacement a inséré l'horodatage avant l'entrée
User@host
sur chaque ligne de journal rencontrée lors du prétraitement du journal. -
-
L'objectif de cet exemple est de détecter plusieurs paramètres et de les remplacer à plusieurs emplacements dans les données de journal.
Examinez les données de journal suivantes :
160203 21:23:54 Child process "proc1", owner foo, SUCCESS, parent init 160203 21:23:54 Child process "proc2" - 160203 21:23:54 Child process "proc3" -
Sur les lignes de journal précédentes, les deuxième et troisième lignes ne contiennent pas les données utilisateur. La fonction de recherche et remplacement doit donc identifier les valeurs de la première ligne du journal, et remplacer les valeurs des deuxième et troisième lignes.
Les valeurs des attributs Expression régulière de détection, Expression régulière de recherche et Expression régulière de remplacement peuvent être les suivantes :
-
La valeur Expression régulière de détection pour obtenir les informations des utilisateurs
foo
etinit
sur la première ligne de journal et les enregistrer en mémoire avec les paramètres user1 et user2 est^.*?owner\s+(?<user1>\w+)\s*,\s*.*?parent\s+(?<user2>\w+).*
. -
La valeur Expression régulière de recherche pour rechercher les lignes comportant un trait d'union (
-
) est.*?(-).*
. -
La valeur Expression régulière de remplacement est
, owner (user1), UNKNOWN, parent (user2)
.
Après l'ajout de la fonction de recherche et remplacement, vous pouvez observer la modification suivante dans les lignes de journal :
160203 21:23:54 Child process "proc1", owner foo, SUCCESS, parent init 160203 21:23:54 Child process "proc2", owner foo, UNKNOWN, parent init 160203 21:23:54 Child process "proc3", owner foo, UNKNOWN, parent init
Dans le résultat précédent de l'exemple, vous pouvez remarquer que la fonction de recherche et remplacement a inséré les informations user1 et user2 à la place de l'entrée de trait d'union (
-
) sur chaque ligne de journal rencontrée lors du prétraitement du journal. -
Fonction de décalage horaire
Certains enregistrements de journal ne présentent aucun horodatage, certains présentent uniquement le décalage horaire, et certains ne présentent ni horodatage ni décalage horaire. Oracle Logging Analytics extrait les informations requises et affecte un horodatage à chaque enregistrement de journal.
Voici quelques scénarios et les solutions correspondantes pour affecter l'horodatage à l'aide de la fonction de décalage horaire :
Exemple de contenu de journal | Scénario | Solution |
---|---|---|
|
Le fichier journal comprend un horodatage dans les journaux initiaux et des décalages par la suite. |
Récupérez l'horodatage dans les enregistrements de journal initiaux et affectez-le aux enregistrements de journal ultérieurs, ajustés avec des décalages horaires. |
|
Le fichier journal contient des journaux initiaux avec des décalages horaires sans aucun journal avec horodatage précédent. |
Récupérez l'horodatage dans les enregistrements de journal ultérieurs et affectez-le aux enregistrements de journal précédents, ajustés avec des décalages horaires. Lorsque le décalage horaire est réinitialisé entretemps, c'est-à-dire qu'un décalage horaire plus faible s'applique dans un enregistrement de journal, il est corrigé en prenant l'horodatage de l'enregistrement de journal précédent comme référence. |
|
Le fichier journal contient des enregistrements de journal avec des décalages horaires uniquement, sans horodatage. |
horodatage de l'heure de dernière modification du fichier : une fois tous les enregistrements de journal parcourus, l'horodatage est calculé en soustrayant le décalage horaire calculé de l'heure de dernière modification du fichier. horodatage du nom de fichier : lorsque cette option est sélectionnée dans l'interface utilisateur, l'horodatage est récupéré dans le nom de fichier au format spécifié par l'expression d'horodatage. |
Les décalages horaires des entrées de journal sont relatifs à l'horodatage précédemment mis en correspondance. Nous appelons cet horodatage l'horodatage de base dans ce document.
Utilisez la fonction de décalage horaire de l'analyseur pour extraire l'horodatage et le décalage d'horodatage des enregistrements de journal. Dans la boîte de dialogue Ajouter une fonction, effectuez les opérations suivantes :
-
Où trouver l'horodatage : pour spécifier l'emplacement de récupération de l'horodatage, sélectionnez Nom de fichier, Heure de dernière modification du fichier ou Entrée de journal. Par défaut, l'option Nom de fichier est sélectionnée.
Si aucune option n'est choisie, la recherche de l'horodatage est effectuée dans l'ordre suivant :
- Parcourir les enregistrements de journal et rechercher une correspondance avec l'analyseur d'horodatage, que vous allez définir à l'étape suivante
- Sélectionner l'heure de dernière modification du fichier en tant qu'horodatage
- Si l'heure de dernière modification n'est pas disponible pour le fichier, sélectionner l'heure système en tant qu'horodatage
- Rechercher une correspondance avec l'expression d'horodatage dans le nom de fichier, que vous allez indiquer à l'étape suivante
-
En fonction de la source d'horodatage sélectionnée, fournissez les valeurs suivantes :
- Si vous avez sélectionné Nom de fichier à l'étape 1 :
Expression d'horodatage : indiquez l'expression régulière permettant de rechercher l'horodatage dans le nom de fichier. Par défaut, la directive
{TIMEDATE}
est utilisée.Exemple de nom de fichier : indiquez le nom de fichier d'un exemple de journal pouvant être utilisé pour tester les paramètres ci-dessus.
-
Si vous avez sélectionné Heure de dernière modification du fichier à l'étape 1, sélectionnez l'Heure de dernière modification du fichier d'exemple.
-
Si vous avez sélectionné Entrée de journal à l'étape 1, sélectionnez l'analyseur dans le menu Analyseur d'horodatage pour indiquer le format d'horodatage.
- Si vous avez sélectionné Nom de fichier à l'étape 1 :
-
Expression de décalage de l'horodatage : indiquez l'expression régulière permettant d'extraire le décalage en secondes et en millisecondes à appliquer pour affecter l'horodatage à un enregistrement de journal. Seuls les groupes
sec
etmsec
sont pris en charge. Par exemple,(?<sec>\d+)\.(?<msec>\d+)
.Prenons l'exemple d'enregistrement de journal suivant :
15.225 hostA debug services started
L'exemple d'expression de décalage identifie un décalage horaire de
15
secondes et225
millisecondes dans l'enregistrement de journal. -
Une fois les sélections effectuées aux étapes précédentes, le contenu de journal est affiché dans le champ Exemple de journal.
Cliquez sur Tester pour tester les paramètres.
Vous pouvez visualiser la comparaison entre le contenu de journal d'origine et l'heure calculée en fonction de vos spécifications.
-
Pour enregistrer la fonction de décalage horaire ci-dessus, cliquez sur Ajouter.