近乎实时地关联会话和 NAT 日志

近乎实时地关联会话和 NAT 日志

我有一个用户活动记录器和查询系统,适用于日志事件率非常高的 ISP(5k-10k/秒)。它需要基于一个公共InternalIP字段关联 Radius/Session 和 NAT Syslog。每个会话都有两个事件 Start 和 Stop。3000 个用户产生的大约 24 小时数据可能达到 2000 万条记录,预计还会增加。

我的解决方案包括针对每种日志类型的 2 个解析和持久代理,使用 Golang 编写,后端为 Postgresql db。我在两方面都遇到了一些问题。即使在内存中缓冲系统日志事件后,解析和存储也无法跟上高数据速率。为了节省空间,我必须将每个会话分组为一个记录,并通过触发器从其他日志中识别 NAT 会话用户。缓冲区占用系统内存,最终进程被终止。由于用户标识和表上的索引,写入 PGSQL 的速度很慢。

为了重新审视我的方法,我想寻找有关如何提高性能的建议。无论我采用哪种方法,我都需要从 Radius 会话日志中识别 NAT 用户,然后再将此数据保存到数据库。

相关内容