M-Detect

Analyseur de log pour IBMI

De MappingDoc
Révision datée du 19 mars 2021 à 14:19 par Jdieu (discussion | contributions) (Fichier de paramétrage)

Introduction

Cette documentation décrit le cas d'usage d'un de nos clients de M-Detect permettant de détecter certaines erreurs dans leurs logs IBMI. (QPJOBLOG)

De manière générale, l'analyseur de log M-Detect permet de :

  • Anticiper les incidents
  • Identifier les erreurs dans la masse d’information
  • Réduire le temps consacré à l’analyse
  • Prévenir le bon interlocuteur suivant les règles définies


Le but principal étant d'Assurer la qualité de service en anticipant les incidents.

Principe de fonctionnement

Le fichier spool de log QPJOBLOG est envoyé à un serveur ONYX. Un fichier de paramétrage est utilisé pour déterminer quelles lignes du fichier QPJOBLOG doivoient être incluse et/ou excluse du rapport généré et envoyé par email par M-Detect.

MDE 1.jpg


MDE 2.jpg

Fichier de paramétrage

Le fichier de paramétrage permet de paramétrer les remontés de logs.

Paramétrage

Type de boite de Workflow : M-Connect TEXT

Nom du Connect : SPLFEXTRAC


Advanced :

- Type de sortie : LISTING --> Equivalent à ajouter un paramètre DB.MAPPING_DATASTREAM=LISTING

  • Obligatoires :

- DB.INFILE_DATA : fichier SPOOL (QPJOBLOG) encodé en UCS2 - DB.INFILE_PARAM : fichier de paramètres de filtrage

- DB.OUTFILE_METADATA : fichier XML avec les infos relatives au spool - DB.OUTFILE_DATA : fichier SPOOL après filtrage des lignes

