21.3. 配置日志文件

对于所有类型的日志文件,必须配置日志 创建 和日志 删除策略。日志创建策略会在启动新日志文件时设置,并在删除旧日志文件时日志删除策略集。

21.3.1. 启用或禁用日志

默认情况下启用访问和错误日志记录。但是,审计和审计失败日志记录默认是禁用的。
注意
禁用访问日志在某些情况下可能很有用,因为每个 2000 个访问目录都会大约增加 1MB 的日志文件。但是,在关闭访问日志记录前,请考虑此信息可以帮助进行故障排除。

21.3.1.1. 使用命令行启用或禁用日志记录

使用 dsconf config replace 命令修改控制目录服务器日志记录功能的 cn=config 子树中的参数:
  • 访问日志: nsslapd-accesslog-logging-enabled
  • 错误日志: nsslapd-errorlog-logging-enabled
  • 审计日志: nsslapd-auditlog-logging-enabled
  • 审计失败日志: nsslapd-auditfaillog-logging-enabled
例如,要启用审计日志记录,请输入:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-auditlog-logging-enabled=on

21.3.1.2. 使用 Web 控制台启用或禁用日志记录

在 web 控制台中启用或禁用日志记录:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Server Settings 菜单,然后在 Logging 条目下选择要配置的日志类型。
  4. 为所选日志类型启用或禁用日志记录功能。
  5. (可选)设置额外的参数来定义,例如日志轮转或日志删除策略。
  6. 点击 Save

21.3.2. 配置特定于插件的日志记录

要进行调试,您可以为插件执行的操作启用访问和审计日志记录。详情请查看 Red Hat Directory Server Configuration, Command, and File Reference 中的 nsslapd-logAccessnsslapd-logAudit 参数。

21.3.3. 禁用高分辨率日志时间戳

使用默认设置,Directory 服务器会记录带有纳秒精度的条目:
[27/May/2016:17:52:04.754335904 -0500] schemareload - Schema validation passed.
[27/May/2016:17:52:04.894255328 -0500] schemareload - Schema reload task finished.
禁用高分辨率日志时间戳:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-logging-hr-timestamps-enabled=off
注意
禁用高分辨率日志时间戳的选项已弃用,并将在以后的发行版本中删除。
禁用高分辨率日志时间戳后,目录服务器仅记录第二个精度的日志:
[27/May/2016:17:52:04 -0500] schemareload - Schema validation passed.
[27/May/2016:17:52:04 -0500] schemareload - Schema reload task finished.

21.3.4. 定义日志文件轮转策略

要定期归档当前日志文件并创建新日志文件,请设置日志文件轮转策略。您可以使用命令行或 Web 控制台更新 cn=config 子树中的设置。
您可以设置以下配置参数来控制日志文件轮转策略:
访问模式
访问模式对新创建的日志文件设置文件权限。
  • 访问日志: nsslapd-accesslog-mode
  • 错误日志: nsslapd-errorlog-mode
  • 审计日志: nsslapd-auditlog-mode
  • 审计失败日志: nsslapd-auditfaillog-mode
日志的最大数量
设置要返回的最大日志文件数。达到文件数量时,Directory 服务器会在创建新日志文件前删除最旧的日志文件。
  • 访问日志: nsslapd-accesslog-maxlogsperdir
  • 错误日志: nsslapd-errorlog-maxlogsperdir
  • 审计日志: nsslapd-auditlog-maxlogsperdir
  • 审计失败日志: nsslapd-auditfaillog-maxlogsperdir
每个日志的文件大小
以 MB 为单位设置日志文件的最大大小,然后再轮转。
  • 访问日志: nsslapd-accesslog-maxlogsize
  • 错误日志: nsslapd-errorlog-maxlogsize
  • 审计日志: nsslapd-auditlog-maxlogsize
  • 审计失败日志: nsslapd-auditfaillog-maxlogsize
各自创建一个日志
设置日志文件的最长年龄。
  • nsslapd-accesslog-logrotationtime and nsslapd-accesslog-logrotationtimeunit
  • nsslapd-errorlog-logrotationtime and nsslapd-errorlog-logrotationtimeunit
  • nsslapd-auditlog-logrotationtime and nsslapd-auditlog-logrotationtimeunit
  • nsslapd-auditfaillog-logrotationtime and nsslapd-auditfaillog-logrotationtimeunit
