多服务器日志应通过 rsyslog/tcp+tls 统一转发至日志服务器,配置 $actionqueuetype linkedlist 和时间同步;容器需显式设 $localhostname;审计日志需 auditd+rsyslog 链路打通并规整字段防 es 卡顿。
多服务器日志怎么统一写到一个地方?
直接用远程 syslog 或日志收集器(比如 rsyslog + syslog-ng)转发,别自己写脚本轮询 scp。自建同步逻辑在服务重启、网络抖动、时钟不同步时极易丢日志,且无法保证顺序。
常见错误现象:Connection refused(目标端口没开)、Message too long(UDP 截断)、Permission denied(SELinux 或文件权限拦了 socket)。
- 生产环境优先走 TCP + TLS,避免 UDP 丢包和伪造
-
rsyslog的$ActionQueueType LinkedList和$ActionResumeRetryCount -1必须配,否则网络断几秒就丢一批日志 - 所有服务器的
/etc/rsyslog.conf里加一行:*.* @@log-server:514(双 @ 表示 TCP) - 时间必须同步:
chronyd或ntpd要跑稳,不然审计回溯时序全乱
集中式日志里如何区分是哪台服务器的操作?
不能只靠 IP,NAT、负载均衡、容器动态 IP 都会让来源不可靠。得靠日志内容里的主机标识字段,且这个字段要由客户端主动注入,不能依赖服务端解析。
使用场景:排查某个 sudo 操作是谁在哪台机器上执行的;定位某次配置变更发生在哪台节点。
- Linux 系统日志默认带
hostname,但容器内常为空,需在rsyslog配置中显式设置:$LocalHostname your-app-node-03 - 应用日志(如 Python 的
logging)要手动加host字段:logger.info("user login", extra={"host": os.getenv('HOSTNAME', 'unknown')}) - 避免用
%HOSTNAME%模板变量——它取的是 rsyslog 进程启动时的 hostname,容器重启后可能没更新
审计日志怎么防篡改又保留原始操作上下文?
核心矛盾:日志要防删改,但又要能查到命令行、用户、TTY、进程树这些上下文。光靠 auditd 不够,它不记录命令参数;光靠 shell history 更不行,它可被绕过、清空、不实时。
关键点:把 auditd + bash audit plugin + rsyslog 三者链路打通,且所有环节启用完整性校验。
- 开启
auditd的augenrules --load并加载规则:-a always,exit -F arch=b64 -S execve -k exec - 在
/etc/audit/rules.d/加规则文件,确保auditctl -s | grep enabled输出为enabled 1 -
rsyslog转发前必须启用$ActionFileDefaultTemplate RSYSLOG_ForwardFormat,否则audit日志的 key-value 结构会被打平成纯文本,丢失exe="/usr/bin/sudo"这类关键字段 - 不要用
logger命令手动生成审计日志——它没有auditd的 syscall 级捕获能力,sudo 提权操作会漏掉
为什么 elasticsearch + filebeat 架构查审计日志总卡顿?
不是 ES 性能差,是日志字段没规整、查询没收敛。审计日志里大量高基数字段(如 pid、uid、comm)不做处理,一次模糊查询就扫全量 shard。
性能影响:单条 sudo -u admin /bin/bash 操作在 ES 里生成 3~5 条不同 type 的日志(exec、cwd、path),不聚合根本没法回溯完整动作链。
- filebeat 的
processors必须做字段裁剪:drop_fields删掉agent.hostname(已由host.name覆盖)、input.type(固定为log) - ES index template 中,对
auditd.key、auditd.exe这类字段设为"index": false,只用于聚合,不参与全文检索 - 用
auditd的-F key=auth规则给登录类事件打标,Kibana 里直接按auditd.key: "auth"过滤,比搜message: "sshd"快一个数量级
最易被忽略的一点:所有服务器的 auditd 日志路径(/var/log/audit/audit.log)必须用 filebeat 的 close_inactive: 5m 关闭,否则文件句柄泄漏,跑一周后采集停摆。










