M-Detect

Analyseur de log pour IBMI

De MappingDoc

Prérequis

Avoir des connaissances sur l'invocation des projets Connect et ses paramètres

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 QPJOBLOG IBMi.

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

Invocation

Côté IBMI-i le spool est envoyé vers le serveur MAPPING Onyx à l'aide de la commande LPR en passant les métadatas nécessairent au traitement via le paramètre LPR DESTOPT.

Une fois sur le serveur MAPPING ONYX, M-Detect repose sur le principe de Connect paramétrable. Celui-ci prend en paramètre le fichier de paramétrage et génère en sortie un fichier de données qui sera le contenu du rapport d'analyse de la log ainsi qu'un fichier de métadonnées nécessaire, dans le cas de notre client, au traitement dans le workflow ONYX.

Son invocation se fait dans un workflow Onyx à l'aide d'une boite workflow M-Connect TEXT. Le nom du format Connect en question est : SPLFEXTRAC

Connect

Paramètres avancés

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

Obligatoires

Lors de l'invocation du Connect, les paramètres doivent obligatoirement être passés :

  • 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.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.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.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....

Flux impliqués dans le traitement

Fichier de paramétrage

Le fichier de paramétrage permet de paramétrer les remontés de logs. Il est passé au Connect paramétrable via le paramètre DB.INFILE_PARAM

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 :

Pour traiter les Spools dont le nom commence par QP

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


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) //Pour l'utilisation de cette propriété, le paramètre DB.MLL_PATH doit obligatoirement être renseigné

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

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_ADJHS.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>

Fichier de sortie métadata

Ce fichier est généré via le paramètre de sortie du Connect paramétrable DB.OUTFILE_METADATA. Ce fichier est de manière générale pas obligatoire. Mais pour notre client, celui-ci est bien obligatoire et contient des données pour les traitements à réaliser côté workflows.

<metadatas>
   <USER>SMET</USER>
   <SPLF>QPJOBLOG</SPLF>
   <SPLNUM>1</SPLNUM>
   <JOB>FACPRD</JOB>
   <JOBNUM>123456</JOBNUM>
   <OUTQ>PRT1</OUTQ>
   <HOSTNAME>ASP2</HOSTNAME>
   <USRDTA></USRDTA>
   <DATESPL>20210113</DATESPL>
   <NBPAGES>500</NBPAGES>
   <STARTPAGE>000000</STARTPAGE>
   <STOPPAGE>000000</STOPPAGE>
   <DATESPL_ISO>2021-01-13</DATESPL_ISO>
   <DATESPL_EU>13/01/2021</DATESPL_EU>
   <DATESPL_US>01/13/2021</DATESPL_US>
   <variable name="VARENV"><![CDATA[JOB]]></variable>
   <variable name="test"><![CDATA[268967]]></variable>
   <from>citmapping@mappingsuite.com</from>
   <to>assistancedf@macompany.fr;DSI_Assistance_GF@macompany.fr;Assistance-fonctionnelle- 
groupeGF@macompany.fr;assistancedf@macompany.fr;DSI_Assistance_GF@macompany.fr;Assistance-fonctionnelle-groupeGF@macompany.com</to>
   <cc>jtest@macompany.com;Dtest@macompany.fr;stest@macompany.fr;dtest2@macompany.fr;Atest@macompany.fr</cc>
   <object><![CDATA[268967 JOB- ASP1 ANO - Journalière - FACPRD de SMET n° 123456 - 20201125 --> QPJOBLOG]]></object>
   <message><![CDATA[Ceci est le corps de message de mon mail pour SMET]]></message>
   <processed>true</processed>
   <content-found>true</content-found>
   <mll-files><![CDATA[C:\mapping\temp\MACOMPANY/test_QPJOBLOG.ml2;C:\mapping\temp\MACOMPANY/Mailing_list_2.txt]]></mll-files>
   <param-file><![CDATA[C:\mapping\temp\MACOMPANY\20201215\PARAM_QPJOBLOG.xml]]></param-file>
   <config-position>2</config-position>
</metadatas>

Fichier de sortie de donnée

Ce fichier DB.OUTFILE_DATA contient les lignes extraites du fichier de log QPJOBLOG répondant aux critères listés dans le fichier de paramétrage. Ce fichier d'extraction sera utilisé comme contenu de l'email final.


Please find below the log extract for PRODSNI
 
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/017885/C/000827495.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/042683/C/000301552.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/100251/C/001182500.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105047/C/001206325.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105301/C/001207792.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105380/C/001207900.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105402/C/001208506.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/127566/C/001195815.
Message . . . . :   ERR: Guichet-BIC(17607/00001/CCBPFRPPSTR)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/148443/C/001347783.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/149033/C/001349110.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/149079/C/001250625.
Message . . . . :   ERR: Guichet-BIC(15607/00010/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/162128/C/001658969.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/170489/C/001387332.
Message . . . . :   ERR: Guichet-BIC(15607/00073/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/182243/C/001378071.
Message . . . . :   ERR: Guichet-BIC(15607/00073/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/182243/C/001378071.  
Message . . . . :   ERR : Mandat sans ICS
Message . . . . :   ERR : payeur L01/185571/C/001562325.
Message . . . . :   ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/187434/C/001372800.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/211115/C/001754827.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/215515/C/001774196.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/231382/C/001892359.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/348757/C/002194119.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/371000/C/002114636.
Message . . . . :   ERR: Guichet-BIC(18025/10501/CEPAFRPP802)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/394697/C/002489654.
Message . . . . :   ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/398221/C/002508753.
Message . . . . :   ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/398221/C/002508753.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/400862/C/002527741.
Message . . . . :   ERR: Guichet-BIC(//NTSBDEB1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/428481/C/002626022.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/433464/C/002683070.
Message . . . . :   ERR: Guichet-BIC(10178/00017/CCBPFRPPCHX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/441381/C/002665507.
Message . . . . :   ERR: Guichet-BIC(//CREGBEBB)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/453860/C/002670858.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/455952/C/002534965.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/464899/C/002018145.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465221/C/001966120.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465265/C/002706900.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465894/C/002705095.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465962/C/002708612.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/466003/C/001777779.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/466211/C/002489635.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/466363/C/002524605.

Fichier mll

Comme nous l'avons vu précédemment, il est possible de faire référence à des fichiers mailing list (mll).
Leur nom doit être indiqué dans le fichier de paramétrage à l'aide de la balise <mll-file>.
Le chemin du répertoire ayant le ou les fichiers mll doit être stipulé via le paramètre d'entrée DB.MLL_PATH
Attention : Ce fichier doit être encodé en UCS2

Exemple de contenu de fichier mll

to:assistancetest@macompany.fr
to:DSI_test@macompany.fr
to:AssistanceF@macompany.fr
cc:dtest@macompany.fr
cc:stest@macompany.fr
cci:test@mappingsuite.com
cc:Dtest@macompany.fr
cc:Atest@macompany.fr
cc:ctest@macompany.fr
cc:ltest@macompany.fr
cc:exploit@macompany.fr