gpt4 book ai didi

python - 解析 Nginx 日志

转载 作者:行者123 更新时间:2023-12-05 04:00:13 48 4
gpt4 key购买 nike

我正在尝试使用 Python 来解析 Nginx 错误日志文件以确定过去 15 分钟内是否发生了某些事情,然后根据它做一些事情。

我还没有什么重要的东西可以展示,因为我完全不确定如何做到这一点。我已经完成了脚本的其余部分,从某种意义上说,它完成了我需要的一切,除了解析日志文件。我看过谷歌和 SO 但没有找到任何可以帮助我的东西。我想出了如何检查最后说的 10 行,但这并没有解决时间问题。

我希望有人能给我一些指导。或如何解析包含时间和错误消息的日志文件的示例 *在下面显示为 error I need to find

我知道没有代码,所以通常需要代码,但对于脚本的这一部分我没有什么可展示的,而且我认为没有更好的堆栈交换位置来问这个问题。对于软件工程来说似乎有点基础。

这是我需要找到的日志文件条目的示例

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"

最佳答案

您可以使用正则表达式模式来查找您感兴趣的日志的不同部分。您可以使用圆括号、(),进入“群体”。例如,如果您对日志文件中某一行的日期和错误消息感兴趣,您可以使用 Python 的 re。像这样的模块:

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

您可以看到我使用的模式的每个部分是做什么用的,并尝试使用它 here .

由于您只对最近 15 分钟的日志感兴趣,您可以使用另一个正则表达式或 Python 的 datetime模块解析日期并将其与当前时间进行比较。您还可以将两者结合起来,编写一个不太复杂的模式,在将日期转换为 datetime 对象之前消除明显的旧日志。

要从上面获得的日期字符串创建一个datetime 对象,您可以使用datetime.strptime方法。它将字符串解析为给定格式的 datetime 对象。您可以使用列出的指令指定格式 here .您可以编写这样的方法来检查日期字符串是否在过去 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

关于python - 解析 Nginx 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56480343/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com