Cassandra 3.11无原生审计日志,如何启用并对接Imperva Sonar?
针对Cassandra 3.11适配Imperva Sonar的审计日志解决方案
一、修复ECAudit配置使其生效并适配Sonar格式
ECAudit是Cassandra 3.x生态中成熟的审计插件,你遇到的未生效问题大概率是配置环节遗漏,按以下步骤重新部署配置:
1. 插件部署校验
- 下载对应c3.11分支的ECAudit jar包,拷贝到所有Cassandra节点的
lib/目录下 - 重启所有节点,查看启动日志,确认无
ecaudit相关的加载报错
2. 核心配置调整(cassandra.yaml)
修改文件中的审计管理器配置,同时定义适配Sonar的日志输出格式:
audit_manager: class_name: com.ericsson.bss.cassandra.ecaudit.AuditManager parameters: # 配置审计范围:记录所有DDL/DML/登录操作,可按需缩小范围 audit_filter_class_name: com.ericsson.bss.cassandra.ecaudit.filter.AllowAllAuditFilter logger: class_name: com.ericsson.bss.cassandra.ecaudit.logger.Slf4jAuditLogger parameters: # 自定义日志格式,匹配Sonar所需的字段顺序与分隔符(需提前确认Sonar的解析规则) pattern: "%d{ISO8601} | %client_ip | %user | %operation_type | %status | %query"
3. 日志框架定向配置(logback.xml)
将审计日志输出到独立文件,避免与Cassandra其他日志混淆,便于Sonar采集:
- 添加专属appender:
<appender name="AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${cassandra.logdir}/audit.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${cassandra.logdir}/audit.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <maxFileSize>100MB</maxFileSize> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> <!-- 仅输出ECAudit定义的格式,避免额外日志前缀干扰Sonar解析 --> </encoder> </appender>
- 绑定ECAudit日志器到该appender:
<logger name="com.ericsson.bss.cassandra.ecaudit.logger.Slf4jAuditLogger" level="INFO" additivity="false"> <appender-ref ref="AUDIT" /> </logger>
- 重启节点后,执行CQL操作(如CREATE、INSERT),检查
audit.log是否有符合格式的日志输出
二、替代方案:Cassandra原生Query Logger适配
若ECAudit仍无法满足需求,可启用Cassandra原生Query Logger并调整格式适配Sonar:
1. 启用Query Logger(cassandra.yaml)
query_log_enabled: true query_log_options: log_level: INFO logger_class: org.apache.cassandra.service.QueryLogger # 自定义格式,包含Sonar所需的客户端IP、用户名、操作类型等核心字段 log_format: "%t | %s | %u | %c | %e | %q" # 字段说明:%t=时间戳, %s=客户端IP, %u=用户名, %c=操作类型, %e=执行状态, %q=CQL语句
2. 日志输出配置
同样在logback.xml中添加独立appender,将Query日志定向到指定文件,供Sonar采集。
三、适配Imperva Sonar的关键注意事项
- 格式严格匹配:提前确认Sonar的日志解析规则,确保审计日志的字段顺序、分隔符、字段含义完全符合要求
- 全节点覆盖:所有Cassandra节点必须配置相同的审计规则,避免遗漏集群内的操作日志
- 权限保障:确保Sonar的日志采集进程拥有Cassandra日志目录的读取权限
- 验证测试:配置完成后,执行多种类型的CQL操作,检查Sonar是否能正确识别并展示审计事件
内容的提问来源于stack exchange,提问作者Basel Maged
相关产品推荐
相关产品推荐

