jumpserver命令记录膨胀问题

一.背景

    jumpserver堡垒机针对只是接管ssh来说,正常操作Linux的指令记录应该不会太多,每天有个几千条都已经算很多了。所以默认jumpserver采用MySQL作为存储介质本身也没啥问题。但是我们使用jumpserver对【MySQL应用】进行了托管,导致查询SQL记录以及使用例如DBeaver这样的客户端工具会在后台发送一些查询SQL如校验mysql连接是否已经断开、连接情况频繁的SQL语句等等。导致mysql的terminal_command表会迅速膨胀,terminal_command表有了将近1000w左右的数据量。

    具体表现形式,就是查看【审计-命令记录】严重会导致卡死,我们遇到的就是这种场景。

    仔细查看jumpserver官方文档,其实能够解决这个问题。既然针对这种存储大量数据的问题,MySQL自然会遇到性能瓶颈,那么官方还提供了Elasticsearch的存储方案,针对这种海量文本数据,Elasticsearch就能发挥其优势。我们对不同的jumpserver组件可以采用不同的存储方案。 例如,【ssh】如果命令增长不是很猛,那么存MySQL其实OK的. 但是例如托管【MySQL数据库应用】这种场景,可以使用Elasticsearch存储介质。

二.具体操作

1.系统设置->终端设置->命令存储

2.新建命令存储Elasticsearch

3.输入ES相关信息保存


    可以按天分索引(index), 定义索引前缀即可,这样后期可以方便清理和删除index, 例如清理3个月以前的数据,那么只需要删除相应日期的index即可。

4.更改各组件配置的后端存储方式


    例如我这里更新KOKO组件【管理SSH的组件】、Magnus【管理MySQL数据库应用的组件】设置命令存储的介质是Elasticsearch类型

5.验证Elasticsearch是否写入数据


    已经有了以jumpserver为前缀,以日期作为分隔的index,并且已经有对应数据

6.查看审计记录,已经很流畅

7.terminal_command表truncate清空

    这个看个人情况而定,因为我把SSH和MySQL应用的命令都存储到Elasticsearch了,数据库这张表已经有了1000w数据,考虑到没什么审计价值了,并且页面基本加载不出来,我就直接清空了。

8.定期清理功能


定期清理功能也可以设置一下时间,要不然这些命令会一直往数据库堆积,占用空间。 其实一般存3个月或者6个月基本可以了。