debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: bash скрипт для бесконечного парсинга лога  (Прочитано 3818 раз)

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

Оффлайн zCirill

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 118
Добрый день.

Есть астериск на котором летит debug в лог. В день примерно 1.2-2.0 гига.
Надо отлавливать определенные события и делать с ними всякое.

Корректно ли сделать tail -f с проверкой if прилетающих строк на события?

типа tail -f | while read n; do
             if [ парсинг строки совпал с error ]; then blabla
             elseif [ парсинг строки совпал и тд

Или правильнее ротировать лог каждые пять минут, проверять получившийся кусок и проверять следующий?
 

Оффлайн Malaheenee

  • Ветеран
  • *****
  • Сообщений: 2565
  • Учтите, мы можем дать и вредный совет.
Re: bash скрипт для бесконечного парсинга лога
« Ответ #1 : 09 Ноябрь 2013, 07:06:01 »
Можно воспользоваться watch, если строки с определенными условиями необходимо накапливать.
Debian Sid: XFCE x 1, openbox x 2.
Все мы где-то, когда-то и в чем-то были новичками.
 

Оффлайн zCirill

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 118
Re: bash скрипт для бесконечного парсинга лога
« Ответ #2 : 09 Ноябрь 2013, 08:48:30 »
Можно воспользоваться watch, если строки с определенными условиями необходимо накапливать.
не, мне нужно реагировать на события "отображенные" в логи.

увидел что регистрация отвалилась в таком то транке - делай то то. в другом транке - делай это, два телефона отвалилось - смс туда то.
 

Оффлайн Malaheenee

  • Ветеран
  • *****
  • Сообщений: 2565
  • Учтите, мы можем дать и вредный совет.
Re: bash скрипт для бесконечного парсинга лога
« Ответ #3 : 09 Ноябрь 2013, 09:28:23 »
Так логов за 10 секунд может накопиться больше чем на 10 строк. Лучше "покусочный" анализ.
Мы бы для такой задачи воспользовались perl - проще получится. Открытие каждые 5 минут, индекс текущей позиции в переменной, переход на нужную позицию, читаем строки в массив, парсим, выполняем условия, обновили переменную-индекс, закрыли...
« Последнее редактирование: 09 Ноябрь 2013, 09:32:34 от Malaheenee »
Debian Sid: XFCE x 1, openbox x 2.
Все мы где-то, когда-то и в чем-то были новичками.
 

Оффлайн smallNix

  • Местный житель
  • ***
  • Сообщений: 129
Re: bash скрипт для бесконечного парсинга лога
« Ответ #4 : 11 Ноябрь 2013, 00:06:53 »
А не проще на С/С++ написать парсер и гонять его в режиме демона? Лог не пустой - парсим, ели нет данных спим секунду.  :-\
Кто-то же должен что-то делать...
 

Оффлайн zCirill

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 118
Re: bash скрипт для бесконечного парсинга лога
« Ответ #5 : 11 Ноябрь 2013, 20:23:10 »
А не проще на С/С++ написать парсер и гонять его в режиме демона? Лог не пустой - парсим, ели нет данных спим секунду. 

возможно проще, если бы я умел писать на C/C++  :)

вообщем сделал "каркас", работает.

делаем пид для последующего убийства скрипта, функции делающие что то, и в цикле проверям строку на совпадения

echo $$ > /var/run/log.analyser.pid

SLC () {
logger 'CONNECTION'
}

SLD () {
logger 'DISCONNECTED'
}

tail -f /var/log/asterisk/full | while read n; do
if [[ $n =~ connection$ ]] ; then SLC && continue
elif [[ $n =~ disconnected$ ]] ; then SLD
fi;

done


работает на ура. периодически прилетает в лог прилетает 20к строк (последствия дебага перезагрузки приложения) переваривает за 5 секунд с загрузкой одного ядра corei5 3200 ghz, на 46 процентов
logrotate перед вращением /var/log/asterisk/full убивает скрипт по пиду, потом запускает скрипт снова.

ЗЫ
регулярки сила, сначала я сделал проверки через echo лала
   if [ "`echo $n | grep -o 'connection$'`" = "connection" ]; then SLC && continue
   elif [ "`echo $n | grep -o 'disconnected$'`" = "disconnected" ]; then SLD
и в таком варианте 20к строк лопатит за 50 секунд. что весьма огорчительно (учитывая, что в рабочем скрипте будет 7 проверок), но потом мне показали как сравнивать через встроенные средства bash - и хурра, шевелится )
 

Оффлайн rayanAyar

  • Старожил
  • ****
  • Сообщений: 538
  • Jabber: rayanAyar@jabber.ru
Re: bash скрипт для бесконечного парсинга лога
« Ответ #6 : 12 Ноябрь 2013, 04:24:06 »
есть ещё "tail -F"
 

Оффлайн zCirill

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 118
Re: bash скрипт для бесконечного парсинга лога
« Ответ #7 : 12 Ноябрь 2013, 12:26:32 »
есть ещё "tail -F"

век живи, читай мануал. спасибо.
 

Русскоязычное сообщество Debian GNU/Linux

Re: bash скрипт для бесконечного парсинга лога
« Ответ #7 : 12 Ноябрь 2013, 12:26:32 »


Теги:
 

арифметика с временем на bash [РЕШЕНО]

Автор A_STAS

Ответов: 8
Просмотров: 6358
Последний ответ 02 Апрель 2013, 21:47:06
от A_STAS
Создание меню на bash

Автор letnab

Ответов: 18
Просмотров: 4175
Последний ответ 14 Сентябрь 2014, 13:23:47
от letnab
bash script - ошибка перехода в каталог с тильдой

Автор sunjob

Ответов: 18
Просмотров: 2402
Последний ответ 27 Октябрь 2015, 21:43:47
от vic5710
bash не инициализируются масивы

Автор starlayt

Ответов: 8
Просмотров: 1479
Последний ответ 23 Май 2014, 11:11:30
от starlayt
bash xargs и пробелы в именах )

Автор zCirill

Ответов: 3
Просмотров: 1365
Последний ответ 25 Март 2015, 12:33:14
от Leo