ausearch 不支持直接用 --pid 参数过滤崩溃事件,必须先配置 auditd 规则捕获关键行为,再结合时间窗口和信号事件(如 sigsegv)定位 pid 轨迹。

ausearch 本身不支持 --pid 或 -p 参数直接按 PID 过滤崩溃事件,更无法“一秒内剥离安全轨迹”——这是对工具能力的常见误解。它查的是 auditd 记录的系统调用日志(audit log),而微服务崩溃本身(如进程 segfault、OOM kill、JVM crash)默认不会被 auditd 自动捕获为完整安全上下文,除非你提前配置了针对性规则。
真正可行的做法,是分两步走:先确保关键行为被记录,再用 ausearch 精准提取。重点不在参数炫技,而在前置埋点和逻辑聚焦。
一、确认 auditd 是否已捕获该微服务的关键动作
崩溃前的敏感操作(如 execve 启动、openat 加载配置、connect 建连、mmap 映射可疑内存)才是安全轨迹的核心。需检查是否已配置对应规则:
# 查看当前加载的规则(重点关注该微服务启动路径或所属用户) sudo auditctl -l | grep -E "(bin/java|/opt/myapp|uid=1001)" # 示例:为某 Java 微服务添加启动与网络行为监控 sudo auditctl -a always,exit -F path=/usr/bin/java -F perm=x -F key=java-exec sudo auditctl -a always,exit -F arch=b64 -S connect -F uid=1001 -F key=svc-net
⚠️ 若无此类规则,
ausearch -p <pid></pid>即使能运行,也大概率返回空——因为 auditd 根本没记这个 PID 的任何事。
二、用 PID 关联轨迹的正确姿势
假设你已知崩溃发生时刻(比如 2026-05-19 00:10:22),且 auditd 正在运行,可这样操作:
-
先定位崩溃瞬间的系统级信号事件(最可靠起点)
# 查找该秒内所有 SIGSEGV/SIGKILL/SIGTERM 记录(含 PID) sudo ausearch -m avc,syscalls -ts 00:10:22 --raw | aureport -f -i | grep -E "(SEGV|KILL|TERM)" # 或直接查 signal 系统调用 sudo ausearch -m signal -ts 00:10:22 -i
-
再反向关联该 PID 的完整生命周期(需规则已启用)
# 获取崩溃时的 PID(例如 12345),然后查它最近 60 秒的所有审计事件 sudo ausearch -p 12345 -ts recent --start 60s -i | head -n 50 # 输出含 execve、open、connect、write 等关键行为,构成“轨迹链”
三、加速分析的实用技巧
-
加
-i参数:自动解析 UID/GID/系统调用号为可读名(必须有/etc/passwd等本地映射)。 -
配合
aureport聚合:# 快速生成该 PID 的行为摘要 sudo ausearch -p 12345 -i | aureport -f -x -i --key java-exec
-
避免卡顿:加
--start today或精确时间范围,不查全量日志;日志轮转后及时归档。
真正“一秒内完成”,靠的不是单条命令多快,而是:
✅ 提前部署好精准 audit 规则
✅ 用时间窗口(-ts)代替盲目扫全量
✅ 从信号事件切入,而非幻想 ausearch -p 能自动回溯崩溃
没有埋点,就没有轨迹;没有时间锚点,就没有效率。











