![近乎实时地关联会话和 NAT 日志](https://linux22.com/image/771400/%E8%BF%91%E4%B9%8E%E5%AE%9E%E6%97%B6%E5%9C%B0%E5%85%B3%E8%81%94%E4%BC%9A%E8%AF%9D%E5%92%8C%20NAT%20%E6%97%A5%E5%BF%97%20.png)
我有一个用户活动记录器和查询系统,适用于日志事件率非常高的 ISP(5k-10k/秒)。它需要基于一个公共InternalIP
字段关联 Radius/Session 和 NAT Syslog。每个会话都有两个事件 Start 和 Stop。3000 个用户产生的大约 24 小时数据可能达到 2000 万条记录,预计还会增加。
我的解决方案包括针对每种日志类型的 2 个解析和持久代理,使用 Golang 编写,后端为 Postgresql db。我在两方面都遇到了一些问题。即使在内存中缓冲系统日志事件后,解析和存储也无法跟上高数据速率。为了节省空间,我必须将每个会话分组为一个记录,并通过触发器从其他日志中识别 NAT 会话用户。缓冲区占用系统内存,最终进程被终止。由于用户标识和表上的索引,写入 PGSQL 的速度很慢。
为了重新审视我的方法,我想寻找有关如何提高性能的建议。无论我采用哪种方法,我都需要从 Radius 会话日志中识别 NAT 用户,然后再将此数据保存到数据库。