- DB.MLL_PATH : emplacement des fichiers .mll (sans "/" ni "\" à la fin) (exemple : D:\Mapping\email) Attention les fichiers .mll doivent être encodés en UCS2

- DB.MAPPING_WIDTHPAGE=9999


  • Facultatifs :


- DB.FROMAS400 : paramètre DESTOPT passé en LPR (exemple : USER=SMET;OUTQ=PRT1;SPLF=QPJOBLOG;STARTPAGE=00000;STOPPAGE=000000;JOB=FACPRD;JOBNUM=123456;DATESPL=20201125)

Liste des attributs utilisables dans le paramètre "DB.FROMAS400" :

- USER ou U - SPLF ou S - SPLNUM ou SPLFNUM ou N - JOB ou J - JOBNUM ou JN - OUTQ ou O - HOSTNAME ou H - USRDTA ou UD - DATESPL ou D (date au format AAAAMMJJ) - NBPAGES ou P - STARTPAGE ou F - STOPPAGE ou L

- DB.USER : attribut "USER" du spool AS400 - DB.SPLF : attribut SPLFNAME du spool AS400 - DB.SPLNUM : attribut Numéro du spool AS400 - DB.JOB : attribut JOBNAME du spool AS400 - DB.JOBNUM : attribut JOBNUMBER du spool AS400 - DB.OUTQ : attribut OUTORI du spool AS400 - DB.HOSTNAME : hostname à l'origine du SPLF - DB.USRDTA : attribut USRDTA du spool AS400 - DB.DATESPL : attribut DATE du spool AS400 (au format AAAAMMJJ) - DB.NBPAGES : nombre de pages du SPLF (obtenu après comptage avec map_count_page -type:TXT) - DB.STARTPAGE : numéro de la première page à traiter - DB.LASTPAGE : numéro de la dernière page à traiter

- DB.ADD_MESSAGE_IN_FILE : "true" pour ajouter le message de l'email au début du fichier texte DB.OUTFILE_DATA

Les données présentes dans FROMAS400 peuvent être surchargées par les par les paramètres tels que DB.USER , DB.SPLF etc....

Syntaxe du XML de paramétrage

Voir l'exemple joint à ce package

Chaque élément <spool> correspond à une configuration de SPOOL à traiter.


Elément <attributes> : ---------------------- Attributs du spools utilisés pour le filtrage niveau SPOOL

Eléments fils de <attributes> :

<USER>

<SPLF>

<SPLNUM> (ou <SPLFNUM>)

<JOB>

<JOBNUM>

<OUTQ>

<HOSTNAME>

<USRDTA>

<NBPAGES>


Attributs xml

- cmp : permet de définir le type de comparaison à effectuer

- égalité : cmp="-eq" (valeur par défaut si non spécifié)

- commence par : cmp="begin"

- différent : cmp="-ne"

- supérieur : cmp="-gt"

- supérieur ou égal : cmp="-ge"

- inférieur : cmp="-lt"

- inférieur ou égal : cmp="-le"

- contient : cmp="contains"

- ne contient pas : cmp="not-contains"

Attention : les comparaisons "-lt" , "-gt" , "-le" et "-ge" sont de type numériques (1 < 00002)

Exemple : <attributes> <SPLF cmp="begin">QP</SPLF> </attributes>

Pour traiter les Spools dont le nom commence par QP


Elément <variables> : --------------------- Permet de définir une liste de valeurs à récupérer directement dans le spool et de les nommer afin de les réutiliser pour l'objet, le message du mail, les adresses d'expéditeur ou de destinataires, mais aussi à partir du workflow en lisant le XML de réponse.

Un élément fils <variable> par variable à récupérer. Chaque variable sera disponible dans le fichier XML de réponse, mais également utilisables au niveau des propriétés d'envoi de l'email via la syntaxe suivante : NOM_VARIABLE

Attributs : - name : nom de la variable - page : page du spool dans laquelle se trouve la valeur - line : numéro de la ligne - col : position du caractère dans la ligne - len : longueur de la valeur à récupérer

Exemple : <variables> <variable name="VARENV" page="1" line="4" col="42" len="3"/> </variables>


Elément <email> : -----------------

Propriétés de l'email à envoyer

- <from> : expéditeur - <to> : destinataire(s) - <cc> : destinataire(s) en copie - <object> : sujet du message - <message> : corps du message - <mll-file> : fichier mailing list (.mll) (5 maximum)

Tous ces éléments peuvent contenir des variables sous la forme xxxxx, que ce soient des attributs du spools ou des valeurs issues du contenu du Spool

Les éléments <to> , <cc> et <mll-file> peuvent être multiples, mais 5 maximum pour <mll-file>

Exemple :

<email> <from>citmapping_VARENV@mappingsuite.com</from> <to>nsmet@mappingsuite.com</to> <to>test@gmail.com</to> <to>mon_fichier_mll.mll</to> <cc>jdieu@mappingsuite.com</cc> <cc>user2@mappingsuite.com</cc> <mll-file>Mailing_list1.mll</mll-file> <mll-file>Mailing_list2_425.mll</mll-file> <object>ASP1 ANO - Journalière - JOB de USERJOBNUM - DATESPL</object> <message>Ceci est le corps de message de mon mail pour USER</message> </email>


Elément <lines> : -----------------

Liste les critères de sélection de chaque ligne

- <include> : lignes à récupérer - <exclude> : lignes à éliminer parmi les lignes récupérées - <nextline> : permet de définir comment reconnaitre une "ligne suivante", c'est à dire la suite d'une ligne répondant aux critères de sélection. - <reject-splf> : si une ligne correspond à ce critère, alors le spool est entièrement rejeté


Attributs : - cmp : type de comparaison à effectuer cmp="contains" : contient (par défaut) cmp="not-contains" : ne contient pas cmp="empty" : doit être vide (ou uniquement des espaces) - col : recherche à partir d'une position particulière dans la ligne - len : longueur de la ligne à prendre en compte pour la recherche


Change log V1 :


- Implémentation de la comparason "begin" - Prise en charge de la comparaison sur le nombre de pages, avec notamment les comparateurs "-gt" , "-lt" , "-le" et "-ge" - Remplacement de "system" par "hostname" (plus logique) - Suppression des paramètres STARTPAGE et STOPPAGE en entrée (ça ne sert à rien pour ce traitement) - Corrections diverses et simplification du code pour le rendre plus "PROD" que "POC"


Change log V2 du 25/11/2020 :


- Passage de paramètres en une seule fois avec le contenu de DESTOPT - Prise en charge d'un seule paramétrage du XML dès qu'il est trouvé - Ajout de l'objet et du message pour le mail - Prise en charge des variables dans l'objet et le message sous la forme xxxxxx

Change log V3 du 26/11/2020 :


- Prise en charge des fichiers .mll directement en cas de besoin, ce qui nécessite d'utiliser le paramètre DB.MLL_PATH


Change log V4 du 02/12/2020 :


- Ajout des comparateurs "contains" et "not-contains" pour les tests sur les attributs de SPOOL - Remplacement de cmp="-neq" par cmp="-ne" (pour "différent de")


Change log V4.1 du 07/12/2020 :


- Correction : suppression d'une ligne de source orpheline de sa variable qui a été supprimée ( ="" )


Change log V5 du 10/12/2020 :


- Optimisation temps de traitement : prise en compte des filtres "exclude" uniquement si la ligne est potentiellement à récupérer - Ajout de la prise en charge de la variable USRDTA dans le sujet et le corps du mail - Ajout d'un flag dans le XML permettant de savoir si des lignes ont été trouvées ou non dans le spool : <content-found> - Création systématique d'un fichier texte en sortie, même si aucune ligne n'a été récupérée


Change log V5.1 du 10/12/2020 :


- Correction : le remplacement de USRDTA dans l'email n'utilisait pas la bonne donnée...


Change log V6 du 11/12/2020 :


- Ajout de la prise en charge des variables xxxxxx dans les éléments <from> , <to> et <cc> pour les emails - Ajout d'un paramètre DB.ADD_MESSAGE_IN_FILE=true si besoin d'ajouter le message de l'email au début du fichier texte généré


Change log V7 du 14/12/2020 :


- Suppression des lignes blanches dans le fichier de sortie - Fix : correction d'un bug sur la récupération des lignes suivantes (<nextline>)


Change log V8 du 16/12/2020 :


- Bypass du traitement pour les lignes du Spool qui sont vides


Change log V9 du 21/12/2020 :


- Ajout de l'attribut USRDTA en tant que critère de filtrage de SPOOL


Change log V9.1 du 24/12/2020 :


- Fix : init check USRDTA entre chaque lecture de paramétrage de spool. Ce bug rendait inactives les configurations de spool sans filtre sur USRDTA se trouvant après une configuration possédant un filtre sur USRDTA


Change log V10 du 25/12/2020 :


- Evol : le fichier .mll peut être nommé avec des attributs du spool (ex : JOB) - Ajout d'infos de debug dans le xml de réponse : - fichiers mll trouvés : <mll-files> - fichier xml de paramétrage : <param-file> - position de la config trouvée dans le XML de paramétrage : <config-position> - Ajout d'une balise spécifique <mll-file> dans le xml de paramétrage pour spécifier le nom d'un fichier de mailing list - Possibilité d'utiliser plusieurs fichiers .mll pour les destinataires - Trim des variables trouvées dans le spool avant utilisation (très important pour les adresses emails) - Si une variable n'est pas trouvée dans le spool (page ou ligne inexistante), remplacement de son nom entre doubles crochets par une chaine vide - Suppression des CDATA sur les éléments du XML de réponse pour lesquels ce n'est pas nécessaire (true, false, nombre, splf attribute, emails) - Possibilité d'utiliser plusieurs balises <to> , <cc> et <mll-file> dans le XML de paramétrage - Rework améliorant la maintenabilité générale et les évolutions potentielles


Change log V11 du 30/12/2020 :


- Ajout de l'attribut JOBNUM en tant que critère de filtrage de SPOOL


Change log V12 du 30/12/2020 :


- Ajout de l'attribut SPLFNUM en tant que critère de filtrage de SPOOL et comme meta donnée - L'absence de filtre <include> sur les lignes revient à toutes les récupérer


Change log V13 du 05/01/2021 :


 - Fix : possibilité de nommer les fichier .mll avec des variables issues du contenu du spool (ex : maliste_VARENV.mll)

- Evol : si le champ "from" (expéditeur) de l'email n'est pas spécifié dans la config, sa valeur par défaut sera noreply@mapping

 - Evol : ajout d'un nouvel élément au niveau de l'analyse de lignes : <reject-splf>

Si une ligne correspondante est trouvée, alors le SPOOL est complètement rejeté, même si d'autres lignes sont valides - L'attribut SPLFNUM devient SPLNUM, mais l'ancien nom reste valide pour rétro-compatibilité


Change log V14 du 12/01/2021 :


 - Evol : création d'alias pour les attributs du paramètre FROMAS400 afin de prendre moins de place

- U --> USER - S --> SPLF - N --> SPLNUM - J --> JOB - JN --> JOBNUM - O --> OUTQ - H --> HOSTNAME - UD --> USRDTA - D --> DATESPL - P --> NBPAGES - F --> STARTPAGE (First page) - L --> STOPPAGE (Last page)

Exemple : U=PRODSNI;O=QEZJOBLOG;S=QPJOBLOG;J=SSLDCDE_DP;JN=00002;N=1;F=1;L=999;UD=foo

- Ajout des infos STARTPAGE et STOPPAGE dans le XML de réponse


Change log V15 du 13/01/2021 :


 - Evol : formatage de la date du spool DATESPL sous la forme JJ/MM/AAAA

Exemple

<param>
   <spool>
     <attributes>                                      //Si le spool reçu depuis IMBI respecte les critères suivants
             <USER cmp="not-contains">MER</USER>                  //Le nom de l'utilisateur du spool ne contient pas la valeur "MER"                  
             <SPLF>QPJOBLOG</SPLF>                                //Le nom du spool est QPJOBLOG                  
             <SPLF>QPJOBLOG1</SPLF>                               //OU Le nom du spool est QPJOBLOG1                                
             <SPLNUM cmp="-le">1<SPLNUM>                          //Le numéro de spool est inférieur ou égal à 1  
             <JOB cmp="begin">FACPRD</JOB>                        //Le nom du job commence par FACPRD
             <HOSTNAME>ASP2</HOSTNAME>                            //Le nom du host vaut FACPRD
             <NBPAGES cmp="-le">500</NBPAGES>                     //Le nombre de pages est inférieur ou égal à 500
             <OUTQ cmp="-ne">PRT9</OUTQ>                          //L'OUTQ d'origine IBMI est différent de PRT9
             <USRDTA>MY CUSTOM DATA</USRDTA>                      //L'attribut du spool Référence utilisateur est égale à MY CUSTOM DATA
     </attributes>
     <variables>                                       //On initialise des variables avec le contenu du spool
             <variable name="VARENV" page="1" line="4" col="42" len="3"/>   //On crée et initialise la variable VARENV avec le contenu du spool en page 1, ligne 4, colonne 42 sur une longueur de 3
             <variable name="test" page="2" line="9" col="60" len="6"/>     //On crée et initialise la variable test avec le contenu du spool en page 2, ligne 9, colonne 60 sur une longueur de 6
     </variables>
     <email>                                          //paramétrage de l'envoi d'email
             <from>citmapping@mappingsuite.com</from>
             <to>nsmet@mappingsuite.com</to>
             <to>test@gmail.com</to>
             <cc>jdieu@mappingsuite.com</cc>
             <mll-file>ACH600_CDCHS.mll</mll-file>
             <mll-file>Mailing_list_2.txt</mll-file>
             <object>[[test]] [[VARENV]]- ASP1 ANO - Journalière - [[JOB]] de [[USER]] n° [[JOBNUM]] - [[DATESPL]] --> QPJOBLOG</object>
              <message>Ceci est le corps de message de mon mail pour [[USER]]</message>
     </email>
     <lines>                                          //paramétrage des lignes à inclure/exclure dans le rapport
             <include col="58" cmp="-eq">ERR</include>    //Inclure si dans la ligne il y a la valeur "ERR" en colonne 58
             <include col="40" len="50">err</include>     //Inclure si dans la ligne il y a la valeur "err" entre la colonne 40 et la colonne 90
             <include>non restauré(s) dans</include>      //Inclure si dans la ligne il y a la valeur "non restauré(s)"
             <include>; code fin 40 .</include>           //Inclure si dans la ligne il y a la valeur "'; code fin 40"'
             <include>; code fin 30 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 30"
             <include>; code fin 50 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 50"
             <include>; code fin 20 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 20"
             <include>; code fin 60 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 60"
             <include>LOT DEJA TRAITE LE</include>        //Inclure si dans la ligne il y a la valeur "LOT DEJA TRAITE LE"
             <include>lot refuse</include>                //Inclure si dans la ligne il y a la valeur "lot refuse"
             <exclude>: la facture de la précédente</exclude>               //Exclure si dans la ligne il y a la valeur ": la facture de la précédente"
             <exclude>Message....: ERR : données GOP incomplètes</exclude>  //Exclure si dans la ligne il y a la valeur "Message....: ERR : données GOP incomplètes"
             <exclude>ERR : impossible de traiter Org</exclude>             //Exclure si dans la ligne il y a la valeur "ERR : impossible de traiter Org"
             <exclude>ERR : Paramètrage non trouvé.</exclude>               //Exclure si dans la ligne il y a la valeur >"ERR : Paramètrage non trouvé."
             <nextline col="1" len="39" cmp="empty"></nextline>             //Si une ligne est vide entre la colonne 11 et la colonne 39, alors la ligne correspond à la suite du message de la ligne d'avant. Celle-ci doit alors être inclus dans le rapport           
             <reject-splf>Spool_demo</reject-splf>                          //si une ligne correspond à ce critère, alors le spool est entièrement rejeté
     </lines>
   </spool>
</param>