另外,您可以使用以下参数轮转日志文件的时间:
  • nsslapd-accesslog-logrotationsynchournsslapd-accesslog-logrotationsyncmin
  • nsslapd-errorlog-logrotationsynchournsslapd-errorlog-logrotationsyncmin
  • nsslapd-auditlog-logrotationsynchour and nsslapd-auditlog-logrotationsyncmin
  • nsslapd-auditfaillog-logrotationsynchournsslapd-auditfaillog-logrotationsyncmin
每个日志文件都以标题开头,用于标识服务器版本、主机名和端口,以简化归档或交换日志文件。例如:
389-Directory/1.4.0.11 B2018.197.1151
server.example.com:389 (/etc/dirsrv/slapd-instance)

21.3.4.1. 使用命令行定义日志文件轮转策略

使用 dsconf config replace 命令修改控制目录服务器日志记录功能的参数。例如,对于错误日志,要设置访问模式 600,以保持最大 2 个,并轮转日志文件大小为 100 MB 或每 5 天,请输入:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-errorlog-mode=600 nsslapd-errorlog-maxlogsperdir=2 nsslapd-errorlog-maxlogsize=100 nsslapd-errorlog-logrotationtime=5 nsslapd-errorlog-logrotationtimeunit=day

21.3.4.2. 使用 Web 控制台定义日志文件轮转策略

21.3.5. 定义日志文件删除策略

如果您设置了删除策略,目录服务器会自动删除旧的 存档文件
注意
如果您设置了日志文件轮转策略,您只能设置日志文件删除策略。目录服务器在日志轮转时应用删除策略。
您可以设置以下配置参数来控制日志文件删除策略:
日志总大小
如果所有访问、错误、审计或审计失败日志文件的大小都增加配置的值,则会自动删除最旧的日志文件。
  • 访问日志: nsslapd-accesslog-logmaxdiskspace
  • 错误日志: nsslapd-errorlog-logmaxdiskspace
  • 审计日志: nsslapd-auditlog-logmaxdiskspace
  • 审计日志: nsslapd-auditfaillog-logmaxdiskspace
可用磁盘空间小于
当可用磁盘空间达到这个值时,最旧的存档文件会被自动删除。
  • 访问日志: nsslapd-accesslog-logminfreediskspace
  • 错误日志: nsslapd-errorlog-logminfreediskspace
  • 审计日志: nsslapd-auditlog-logminfreediskspace
  • 审计日志: nsslapd-auditfaillog-logminfreediskspace
当文件早于指定时间时
当日志文件早于配置的时间时,它会被自动删除。
  • 访问日志: nsslapd-accesslog-logexpirationtimensslapd-accesslog-logexpirationtimeunit
  • 错误日志: nsslapd-errorlog-logminfreediskspacensslapd-errorlog-logexpirationtimeunit
  • 审计日志: nsslapd-auditlog-logminfreediskspacensslapd-auditlog-logexpirationtimeunit
  • 审计日志: nsslapd-auditfaillog-logminfreediskspacensslapd-auditfaillog-logexpirationtimeunit

21.3.5.1. 使用命令行配置日志删除策略

使用 dsconf config replace 命令修改控制目录服务器日志记录功能的参数。例如,如果所有访问日志文件的总大小都增加 500 MB,则自动删除最旧的访问日志文件,请运行:
dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-accesslog-logmaxdiskspace=500

21.3.5.2. 使用 Web 控制台配置日志删除策略

21.3.6. 手动日志文件轮转

目录服务器支持所有这三个日志的自动日志文件轮转。但是,如果没有配置自动日志文件创建和删除策略,则可以手动轮转日志文件。默认情况下,可在以下位置找到访问、错误、审计和审计失败日志文件:
/var/log/dirsrv/slapd-instance
手动轮转日志文件:
  1. 停止该实例。
    # dsctl instance_name stop
  2. 移动或重命名正在轮转的日志文件,以便旧日志文件可用于将来的参考。
  3. 启动实例:
    # dsctl instance_name restart

21.3.7. 配置日志级别

访问和错误日志都可以记录不同的信息,具体取决于所设置的日志级别。
您可以设置以下配置参数来控制:
  • 访问日志: nsslapd-accesslog-level
  • 错误日志: nsslapd-errorlog-level
