LINUX.ORG.RU

Задачка про логи


0

1

Есть много логов. Нужно эти логи парсить (почти в реальном времени + в дальнейшем с ними производить вычисления ). Есть несколько вариантов:

1) на python написать скрипт в котором в главном потоке через subprocess запускать tail, одновременно запустить несколько обработчиков каждой строки через threads и организовать очередь, в которую главный процесс будет кидать задания, threads будет эти задания брать и обрабабывать. 2) использовать redis + несколько python процессов 3) использовать модный google go (кстати а как он справится с этой задачей ?)


то есть задача в том, что надо хоть за уши,обязательно притянуть python или go?? и обосновать чтобы затем выбить бюджет, создать проект, нанять дизайнера для страницы, оставшееся бабло пропить, и уже потом создать тему «нужен скрипт perl/awk»

MKuznetsov ★★★★★
()

сумма и координаты не указаны

anonymous
()

Что такое «почти в реальном времени»? logstash?

bj
()
Ответ на: комментарий от Jopich

Предложили альтернативу

Так ты школьник! Тогда в джобс.

bj
()
Ответ на: комментарий от Jopich

Задача пропарсить логи с определнной логикой а не их собрать куда-то

syslog-ng умеет парсить логи, складывать их в базу, умеет многопоточность, умеет ими манипулировать (например, менять), может передавать их на дальнейшую обработку внешним скриптам
шах и мат!

zolden ★★★★★
()
Ответ на: комментарий от Jopich

Задача пропарсить логи с определнной логикой

Так вот он это, в общем-то, умеет. Регулярные выражения, и т.п.

а не их собрать куда-то

А по результату парсения с определённой логикой можно и сложить куда-нибудь. Чуть-чуть выдержек:

Destinations:

  fifo/pipe    - This driver sends messages to a named pipe like
                 /dev/xconsole

  program      - This driver fork()'s executes the given program with
                 the given arguments and sends messages down to the
                 stdin of the child.

AS ★★★★★
()
Ответ на: комментарий от zolden

Гм а можно ли syslog-ng научить складывать логи в redis ( через lpush ) ? Точнее не в 1 redis, а в сразу несколько ( ибо в один если писать redis - это будет узким местом ) например разбрасывая по redisам по ip юзера ?

Jopich
() автор топика

У нас все логи идут в rsyslog, а тот, посредством шаблонов, например, кладет данные в mongodb. А с ней отдельные процессы выполняют свою логику

energyclab
()

почти в реальном времени

тогда задача некорректно поставлена, писать надо не в лог, а изначально в систему которая предназначена для взаимодействия или куда-нибудь в БД, а парсить логи в реальном времени - полный бред и будет куча проблем у тебя.

umren ★★★★★
()
Ответ на: комментарий от Jopich

например разбрасывая по redisам по ip юзера ?

Для файлов возможна такая конструкция:

destination d_lan_by_host {
    file( "/var/log/remote/$HOST.log" );
    };
Может быть, что-то такое можно и для редиса. Я только файлами пользуюсь.

AS ★★★★★
()
Ответ на: комментарий от Jopich

В mongodb можно ограничить размер памяти на диске... У нас 7 боевых проектов работают с одной БД и проблем мы не наблюдаем с падением производительности

energyclab
()
Ответ на: комментарий от Jopich

я говорю конкретно про логи которые ты будешь писать на диск и сразу же считывать оттуда, это уже сам по себе костыль, программа должна писать лог сразу куда-то в место, где тебе будет удобно с ними работать без лишнего парсинга.

umren ★★★★★
()
Ответ на: комментарий от zolden

Гм а вопрос след тогда: если например со нескольких серверов логи отправляться с nginx на транспорт типа syslog-ng ( кстати он лучше или хуже того же fluentd ? ) и писать на диск - то что будет в случае есть дисковая система на сервере куда это пишется окажется перегруженной ? логи будут теряться или скапливаться в памяти/буффере или просто с задержкой писаться на диск ? ( последнее предпочтительнее ) ?

Jopich
() автор топика
Ответ на: комментарий от Jopich

вот уж хз, с таким сценарием не сталкивался, поспрашай вышеотписавшихся

zolden ★★★★★
()
10 марта 2015 г.

Уважаемые гуру Logstash подскажите! Есть лог: {«message»:»1353480: CORE-DSS: Mar 10 06:22:06.711: %SEC-6-IPACCESSLOGP: list inside_DSS denied udp 10.22.110.61(60980) -> 255.255.255.255(1947), 1 packet «,»@version»:»1″,»@timestamp»:»2015-03-10T07:11:31.697Z»,»type»:»all_log»,»host»:»10.23.0.200″} На выходе нужно получить 2015-03-10T07:11:31 denied udp 10.22.110.61(60980) -> 255.255.255.255(1947) host 10.23.0.200 Пытаюсь написать filter в конфиге с использованием grok. Не могу разобраться..

Fokrem
()
Ответ на: комментарий от Fokrem

Напиши в отдельную тему и изучи LORCODE, конкретно [code] или [pre]

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.