A voir également:
- Aide script pour parser les logs
- Script vidéo youtube - Guide
- View recovery logs - Guide
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Microsoft activation script - Accueil - Windows
4 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 janv. 2014 à 11:41
29 janv. 2014 à 11:41
Salut,
Peut-être qu'avec un exemple de log (tout le monde n'a pas de log d'Apache et Tomcat sous la main) et le détail de ton script, nous serions plus à même de t'aider, non ? ;-\
Peut-être qu'avec un exemple de log (tout le monde n'a pas de log d'Apache et Tomcat sous la main) et le détail de ton script, nous serions plus à même de t'aider, non ? ;-\
Utilisateur anonyme
29 janv. 2014 à 12:59
29 janv. 2014 à 12:59
salut,
il faut faire en sorte de parser uniquement les lignes ajoutées depuis la précédente lecture, et donc il faut inscrire dans un fichier annexe le nombre de lignes du fichier log.
il faut aussi tenir compte du renouvellement du fichier log !
il faut faire en sorte de parser uniquement les lignes ajoutées depuis la précédente lecture, et donc il faut inscrire dans un fichier annexe le nombre de lignes du fichier log.
il faut aussi tenir compte du renouvellement du fichier log !
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 janv. 2014 à 13:19
29 janv. 2014 à 13:19
Re-
Pour Apache, tu pourrais rajouter dans ton
Pour Tomcat, je suis d'accord avec QQCQCPQ ;-))
Pour Apache, tu pourrais rajouter dans ton
grepla date du jour :
$ cat plop
[Tue Jan 28 16:48:49 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Wed Jan 29 16:48:49 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
$ jour=$(LANG=en_GB date "+%a %b %d")
$ grep -i "^\[${jour}.*\(Fatal\|Error\|Exception\|at.*\.java\:.*\)" plop
[Wed Jan 29 16:48:49 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
Pour Tomcat, je suis d'accord avec QQCQCPQ ;-))
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 janv. 2014 à 14:36
29 janv. 2014 à 14:36
Non non ;-))
Je viens de tester pour Apache avec cette ligne la :
il me renvoi la même chose qu'avant.
c'est à dire
Je devrais rien à voir normalement.
grep -i "^\[${jour}.*\(Fatal\|Error\|Exception\|at.*\.java\:.*\)"
il me renvoi la même chose qu'avant.
c'est à dire
[Mon Jan 27 14:39:43 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:40:38 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:40:46 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:40:50 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:41:00 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:41:10 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:42:00 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:43:08 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:44:56 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 27 14:47:31 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Tue Jan 28 16:48:49 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
Je devrais rien à voir normalement.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 janv. 2014 à 14:56
29 janv. 2014 à 14:56
La variable
${jour}contient bien Wed Jan 29 ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 janv. 2014 à 14:08
29 janv. 2014 à 14:08
Pour Tomcat j'ai peut-être une combine...
L'idée c'est d'avoir un fichier temporaire où sont stockées les données et de se servir de ce fichier pour éliminer les données déjà traitées.
Concrètement, il faut un premier fichier de référence :
Puis au fur et à mesure compléter ce fichier avec les nouvelles entrées (
Exemple en pratique...
Le fichier de départ pour tomcat :
Construction du fichier temporaire de base :
Son contenu :
Maintenant je rajoute 2 nouvelles entrées en fin de fichier :
Je lance la commande de parsage (qui ne me sort bien que les 2 nouvelles lignes) :
Et mon fichier temporaire contient bien mes 2 nouvelles entrées :
A toi d'adapter en fonction de tes besoins...
L'idée c'est d'avoir un fichier temporaire où sont stockées les données et de se servir de ce fichier pour éliminer les données déjà traitées.
Concrètement, il faut un premier fichier de référence :
grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*" > fich.temp
Puis au fur et à mesure compléter ce fichier avec les nouvelles entrées (
tee -a fich.temp), mais ne garder que ces entrées pour le mail (
grep -v -f fich.temp)...
grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*" | grep -v -f fich.temp | tee -a fich.temp
Exemple en pratique...
Le fichier de départ pour tomcat :
$ cat brol
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
Construction du fichier temporaire de base :
$ grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*" brol > tmp.log
Son contenu :
$ cat tmp.log
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Maintenant je rajoute 2 nouvelles entrées en fin de fichier :
$ cat brol
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
at java.lang.reflect.Method.invoke(Method.java:1597)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1629)
Je lance la commande de parsage (qui ne me sort bien que les 2 nouvelles lignes) :
$ grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*" brol | grep -v -f tmp.log | tee -a tmp.log
at java.lang.reflect.Method.invoke(Method.java:1597)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1629)
Et mon fichier temporaire contient bien mes 2 nouvelles entrées :
$ cat tmp.log
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at java.lang.reflect.Method.invoke(Method.java:1597)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1629)
A toi d'adapter en fonction de tes besoins...
ok je suis un peu perdu dans ton raisonnement.
J'ai mon fichier de log :
ma commande qui vient récupérer la stack qui m'intéresse :
Je construis ensuite mon fichier temp de base :
et ensuite je ne comprends pas comment tu rajoutes les deux ou plusieurs lignes ??
et ta dernière commande vient récupérer les deux ou plusieurs lignes précédemment ajoutées.
Merci,
J'ai mon fichier de log :
/var/log/tomcat6/catalina.out
ma commande qui vient récupérer la stack qui m'intéresse :
tail -n 200 /var/log/tomcat6/catalina.ou | grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*"
Je construis ensuite mon fichier temp de base :
tail -n 200 /var/log/tomcat6/catalina.ou | grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*" > tmp.log
et ensuite je ne comprends pas comment tu rajoutes les deux ou plusieurs lignes ??
et ta dernière commande vient récupérer les deux ou plusieurs lignes précédemment ajoutées.
Merci,
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 janv. 2014 à 17:53
29 janv. 2014 à 17:53
et ensuite je ne comprends pas comment tu rajoutes les deux ou plusieurs lignes ??Grâce à
| grep -v -f tmp.log | tee -a tmp.logqui exclue tout le contenu du fichier de tmp.log (
grep -v -f tmp.log) avant d'y rajouter les nouvelles entrées (
tee -a tmp.log).
Ta commande sera :
tail -n 200 /var/log/tomcat6/catalina.ou | grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*" | grep -v -f tmp.log | tee -a tmp.log
ok nickel merci de ta réponse :
dernière question, pour les logs de tomcat, j'arrive à récupérer la stack mais pas correctement :
Le problème s'est que je récupère une stack complet mais desfois je récupère la fin d'une stack précédente, je souhaite que mes stacks soit toujours propre. Je sais que tail -n y est pour quelque chose mais je ne trouve pas le moyen de récupérer à chaque coup une stack complète
Pour exemple :
dernière question, pour les logs de tomcat, j'arrive à récupérer la stack mais pas correctement :
tail -n 200 /var/log/tomcat6/catalina.ou | grep -i "Fatal\|Error\|Exception\|at.*\.java\:.*"
Le problème s'est que je récupère une stack complet mais desfois je récupère la fin d'une stack précédente, je souhaite que mes stacks soit toujours propre. Je sais que tail -n y est pour quelque chose mais je ne trouve pas le moyen de récupérer à chaque coup une stack complète
Pour exemple :
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
GRAVE: "Servlet.service()" pour la servlet jsp a généré une exception
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:456)
at java.lang.Integer.parseInt(Integer.java:497)
at org.apache.jsp.catalogue3_jsp._jspService(catalogue3_jsp.java:116)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
30 janv. 2014 à 10:13
30 janv. 2014 à 10:13
Euh... je ne connais pas du tout le fonctionnement de Tomcat, mais après une rapide recherche sur le net, je m'aperçois qu'on peut loguer les erreurs en y rajoutant un timestamp...
Peut être devrais-tu activer cette possibilité (voir ce thread), cela faciliterait grandement la tâche, non ?
Peut être devrais-tu activer cette possibilité (voir ce thread), cela faciliterait grandement la tâche, non ?
Modifié par jipicy le 29/01/2014 à 12:25
Exemple de log tomcat :
Exemple de log Apache :
Merci à vous,