Найти - Пользователи
Полная версия: парсер лога
Начало » Python для новичков » парсер лога
1 2
Dalandis
Добрый день.

Прошу помощи в таком вопросе.
Хочу распарсить лог nginx.

Хочу делать так. Читаем лог nginx и из каждой строки выбираем:

1. IP с которого пришел запрос (177.164.64.151)
2. Дату и время (21/Aug/2013:03:26:26)
3. Домен (domain.ru)
4. Тип запроса, пост или гет (GET)
5. Код ответа (200)

Далее все выбранное должно записаться в базу.

Требуется помощь такого характера: подскажите, пожалуйста, с помощью чего лучше это реализовать? Насколько это будет тормозить?
Полезные ссылки по теме очень приветствуются.

Пример строки лога:
177.164.64.151 - - domain.ru GET /layouts/anc/prodam-blanki-osago-2d.html HTTP/1.1 200 4133 “-” "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)“ ”-" 8.152-6.924
wbt
apt-cache show python-logsparser

Package: python-logsparser
Source: pylogsparser
Version: 0.4-1
Architecture: all
Depends: python2.7 | python2.6, python (>= 2.6.6-7~), python (<< 2.8), python-lxml, python-tz, python-geoip
Description-en: Python library for log parsing, tagging and analysis.
Pylogsparser is a library that can be used to parse log lines and extract
various metadata out of them according to known log formats. The library
is shipped with several default log formats, such as Syslog, Apache, sshd and
many others. It is also possible to define and use your own log formats with
the library, as XML definition files.
Homepage: http://www.wallix.org/pylogsparser-project/
lorien
> Требуется помощь такого характера: подскажите, пожалуйста, с помощью чего лучше это реализовать?

Вам нужен модуль re: http://docs.python.org/2/library/re.html
Для записи в БД можете использовать модули mysql-python (MySQL) или psycopg2 (Postgres)

> Насколько это будет тормозить?

Зависит от настроек вашей БД, если логов много, может тормозить вставка записей в БД. Если не нужна какая-то универсальность сильная, можно проводить импорт в два этапа.
Парсинг логов и подготовка CSV-файла. И следующим этапом импорт CSV средставами БД (LOAD DATA INFILE в MySQL, или COPY в Postgres)
Dalandis
К сожалению так и не понял как использовать “python-logsparser”, но установил.
Вы уж простите, но совсем новичок, в том числе и в программировании вообще. Если есть, то дайте, пожалуйста, ссылки.


Я пытаюсь делать приблизительно так.

str = fopen('access.log')
line = str.readline()
while line:
тут каким то образом обработать строку. видимо с помощью регулярок.
и записать в базу. на данный момент хочу распарсить строку, а потом уже записывать в базу пытаться.
или может быть разбить строку и сделать из нее список, элементы ведь на своих местах каждый раз?


ilnur
я вот так парсил
       log_ = os.path.join(settings.ROOT_PATH, '../logs', 'nginx_access.log')
        if os.path.exists(log_):
            with open(log_) as log:        
                for i in log:
                    stroka = re.findall(r'(\d+.\d+.\d+.\d+) (\w+|\-) (\w+|\-) \[(.+)\] '
                                     r'\"(.+)\" (\d+) (\d+) \"(.*)\" \"(.*)\"', i)[0]
                    # ip nd nd time path code size nd brouser
                    AccessVisiters(
                        ip=stroka[0],
                        nd1=stroka[1],
                        nd2=stroka[2],
                        date=datetime.datetime.strptime(stroka[3].split(' ')[0],
                                                        '%d/%b/%Y:%H:%M:%S'),
                        path=stroka[4],
                        code=int(stroka[5]),
                        size=int(stroka[6]),
                        nd3=stroka[7],
                        brouser=stroka[8]).save()
grice88
так проще же можно…правда переделай для себя
with open('/var/log/syslog', 'r') as logfile:
    for line in logfile.readlines():
        if 'USB' in line:
            print line
Dalandis
На данный момент, не очень понятно как записать распарсенные строки в базу.

Выше предлагался вариант с CSV файлом. С ним около миллиона строк пишется довольно быстро.

Возможен ли вариант с транзакцией, не используя какие либо дополнительные файлы?
ilnur
а в чем проблема? Парсиш лог и пишешь не в файл, а сразу в БД
Dalandis
Если не сложно, напишите, пожалуйста, пример. Проблема в том, что никак не разберусь с DBI и транзакциями, через эту обертку.

lorien
Что такое DBI?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB