9.4. ds-logpipe.py

命名 pipe 日志脚本可以使用命名的管道替换任何 Directory Server 日志文件(访问、错误和审核)。该管道可以附加到另一个脚本,这些脚本可以在将日志数据发送到输出之前进行处理,例如仅写入与特定模式匹配的行或是特定的事件类型。

使用命名 pipe 脚本提供灵活性:

  • 错误日志级别可以设置非常高地诊断问题,以便仅创建最后几百个或千千日志消息的日志,而不出现性能点击。
  • 可以对消息进行过滤,以便仅使某些相关事件保持相关事件。例如,命名 pipe 脚本只能在访问日志中记录失败的 BIND 尝试,以及其他事件。
  • 脚本可用于在发生事件时发送通知,如添加或删除用户条目或发生特定错误。

有关语法和命令行选项的详情,请查看 ds-logpipe.py(1)man page。

例子

第 7.5 节 “使用名称的 Pipe 替换日志文件” 中涵盖了为命名管道日志记录配置服务器的步骤。

命名管道日志脚本的最基本用法仅指向命名管道。

例 9.12. 基本命名的管道日志脚本

# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe
注意

当脚本退出时(可以是其完成,或因为通过 SIGTERM 或 Ctrl+C 终止的),该脚本会将错误日志的最后 1000 行转储到标准输出。

脚本可以在后台运行,您可以以交互方式监控输出。在这种情况下,命令 kill -1 %1 可用于告知脚本将缓冲区的最后 1000 行转储到 stdout,并在后台继续运行。

例 9.13. 在背景中运行 Named Pipe Log Script

# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe &

要只在脚本退出(或中断)时转储最后 1000 行,并自动将输出保存到文件中,请将脚本输出重定向到用户定义的文件。

例 9.14. 从 Named Pipe Log Script 中保存输出

# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe > /etc/dirsrv/myerrors.log 2>&1

可以将命名 pipe 脚本配置为使用 Directory 服务器进程自动启动和停止。这需要服务器的 PID 文件的名称,以便在脚本运行时使用 -s 参数写入脚本的 PID。服务器的 PID 可以通过指向服务器 PID 文件或提供实际进程 ID 号(如果服务器进程已在运行)来引用。

例 9.15. 指定 Serve PID

# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe --serverpidfile /var/run/dirsrv/slapd-example.pid

可以调用插件来从命名管道读取日志数据,并在其上执行一些操作。

例 9.16. 使用相关插件命名管道日志脚本

# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe --plugin=/usr/share/dirsrv/data/logregex.py logregex.regex="warning"

例 9.16 “使用相关插件命名管道日志脚本” 中,只有包含字符串 警告 的日志行存储在内部缓冲区中,并在脚本退出时打印。

如果没有通过 script 参数传递插件,该脚本只会缓冲 1000 日志行(默认),并在退出后打印它们。脚本提供了两个插件:

  • logregex.py 仅保留与给定正则表达式匹配的日志行。插件参数的格式是 logregex.regex=pattern 以指定要使用的字符串或正则表达式。可以有多个 logregex.regex 参数,它们都被视为 AND 语句。错误日志行必须与所有给定参数匹配。要允许任何匹配的日志行是记录(OR),请在字符串或表达式之间通过 pipe(|)使用单个 logregex.regex 参数。有关正则表达式及其语法的更多信息,请参阅 pcre 或 Python 正则表达式文档。
  • failedbinds.py 日志只会失败 BIND 尝试,因此此插件仅用于访问日志。这需要选项 failedbinds.logfile=/path/to/access.log,即实际日志消息写入的文件。此插件是一个复杂的插件示例,它确实是一个处理过程,也是引用其他类型访问日志处理的良好起点。