LINUX.ORG.RU

Парсинг логов

 , , , ,


0

1

Добрый день Уважаемы форумчане. Помогите разобраться со следующей задачей, как я понимаю это парсинг логов. Задача следующая: Имеются файл логов: /var/log/ftp_log/vsftpd.log В данном файле имеются данные о загрузке документов на ftp сервер с параметрами в каждой строке UPLOAD и id (XXXX) партнера. Например: Mar 13 08:19:21 FTPv2 vsftpd[XXXX]: [Vasya] OK UPLOAD: Client «192.168.0.77», «/load/551489.txt», 55170 bytes

На сервере имеется имеются каталоги для партнеров куда падает документ: /var/ftp/Partners/XXXX/logs/

Нужно что бы из лога (/var/log/ftp_log/vsftpd.log) выбирались данные по загрузке документов по каждому партнеру на основании признаков UPLOAD и ID партнера (XXXX) и кидались в папку партнера с названием лога: report_HHMM_DDMMYYYY.txt, и так со всеми партнерами. Так же имеется файлик со списком имен всех партнеров, файлик с ID парнеров и файлики в каждом их которых есть путь к папке партнера (файл vasya.txt содержит путь /var/ftp/Partners/XXXX/logs/ где XXXX ID Vasya)

Помогите пожалуйста с решением данной проблемы, как я понимаю проще всего будет написать на python но возможно что и на bash, подскажите в какую стороно двигаться. Заранее благодарю.

Ответ на: комментарий от alozovskoy

Помогите пожалуйста с решением данной проблемы, как я понимаю проще всего будет написать на python но возможно что и на bash, подскажите в какую стороно двигаться. Заранее благодарю.

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

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

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

Я читал ваше сообщение.

Мне проще было бы на python, а кто-то может bash лучше знает, а третий вообще возьмет java. Тут можно сделать на любом ЯП, а удобство это субъективно.

// И вообще я бы какую-нибудь РСУБД использовал, если у вас много файликов со связями между данными в них, sql как раз про это.

alozovskoy ★★★★★ ()

Полезнее установить готовое решение типа greylog.

DonkeyHot ★★★★★ ()

Я бы пошёл таким путём

тестовый vsftpd.log:

Mar 13 08:19:21 FTPv2 vsftpd[XXXX]: [Vasya] OK UPLOAD: Client "192.168.0.77", "/load/1.txt", 55170 bytes
Mar 13 08:19:25 FTPv2 vsftpd[XXXX]: [Vasya] OK UPLOAD: Client "192.168.0.77", "/load/2.txt", 55170 bytes
Mar 13 08:20:10 FTPv2 vsftpd[YYYY]: [Petya] OK UPLOAD: Client "192.168.0.78", "/load/3.txt", 55170 bytes
Mar 13 08:20:20 FTPv2 vsftpd[XXXX]: [Vasia] OK UPLOAD: Client "192.168.0.77", "/load/4.txt", 55170 bytes
Mar 13 08:20:30 FTPv2 vsftpd[YYYY]: [Petya] OK UPLOAD: Client "192.168.0.78", "/load/5.txt", 55170 bytes
Скрипт на awk:
#!/bin/awk -f 

{
        if (match($0, "FTPv2 vsftpd\\[([^]]+)\\]: \\[([^]]+)\\] OK UPLOAD", r))
                print $0 >> r[1] "_report.txt"
}
$ ./ospekt.awk < vsftpd.log
$ cat XXXX_report.txt 
Mar 13 08:19:21 FTPv2 vsftpd[XXXX]: [Vasya] OK UPLOAD: Client "192.168.0.77", "/load/1.txt", 55170 bytes
Mar 13 08:19:25 FTPv2 vsftpd[XXXX]: [Vasya] OK UPLOAD: Client "192.168.0.77", "/load/2.txt", 55170 bytes
Mar 13 08:20:20 FTPv2 vsftpd[XXXX]: [Vasia] OK UPLOAD: Client "192.168.0.77", "/load/4.txt", 55170 bytes
$ cat YYYY_report.txt 
Mar 13 08:20:10 FTPv2 vsftpd[YYYY]: [Petya] OK UPLOAD: Client "192.168.0.78", "/load/3.txt", 55170 bytes
Mar 13 08:20:30 FTPv2 vsftpd[YYYY]: [Petya] OK UPLOAD: Client "192.168.0.78", "/load/5.txt", 55170 bytes

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.