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
,即实际日志消息写入的文件。此插件是一个复杂的插件示例,它确实是一个处理过程,也是引用其他类型访问日志处理的良好起点。