389ds LDAP容器日志管道疑问及审计日志配置咨询
关于389ds容器LDAP服务的两个日志相关问题解答
疑问1:cat <> /tmp/stdout-fifo > /dev/stdout命令的作用
这个命令用于持续监听并转发FIFO管道内容到容器标准输出,具体拆解:
<>是Bash的特殊重定向符,作用是以读写模式打开/tmp/stdout-fifo。FIFO管道的特性是:若没有读端打开,写端写入时会阻塞甚至报错,这个操作能保持FIFO始终处于打开状态,避免389ds写入审计日志时出现异常。cat从打开的FIFO中读取内容,再通过> /dev/stdout将内容输出到容器标准输出。这样Kubernetes的日志收集组件(如Promtail、Fluentd)就能捕获389ds的审计日志,统一纳入集群日志体系。
疑问2:如何配置审计日志同时输出成功/失败事件到指定文件,且保留现有FIFO配置
要实现需求,需从两个层面调整配置,确保不影响现有nsslapd-auditlog的FIFO输出:
步骤1:调整审计日志转发逻辑(保留FIFO输出的同时,复制日志到文件)
修改docker-entrypoint-init.d/1-logging.sh中的命令,让FIFO的日志同时输出到容器标准输出和目标审计文件:
# 替换原命令 cat <> /tmp/stdout-fifo | tee /var/log/dirsrv/slapd-dir/audit > /dev/stdout
tee命令会将读取到的内容同时写入指定文件和标准输出,既保留原有FIFO到stdout的转发逻辑,又能将成功审计日志复制到目标文件。
步骤2:确保失败审计日志写入同一文件
- 先确认审计级别包含失败事件,执行以下LDAP修改命令(需使用Directory Manager权限):
ldapmodify -x -D "cn=Directory Manager" -W <<EOF dn: cn=config changetype: modify replace: nsslapd-auditlog-level nsslapd-auditlog-level: all EOF
all会记录所有成功和失败的LDAP操作,你也可以指定具体事件(如bind,modify,add,failure)。
- 修改
nsslapd-auditfaillog指向目标文件:
ldapmodify -x -D "cn=Directory Manager" -W <<EOF dn: cn=config changetype: modify replace: nsslapd-auditfaillog nsslapd-auditfaillog: /var/log/dirsrv/slapd-dir/audit EOF
步骤3:验证权限与生效
- 确保目标审计文件的所有者是389ds运行用户(通常为
dirsrv),避免写入失败:
chown dirsrv:dirsrv /var/log/dirsrv/slapd-dir/audit
- 重载配置(无需重启容器)并验证日志写入情况:
dsconf localhost config reload
内容的提问来源于stack exchange,提问作者AKS
相关产品推荐
相关产品推荐

