Разбор журналов Nginx - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь использовать Python для анализа файла журнала ошибок Nginx, чтобы определить, произошло ли что-то за последние 15 минут, а затем сделать некоторые вещи, основываясь на этом.

Мне пока нечего показать, потому что я совершенно не уверен, как это сделать.У меня остальная часть сценария выполнена в том смысле, что он делает все, что мне нужно, за исключением анализа файла журнала.Я посмотрел Google и на SO, но не нашел ничего, что могло бы мне помочь.Я понял, как проверить последние, скажем, 10 строк, но это не решает проблему времени.

Я надеюсь, что кто-то может дать мне какое-то руководство.Или пример того, как разобрать файл журнала, включая время и сообщение об ошибке *, показанное ниже как error I need to find

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

Это пример записи в файле журнала, который мне нужен, чтобы найти

2019/03/15 14:22:59 [error] 14064#0: <error I need to find>, client: XXX.XXX.XXX.XXX, server: example.com, request: "POST /hello", host: "example.com"

1 Ответ

2 голосов
/ 06 июня 2019

Вы можете использовать шаблон регулярного выражения, чтобы найти различные части журналов, которые вас интересуют. Вы можете изолировать различные части, используя круглые скобки ( и ), в «группы». Например, если вас интересует дата и сообщение об ошибке строки в файле журнала, вы можете использовать модуль Python * re, например:

import re
pattern = `^(\d+/\d+/\d+ \d+:\d+:\d+)\s+\S+\s+\S+\s+(.+), client`
match = re.search(line, pattern) # where line is a single line in the log
date_time = match.group(0)
error_message = match.group(1)

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

Поскольку вас интересуют только журналы за последние 15 минут, вы можете использовать другое регулярное выражение или модуль datetime Python для анализа даты и сравнения ее с текущим временем. Вы также можете сделать комбинацию из двух и написать менее сложный шаблон, который исключит явно старые журналы перед преобразованием даты в объект datetime.

Чтобы создать объект datetime из строки даты, которую вы получили выше, вы можете использовать метод datetime.strptime. Он разбирает строку в datetime объект в заданном формате. Вы можете указать формат, используя директивы, перечисленные здесь . Вы можете написать такой метод, чтобы проверить, находится ли строка даты за последние 15 минут:

from datetime import datetime, timedelta

MAX_DIFF = timedelta(minutes=15)
DATE_FORMAT = "%Y/%m/%d %H:%M:%S"  

def is_recent_date(date_string):
    current_time = datetime.now() 
    date_object = datetime.strptime(date_string, DATE_FORMAT)
    diff = current_time - date_object
    return diff < MAX_DIFF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...