有关支持的日志级别的详情和列表,请参阅 红帽目录服务器配置、命令和文件参考中的相应部分
注意
从 default 更改日志级别可能会导致日志文件快速增长。红帽建议不要更改默认值,而无需红帽技术支持要求这样做。

21.3.7.1. 使用命令行配置日志级别

使用 dsconf config replace 命令设置日志级别。
例如,要启用搜索过滤器日志记录(32)和配置文件处理(64),请将 nsslapd-errorlog-level 参数设置为 96 (32 + 64):
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-errorlog-level=96
例如,要启用内部访问操作日志(4)以及连接、操作和结果(256)的日志记录,请将 nsslapd-accesslog-level 参数设置为 260 (4 + 256):
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-accesslog-level=260

21.3.7.2. 使用 Web 控制台配置日志级别

使用 Web 控制台配置访问和错误日志级别:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 配置:
    • 访问日志级别:
      1. 打开 Server SettingsLoggingAccess Log 菜单。
      2. Access Logging Levels 部分中选择日志级别。例如:
    • 错误日志级别:
      1. 打开 Server SettingsLoggingError Log 菜单。
      2. Error Logging Levels 部分中选择日志级别。例如:
  4. 点击 Save

21.3.7.3. 日志记录内部操作

几个操作会导致目录服务器中的其他内部操作。例如,如果用户删除条目,服务器将运行多个内部操作,例如查找条目并更新用户所属的组。本节介绍内部操作日志条目的格式。有关设置日志级别的详情,请参考 第 21.3.7 节 “配置日志级别”
目录服务器提供以下格式内部操作日志:
服务器发起的内部操作
服务器启动的内部操作日志条目示例:
[14/Jan/2021:09:45:25.814158882 -0400] conn=Internal(0) op=0(0)(0) MOD dn="cn=uniqueid generator,cn=config"
[14/Jan/2021:09:45:25.822103183 -0400] conn=Internal(0) op=0(0)(0) RESULT err=0 tag=48 nentries=0 etime=0.0007968796
对于此类型的日志条目:
  • conn 字段设置为 Internal,后跟 (0)
  • op 字段设置为 0 (0) (nesting_level)。对于服务器发起的内部操作,操作 ID 和内部操作 ID 始终为 0。对于没有嵌套的日志条目,嵌套级别为 0。
客户端发起的内部操作
客户端启动的内部操作日志条目示例:
[14/Jan/2021:09:45:14.382918693 -0400] conn=5 (Internal) op=15(1)(0) SRCH base="cn=config,cn=userroot,cn=ldbm database,cn=plugins,cn=config" scope=1 filter="objectclass=vlvsearch" attrs=ALL
[14/Jan/2021:09:45:14.383191380 -0400] conn=5 (Internal) op=15(1)(0) RESULT err=0 tag=48 nentries=0 etime=0.0000295419
[14/Jan/2021:09:45:14.383216269 -0400] conn=5 (Internal) op=15(2)(0) SRCH base="cn=config,cn=example,cn=ldbm database,cn=plugins,cn=config" scope=1 filter="objectclass=vlvsearch" attrs=ALL
[14/Jan/2021:09:45:14.383449419 -0400] conn=5 (Internal) op=15(2)(0) RESULT err=0
对于此类型的日志条目:
  • conn 字段设置为客户端连接 ID,后跟字符串 (内部)。
  • op 字段包含操作 ID,后跟 (internal_operation_ID) (嵌套ing_level)。内部操作 ID 可能会有所不同,没有嵌套的日志条目,嵌套级别为 0。
如果 nsslapd-plugin-logging 参数设置为 on,并且启用了内部操作日志记录,目录服务器还会记录插件的内部操作。

例 21.1. 启用插件的内部操作日志条目

