Logstash需通过rsyslog将auditd二进制日志转为JSON格式后再采集;配置rsyslog启用imaudit模块并定义JSON模板输出到文件;Logstash用json codec读取,再通过dissect+kv提取字段,date转换时间戳,mutate清洗重命名;最终输出至Elasticsearch供Kibana构建安全大屏。

Logstash 本身不直接解析 auditd 的原始二进制日志(/var/log/audit/audit.log 是文本格式,但 auditd 默认输出的是二进制流到 /dev/audit),所以必须先让 auditd 输出**可读、结构化、机器友好的日志格式**,再由 Logstash 采集。核心路径是:auditd → rsyslog(转为JSON)→ Logstash(接收+增强)→ Elasticsearch → Kibana大屏。
一、让auditd日志变成结构化输入
auditd 自身不生成 JSON,需借助 rsyslog 做格式转换。关键是在 rsyslog 中启用 imaudit 模块,并用模板将 audit 事件转成标准 JSON:
- 确认已安装
rsyslog-audit或对应模块(如 CentOS/RHEL:运行yum install rsyslog-audit) - 在
/etc/rsyslog.d/20-audit-json.conf中添加:
module(load="imaudit")
template(name="AuditJSON" type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"")
property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"event_type\":\"audit\")
constant(value=",\"message\":\"")
property(name="msg" format="json")
constant(value="\"}")
}
if $programname == 'kernel' and $msg contains 'audit(' then {
action(type="omfile" file="/var/log/audit/audit-structured.json" template="AuditJSON")
stop
}
- 重启服务:
sudo systemctl restart rsyslog auditd - 验证:查看
/var/log/audit/audit-structured.json,应出现类似:
{"@timestamp":"2026-05-18T23:12:04.123456+08:00","event_type":"audit","message":"type=SYSCALL msg=audit(1747599124.123:1234): arch=c000003e syscall=2 success=yes exit=3 a0=7fff12345678 a1=0 a2=1 a3=7fff12345670 items=1 ppid=1234 pid=5678 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=1 comm=\"ls\" exe=\"/usr/bin/ls\" key=\"privileged-commands\""}
二、Logstash配置:接收并提取关键安全字段
Logstash 不需要再用 grok 解析整行——因为 audit 日志 message 字段本身就是 key=value 形式。推荐使用 kv 过滤器 + dissect 提取 type 和时间戳,再用 mutate 清洗字段名:
配置文件 /etc/logstash/conf.d/audit-input.conf:
input {
file {
path => "/var/log/audit/audit-structured.json"
start_position => "end"
sincedb_path => "/var/lib/logstash/audit.sincedb"
codec => "json"
}
}
filter {
if [message] =~ /^type=/ {
# 提取 type=SYSCALL、msg=audit(...) 等头部信息
dissect {
mapping => { "message" => "type=%{audit_type} msg=audit(%{audit_epoch}.%{audit_microsec}:%{audit_seq}): %{audit_rest}" }
}
# 解析 key=value 部分
kv {
source => "audit_rest"
field_split => " "
value_split => "="
include_brackets => false
}
# 转换时间戳
date {
match => [ "audit_epoch", "UNIX" ]
target => "@timestamp"
}
# 清理冗余字段
mutate {
remove_field => ["message", "audit_rest", "audit_epoch", "audit_microsec", "audit_seq"]
rename => { "audit_type" => "audit.type" "comm" => "process.name" "exe" => "process.path" "auid" => "user.auid" "uid" => "user.uid" "pid" => "process.pid" }
}
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "audit-%{+YYYY.MM.dd}"
}
}
三、Kibana安全大屏关键指标设计
索引模式设为 audit-* 后,在 Kibana 中可快速构建以下安全可视化:
-
高危操作TOP10:用
audit.type做饼图或水平条形图(筛选SYSCALL、USER_AUTH、CONFIG_CHANGE) -
特权进程调用热力图:Y轴
process.name,X轴小时,色阶为计数(加 filter:uid: 0 OR euid: 0) -
异常登录趋势:折线图,聚合
event where audit.type : "USER_LOGIN" and result : "failed",按分钟统计 -
敏感文件访问追踪:表格视图,显示
path、comm、uid、@timestamp,加 filter 如path: "/etc/shadow" OR path: "/root/.ssh/"
所有图表加入「时间范围选择器」和「全局搜索栏」,即可支撑 SOC 实时监控看板。

















