Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: [bash]Скрипт анализа логов  (Прочитано 3661 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Rydj

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
[bash]Скрипт анализа логов
« : 15 Октября 2013, 17:11:02 »
Всем привет.
Осваиваю потихоньку скрипты и возникла задача проанализировать лог файлы. Каждый день планировщик запускает несколько программ каждая из которых записывает свой лог. Логи по всем программам хранятся в одной папке с именем дня создания:
/mydir/logs/ordered/jobs/2013-10-15 00-15-12/
Если есть ошибки то они имеют формат ERROR:
Первая проблема это как распределить какие ошибки к какому файлу принадлежат?
Например если выполним команду:
find /mydir/logs/ordered/jobs/2013-10-15*     -name *.log -print -exec grep ERROR: {} \;
То получу строки ошибок со всех файлов. Мне для начала было бы хорошо получать на выходе в каком файле какие ошибки. Не подскажите идею реализации?


Пользователь решил продолжить мысль 15 Октября 2013, 17:22:23:
Поправка вопроса. Для начала мне нужно понять в каких программах случились ошибки для этого мне нужно выделить файлы тех логов которые содержат ERROR:

Пользователь решил продолжить мысль 15 Октября 2013, 23:33:43:
С этой проблемой разобрался, забыл про возможности грепа=)
Но главная задача не решилась дело вот в чем:
 Есть программа которая после отработки записывает в лог файл след информацию:
****project = red2
<много много строк инфы>
ERROR:
<много строк инфы>
****project = white6
<много много строк инфы>
****project = Xen
<много строк инфы>
ERROR:
Задача вот в чем если проект не отработал то в логе будет строка начинающая с ERROR: для удобства диагностики самое важное это строчка с именем проекта и строчка с ошибкой которая случилась в нем, причем проект может и отработать без ошибок как в моем примере white6. В идеале если будут на выходе только те проекты где есть ошибки. Но для начала хотелось бы хотя бы фильтровать и на выходе получать строку с проектом и строку с ошибкой. Таких файлов очень много с логами, я пробовал
find /log -name *.log -exec grep -f /home/user/mask {} \; в маске прописывал шаблоны которые нужно было отгрепать но греп работал как cat. По отдельности можно грепнуть проекты и ошибки но тогда не понятно будет какая ошибка в каком проекте и смысл теряется.
Кто нибудь может дать совет как можно реализовать такую задачу, у меня пока нет идей но активно их ищу=)

Пользователь решил продолжить мысль 16 Октября 2013, 16:28:17:
Всё! Реализовал может кому поможет  :D
#!/bin/bash
DATE_NAMEDIR=`date +%Y-%m-%d`
reportfile=/home/user/scripts/scan_report
find /home/user/scripts/dev/*  -type f -name '*.log' -print | while read dir
do
echo "-------------------------------------------------------------------------------"
echo "Job: $dir" >>/home/user/scripts/scan_report
cat *$dir* |awk '{if ($1 ~ /ERROR/) {print;  print $0} else if ($3 ~ /Step:/) {print}}'
done

Но это не конец теперь я хочу получить только имя лог файла, причем имена логов содержат проблелы((
Кто нибудь знает как из $dir получить имя файла?
« Последнее редактирование: 16 Октября 2013, 16:28:17 от Rydj »

Оффлайн efimovgk

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: [bash]Скрипт анализа логов
« Ответ #1 : 17 Октября 2013, 22:12:32 »
Если в строку с ERROR писать репрезентативную инфу о проекте и строке с ошибкой, то не надо ничего сложного выдумывать, а просто обойти все папки:

for subd in $(ls logs); do cat logs/$subd/*.log |grep ERROR; done

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.