如果您删除了 uid=user,dc=example,dc=com 条目,并且引用 完整性 插件会自动从 example 组中删除此条目,服务器日志:
[time_stamp] conn=2 op=37 DEL dn="uid=user,dc=example,dc=com"
[time_stamp] conn=2 (Internal) op=37(1) SRCH base="uid=user,dc=example,dc=com" scope=0 filter="(|(objectclass=*)(objectclass=ldapsubentry))" attrs=ALL
[time_stamp] conn=2 (Internal) op=37(1) RESULT err=0 tag=48 nentries=1 etime=0.0000129148
[time_stamp] conn=2 (Internal) op=37(2) SRCH base="dc=example,dc=com" scope=2 filter="(member=uid=user,dc=example,dc=com)" attrs="member"
[time_stamp] conn=2 (Internal) op=37(2) RESULT err=0 tag=48 nentries=0 etime=0.0000123162
[time_stamp] conn=2 (Internal) op=37(3) SRCH base="dc=example,dc=com" scope=2 filter="(uniquemember=uid=user,dc=example,dc=com)" attrs="uniquemember"
[time_stamp] conn=2 (Internal) op=37(3) RESULT err=0 tag=48 nentries=1 etime=0.0000128104
[time_stamp] conn=2 (Internal) op=37(4) MOD dn="cn=example,dc=example,dc=com"
[time_stamp] conn=2 (Internal) op=37(5) SRCH base="cn=example,dc=example,dc=com" scope=0 filter="(|(objectclass=*)(objectclass=ldapsubentry))" attrs=ALL
[time_stamp] conn=2 (Internal) op=37(5) RESULT err=0 tag=48 nentries=1 etime=0.0000130685
[time_stamp] conn=2 (Internal) op=37(4) RESULT err=0 tag=48 nentries=0 etime=0.0005217545
[time_stamp] conn=2 (Internal) op=37(6) SRCH base="dc=example,dc=com" scope=2 filter="(owner=uid=user,dc=example,dc=com)" attrs="owner"
[time_stamp] conn=2 (Internal) op=37(6) RESULT err=0 tag=48 nentries=0 etime=0.0000137656
[time_stamp] conn=2 (Internal) op=37(7) SRCH base="dc=example,dc=com" scope=2 filter="(seeAlso=uid=user,dc=example,dc=com)" attrs="seeAlso"
[time_stamp] conn=2 (Internal) op=37(7) RESULT err=0 tag=48 nentries=0 etime=0.0000066978
[time_stamp] conn=2 (Internal) op=37(8) SRCH base="o=example" scope=2 filter="(member=uid=user,dc=example,dc=com)" attrs="member"
[time_stamp] conn=2 (Internal) op=37(8) RESULT err=0 tag=48 nentries=0 etime=0.0000063316
[time_stamp] conn=2 (Internal) op=37(9) SRCH base="o=example" scope=2 filter="(uniquemember=uid=user,dc=example,dc=com)" attrs="uniquemember"
[time_stamp] conn=2 (Internal) op=37(9) RESULT err=0 tag=48 nentries=0 etime=0.0000048634
[time_stamp] conn=2 (Internal) op=37(10) SRCH base="o=example" scope=2 filter="(owner=uid=user,dc=example,dc=com)" attrs="owner"
[time_stamp] conn=2 (Internal) op=37(10) RESULT err=0 tag=48 nentries=0 etime=0.0000048854
[time_stamp] conn=2 (Internal) op=37(11) SRCH base="o=example" scope=2 filter="(seeAlso=uid=user,dc=example,dc=com)" attrs="seeAlso"
[time_stamp] conn=2 (Internal) op=37(11) RESULT err=0 tag=48 nentries=0 etime=0.0000046522
[time_stamp] conn=2 op=37 RESULT err=0 tag=107 nentries=0 etime=0.0010297858

21.3.8. 禁用用于调试的访问日志缓冲

为了进行调试,您可以禁用访问日志缓冲,这默认是启用的。禁用访问日志缓冲后,目录服务器将日志条目直接写入磁盘。
重要
不要在正常操作环境中禁用访问日志。当您禁用缓冲区时,目录服务器性能会降低,特别是在负载过重。

21.3.8.1. 使用命令行禁用访问日志缓冲

使用命令行禁用访问日志缓冲:
  • nsslapd-accesslog-logbuffering 参数设置为 off
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-accesslog-logbuffering=off

21.3.8.2. 使用 Web 控制台禁用访问日志缓冲

使用 Web 控制台禁用访问日志缓冲:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Server SettingsLoggingAccess Log
  4. 选择 Disable Access Log Buffering
  5. 单击 Save Configuration