2012-06-21 10:54:47 +0000 2012-06-21 10:54:47 +0000
22
22

Comment créer un fichier journal dans un délai précis

J'ai un fichier journal, chaque ligne du journal est précédée d'une date, comme ça :

2012-03-06 11:34:48,657 blah blah blah...

Comment puis-je grep ce fichier et n'obtenir que les lignes de 8h à 23h seulement ?

Mon intention est de compter le nombre d'erreurs survenues entre 8h et 23h.

Réponses (3)

24
24
24
2012-06-21 11:08:20 +0000
egrep '^[^]+ (0[89]|1[0-9]|2[012]):'

Une explication détaillée peut être trouvée dans divers tutoriels regex (expression régulière) ; egrep utilise la syntaxe “POSIX étendu” (man 7 regex).

  • Le premier ^ signifie “début de la ligne”.

  • [^]+ correspond simplement au champ de la date, quelle que soit la date réelle.

  • (...|...|...) signifie “l'un ou l'autre des motifs donnés”, donc (0[89]|1[0-9]|2[012]) signifie “soit 0[89] soit 1[0-9] soit 2[012]”. Il correspondra à tous les nombres de 08 à 22.


Une option un peu meilleure est :

awk -F'[:]' '$2 >= 8 && $2 <= 22 { print }'

L'option -F divise chaque ligne en champs séparés selon la regex [:] (correspondant soit à : soit à un espace), et le script awk vérifie la 2ème colonne (l'heure).

21
21
21
2012-06-21 11:11:02 +0000

Pourquoi s'embêter à utiliser le grep ? Vous pouvez simplement utiliser sed.

exemple :

sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log

Cela permettra d'imprimer tous les journaux entre June 17 13:39:54 et June 18 10:50:28

0
0
0
2016-05-09 06:43:49 +0000

Il y a en fait une façon beaucoup plus simple de le faire.

Téléchargement/Documentation : autodrgrep.kl.sh

Commande:

./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_08:00:00,2016-05-08_23:00:00' 'INFO' 'a2ensite' 5 10 -show

Explication:

  • autodrgrep.kl.sh est le nom de l'outil.

  • notchef est une option qui est passée à l'outil pour lui dire ce qu'il doit faire. Dans ce cas particulier, elle indique à l'outil quel est le type de fichier journal /tmp/client.log.

  • /tmp/client.log est bien sûr le fichier journal.

  • 2016-05-08_19:12:00,2016-05-08_21:13:00 est la plage de dates du journal que vous souhaitez analyser

  • “INFO” est l'une des chaînes qui se trouve dans les lignes des journaux qui vous intéressent.

  • “a2ensite” est une autre chaîne de la même ligne sur laquelle vous vous attendez à trouver la chaîne “INFO”. La spécification de ces deux chaînes (INFO et a2ensite) permet d'isoler et de traiter les lignes qui vous intéressent beaucoup plus rapidement, en particulier si vous avez affaire à un énorme fichier journal.

  • 5 spécifie “Warning”. En spécifiant 5, vous dites au programme d'alerter en tant que WARNING s'il y a au moins 5 occurrences des chaînes de recherche que vous avez spécifiées

  • 10 spécifie Critique. En spécifiant 10, vous demandez au programme d'émettre une alerte CRITIQUE si au moins 10 occurrences des chaînes de recherche que vous avez spécifiées se produisent.

    • show spécifie le type de réponse que vous obtiendrez. En spécifiant -show, vous dites que si vous trouvez quelque chose qui correspond aux modèles spécifiés, vous l'affichez à l'écran.

Exécution de l'échantillon:

# ./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite' 5 10 -show

[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM

Et si la plage de dates ou la période spécifiée par l'utilisateur n'est pas dans le journal?

Chaque exécution de la commande ci-dessus aura toujours une ligne (dernière ligne de la sortie) qui dit soit “ATWFILF” soit “ETWNFILF”.

  • ATWFILF signifie que la plage de dates ou la période de temps réelle que vous avez demandé de rechercher a été trouvée dans le journal. C'est donc très bien.

  • ETWNFILF signifie que la plage de dates ou la période que vous avez demandé de rechercher n'a PAS été trouvée dans le journal. Dans ce cas, l'heure la plus proche de celle que vous avez spécifiée sera détectée et utilisée à la place.