【问题标题】:create script to analyze log file创建脚本来分析日志文件
【发布时间】:2020-10-02 12:11:52
【问题描述】:

我正在尝试像这样分析由 socketio 创建的日志文件:

2020-06-12 14:40 +02:00: * 2020-06-12T12:40:44.728Z +   connect viewer: xxxxxx room: e4c60 viewers actuel [ e4c60: 370, '44c0d': 1 ] socket.id: /viewers#qnm6nJtDSSVA2N-oAAO0
...
2020-06-12 15:51 +02:00: * 2020-06-12T13:51:39.889Z - disconnect viewer: xxxxxx room: e4c60 viewers actuel [ e4c60: 26, e3fa1: 3, '44c0d': 1 ] socket.id: /viewers#qnm6nJtDSSVA2N-oAAO0
...
2020-06-12 15:51 +02:00: * 2020-06-12T13:51:46.978Z +   connect viewer: vvvvvvv room: e4c60 viewers actuel [ e4c60: 27, e3fa1: 3, '44c0d': 1 ] socket.id: /viewers#w03eaaUVq6mL2SzPAAS1
...
2020-06-12 15:58 +02:00: * 2020-06-12T13:58:01.377Z - disconnect viewer: vvvvvvv room: e4c60 viewers actuel [ e4c60: 23, e3fa1: 3, '44c0d': 1 ] socket.id: /viewers#w03eaaUVq6mL2SzPAAS1

我想要的是让套接字正常运行并最终获得平均值。

因此,我需要捕获:date + "socket.id" 值,然后与日期相同的 socket.id 断开连接......最后以秒为单位计算两个日期之间的差异;房间名称也很重要,因为我最终需要每个房间的结果

我需要对日志文件中的每个条目都这样做,最后取所有“差异”以在几秒钟内得到平均值

如果您知道如何使用任何语言(bash、python...)轻松完成此操作 谢谢

【问题讨论】:

  • 您忘记添加代码或您为解决问题而尝试过的操作。
  • 嗯...几乎什么都没有,因为在尝试使用少量 sed/awk/grep 时,它并不能解决所有最大的问题是捕获已经解析的信息然后执行下一个条目
  • 考虑查看How do I ask a good question,然后回来更新问题;特别是,显示示例输入、您尝试过的代码、不正确的输出(来自您的代码)以及所需的(正确的)输出

标签: python bash parsing logging socket.io


【解决方案1】:

这个 python 代码应该可以工作。

from datetime import datetime

status_dict = {}
diff_list = []

with open('test_data.txt', 'r') as infile:
    for line in infile:
        date = datetime.strptime(line.split(' ')[4], '%Y-%m-%dT%H:%M:%S.%fZ')
        socket_id = line.split('#')[1].strip()
        if 'connect' in line:
            status = 'connect'
        else:
            status = 'disconnect'
        if socket_id in status_dict:
            diff = (date - status_dict[socket_id]['date']).total_seconds()
            diff_list.append(diff)
            print(f'Socket ID: {socket_id} closed after {diff} seconds.')
        else:
            status_dict[socket_id] = {'date':date, 'status':status}

print(f'Average connected time: {sum(diff_list)/len(diff_list)} seconds.')

您提供的数据的输出如下所示:

Socket ID: qnm6nJtDSSVA2N-oAAO0 closed after 4255.161 seconds.
Socket ID: w03eaaUVq6mL2SzPAAS1 closed after 374.399 seconds.
Average connected time: 2314.78 seconds.

我相信有很多方法可以做得更好,但如果数据与您发布的示例一致,这应该对您有用。

【讨论】:

  • 感谢 FranksNBeans 我需要再次调整它,但它很棒,它接近我需要的再次感谢
猜你喜欢
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多