Sun Java System Directory Server Enterprise Edition 6.3 管理指南

第 28 章 目录代理服务器日志记录

目录代理服务器在访问日志和错误日志中记录信息。与目录服务器不同,目录代理服务器没有审计日志。有关目录代理服务器中的日志的描述,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的第 23  章 “Directory Proxy Server Logging”

本章包含以下主题:

查看目录代理服务器日志

可以通过日志文件或使用目录服务控制中心 (Directory Service Control Center, DSCC) 直接查看目录代理服务器日志。

默认情况下,日志存储在以下目录中:


instance-path/logs

下图显示了 DSCC 上的目录代理服务器错误日志的屏幕捕获。

图 28–1 目录代理服务器的错误日志窗口

屏幕捕获显示了目录代理服务器的错误日志。表中列出了错误日志条目。

配置目录代理服务器日志

可以使用 dpconf 命令或 DSCC 配置目录代理服务器的错误日志和访问日志。有关如何使用 DSCC 配置日志的信息,请参见目录代理服务器联机帮助。本部分介绍如何使用 dpconf 命令配置目录代理服务器日志。

通过运行以下命令,可以检索完整的配置选项列表以及允许值和默认值:

$ dpconf help-properties error-log
$ dpconf help-properties access-log

Procedure配置目录代理服务器访问日志和错误日志

此过程用于配置目录代理服务器访问日志。要配置目录代理服务器错误日志,请执行相同的过程,但要将 access 替换为 error

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 查看访问日志的属性。


    $ dpconf get-access-log-prop -h host -p port
    

    访问日志的默认属性如下所示:


    default-log-level                :  info
    enable-log-rotation				  :  true
    log-buffer-size                  :  9.8k
    log-file-name                    :  logs/access
    log-file-perm                    :  600
    log-level-client-connections     :  -
    log-level-client-disconnections  :  -
    log-level-client-operations      :  -
    log-level-connection-handlers    :  -
    log-level-data-sources           :  -
    log-level-data-sources-detailed  :  -
    log-min-size						  :  100M
    log-rotation-frequency           :  1h
    log-rotation-policy              :  size
    log-rotation-size                :  100M
    log-rotation-start-day           :  1
    log-rotation-start-time          :  0000
    log-search-filters               :  false
    max-age                          :  unlimited
    max-log-files                    :  10
    max-size                         :  unlimited
    min-free-disk-space-size         :  1M
  2. 更改步骤 1 中列出的一个或多个属性。


    $ dpconf set-access-log-prop -h host -p port property:value \
     [property:value ...]

    例如,要将所有消息类别的默认日志级别设置为警告,请将 default-log-level 属性的值设置为 warning


    $ dpconf set-access-log-prop -h host1 -p 1389 default-log-level:warning

    要禁用所有日志,而不考虑每个消息类别的日志级别,请将 default-log-level 属性的值设置为 none


    $ dpconf set-access-log-prop -h host1 -p 1389 default-log-level:none

    要将特定的日志级别重置为默认日志级别,请将该日志级别的属性设置为 inherited。例如,要重置客户端连接的日志级别,请运行以下命令:


    $ dpconf set-access-log-prop -h host1 -p 1389 log-level-client-connections:inherited

    要获取有关可使用 set-access-log-prop 子命令设置的属性的信息,请键入:


    $ dpconf help-properties access-log

配置目录代理服务器日志轮转

默认情况下,在日志文件大小达到 100 MB 时轮转日志文件。默认情况下会保留十个日志文件,超过十个之后,轮转过程将开始覆盖最早的日志文件。本部分介绍如何配置目录代理服务器日志以执行计划的轮转、如何手动轮转日志,以及如何禁用日志轮转。要查看示例配置,请参见日志轮转的示例配置

Procedure配置访问日志和错误日志的定期轮转

此过程用于配置目录代理服务器访问日志。要配置目录代理服务器错误日志,请执行相同的过程,但要将 access 替换为 error

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. (可选的)查看访问日志的属性。


    $ dpconf get-access-log-prop -h host -p port
    
  2. (可选的)查看访问日志属性的有效值。

    $ dpconf help-properties access-log
  3. 要在日志达到特定大小时轮转日志,请设置以下属性:


    $ dpconf set-access-log-prop -h host -p port \
     log-rotation-policy:size log-rotation-size:maximum file size
    

    如果未指定最大文件大小的单位, 则使用默认单位字节。当日志文件达到定义的大小时,将会轮转日志。文件大小至少为 1 MB,且不能超过 2 GB。

    有关如何按大小轮转日志的示例,请参见根据日志大小轮转日志

  4. 要定期轮转日志,而不考虑日志大小,请设置以下属性:


    $ dpconf set-access-log-prop -h host -p port \
     log-rotation-frequency:interval in months, weeks, hours, or minutes \
     log-rotation-policy:periodic \
     log-rotation-start-day:day in week (1-7) or day in the month (1-31) \
     log-rotation-start-time:time of day (hhmm)
    

    如果将日志配置为在每月的 31 号轮转,但当月少于 31 天,则日志将在下个月的第一天轮转。

    有关如何定期轮转日志的示例,请参见根据时间轮转日志

  5. 要在日志文件足够大时定期轮转日志,请设置 log-rotation-frequencylog-min-size 属性。


    $ dpconf set-access-log-prop -h host -p port \
     log-rotation-frequency:interval in months, weeks, hours, or minutes \
     log-rotation-policy:periodic log-min-size:minimum file size
     log-rotation-start-day:day in week (1-7) or day in the month (1-31) \
     log-rotation-start-time:time of day (hhmm)
    

    log-min-size 属性表示日志的最小大小。只有日志文件大于指定大小时,才会在计划的时间执行轮转。

    如果将日志配置为在每月的 31 号轮转,但当月少于 31 天,则日志将在下个月的第一天轮转。

    有关如何在文件足够大时定期轮转日志的示例,请参见根据时间和日志大小轮转日志

Procedure手动轮转访问日志文件和错误日志文件

此过程用于轮转目录代理服务器访问日志。要轮转目录代理服务器错误日志,请执行相同的过程,但要将 access 替换为 error

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 轮转访问日志。


    $ dpconf rotate-log-now -h host -p port access

Procedure禁用访问日志轮转和错误日志轮转

此过程用于禁用目录代理服务器访问日志轮转。要禁用目录代理服务器错误日志轮转,请执行相同的过程,但要将 access 替换为 error

  1. 禁用日志文件轮转。


    $ dpconf set-access-log-prop -h host -p port enable-log-rotation:false

日志轮转的示例配置

有关如何按日志大小和/或时间配置日志轮转的示例。

根据日志大小轮转日志

本部分中的示例说明如何只根据日志大小配置日志轮转。此配置将在日志大小达到 10 MB 时轮转日志,而不考虑上次轮转日志的时间。


$ dpconf set-access-log-prop -h host1 -p 1389 log-rotation-policy:size \
  log-rotation-size:10M

根据时间轮转日志

本部分中的示例说明如何根据上次轮转日志的时间来配置日志轮转,而不考虑日志大小。

如果将 log-rotation-start-day 设置为 31,而当月仅有 30 天,则日志将在下个月的第一天轮转。如果将 log-rotation-start-day 设置为 31,而当月仅有 28 天(二月),则日志将在下个月的 3 号轮转。

根据时间和日志大小轮转日志

此示例说明如何按指定的时间间隔配置日志轮转(当日志文件足够大时)。

此配置将在每天的 3:00、11:00 和 19:00 轮转日志(当日志文件大小超过 1 MB 时)。如果日志文件大小未超过 1 MB,则不会轮转日志文件。


$ dpconf set-access-log-prop -h host1 -p 1389 log-rotation-frequency:8h \
 log-rotation-policy:periodic log-min-size:1M log-rotation-start-time:0300

删除目录代理服务器日志

目录代理服务器允许您根据时间、大小或可用磁盘空间(默认)配置日志删除。有关这些删除策略的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Log File Deletion”

以下过程将配置访问日志的日志删除。要配置错误日志的日志删除,请使用相同的命令,但要将 access 替换为 error

Procedure根据时间配置访问日志和错误日志删除

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 指定日志文件的最长存留期。


    $ dpconf set-access-log-prop -h host -p port max-age:duration
    

    其中 duration 包括天 (d)、周 (w) 或月 (M) 等单位。例如,要删除五天前的备份日志文件,请使用以下命令:


    $ dpconf set-access-log-prop -h host1 -p 1389 max-age:5d

Procedure根据文件大小配置访问日志和错误日志删除

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 指定日志文件的最大大小。


    $ dpconf set-access-log-prop -h host -p port max-size:memory-size
    

    例如,要删除大于 1 MB 的备份日志文件,请使用以下命令:


    $ dpconf set-access-log-prop -h host1 -p 1389 max-size:1M

Procedure根据可用磁盘空间配置访问日志和错误日志删除

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 指定最小的可用磁盘空间。


    $ dpconf set-access-log-prop -h host -p port min-free-disk-space-size:memory-size
    

    例如,要在可用磁盘空间小于 2 MB 时删除备份日志文件,请使用以下命令:


    $ dpconf set-access-log-prop -h host1 -p 1389 min-free-disk-space-size:2M

将警报记录到 syslogd 守护进程

本部分介绍如何配置将警报消息记录到 syslogd 守护进程的过程,以及如何将操作系统配置为接受 syslog 警报。

Procedure将目录代理服务器配置为将警报记录到 syslogd 守护进程

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. (可选的)查看系统日志警报属性的当前值。


    $ dpconf get-server-prop -h host -p port syslog-alerts-enabled \
     syslog-alerts-facility syslog-alerts-host

    系统日志警报的默认属性如下所示:


    syslog-alerts-enabled   :  false
    syslog-alerts-facility  :  USER
    syslog-alerts-host      :  localhost

    syslog-alerts-host 属性定义消息所发送到的 syslogd 守护进程的主机名。syslog-alerts-facility 属性为只读属性,可导致消息发送到系统日志的 user 类别。

  2. 将警报消息记录到 syslogd 守护进程。


    $ dpconf set-server-prop -h host -p port syslog-alerts-enabled:true
  3. (可选的)将警报消息发送到其他主机上的 syslogd 守护进程。


    $ dpconf set-server-prop -h host -p port syslog-alerts-host:hostname
    

将操作系统配置为接受 syslog 警报

本部分提供了有关将 SolarisTM、Linux 和 HP-UX 操作系统配置为接受 syslog 警报的说明。

Procedure将 Solaris 操作系统配置为接受 syslog 警报

  1. 将相应的工具添加到 syslog 配置文件中。

    例如,要使用 USER 工具存储所有警报,请将以下行添加到 /etc/syslog.conf 中:

    user.info       /var/adm/info

    此处的 /var/adm/info 是要存储消息的本地目录示例。在继续操作之前,请确保存在 /var/adm/info

  2. 重新启动 syslogd 守护进程。

    1. 在 Solaris 8 和 Solaris 9 上,通过键入以下命令重新启动 syslogd

      $ /etc/init.d/syslog stop | start
    2. 在 Solaris 10 上,通过键入以下命令重新启动 syslogd

      $ svcadm restart system/system-log
  3. 验证是否已将消息记录到 syslog 中。

    $ logger -p user.info "Test message"
    $ cat /var/adm/info
     Jun 19 17:18:38 host user: [ID 12345 user.info] Test message

Procedure将 Linux 配置为接受 syslog 警报

  1. 将相应的工具添加到 syslog 配置文件中。

    例如,要使用 USER 工具存储所有警报,请将以下行添加到 /etc/syslog.conf 中:

    user.info       /var/adm/info

    此处的 /var/adm/info 是要存储消息的本地目录示例。在继续操作之前,请确保存在 /var/adm/info

  2. syslogd 守护进程配置为使用 -r 选项运行。

    此选项允许 syslogd 接受来自网络的连接。默认情况下不设置 -r 选项。

    要设置 -r 选项,请在 /etc/sysconfig/syslog 中添加以下行:

    SYSLOGD_OPTIONS="-m 0 -r"

    如果 /etc/sysconfig/syslog 不存在,请将相同的行添加到 /etc/init.d/syslog 中。

  3. 重新启动 syslogd 守护进程。

    $ /etc/init.d/syslog stop | start
  4. 验证是否已将消息记录到 syslog 中。

    $ logger -p user.info "Test message"
    $ cat /var/adm/info
     Jun 19 17:18:38 host user: [ID 12345 user.info] Test message

Procedure将 HP-UX 配置为接受 syslog 警报

  1. 将相应的工具添加到 syslog 配置文件中。

    例如,要使用 USER 工具存储所有警报,请将以下行添加到 /etc/syslog.conf 中:

    user.info       /var/adm/info

    此处的 /var/adm/info 是要存储消息的本地目录示例。在继续操作之前,请确保存在 /var/adm/info

  2. 重新启动 syslogd 守护进程。

    $ /sbin/init.d/syslogd stop | start
  3. 验证是否已将消息记录到 syslog 中。

    $ logger -p user.info "Test message"
    $ cat /var/adm/info
     Jun 19 17:18:38 host user: [ID 12345 user.info] Test message

通过目录代理服务器和目录服务器访问日志跟踪客户端请求

要跟踪客户端请求,您必须了解在目录代理服务器访问日志和目录服务器访问日志中是如何记录请求的。要了解本部分的内容,请先阅读《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Tracking Client Requests Through Directory Proxy Server and Directory Server Access Logs”

Procedure跟踪从目录服务器经由目录代理服务器到客户端应用程序的操作

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 找到您要在目录服务器访问日志中跟踪的操作的连接号。

    例如,访问日志中的以下行显示连接号为 conn=12839 的操作 op=2


    [20/Jul/2006:18:01:49 -0500] conn=12839 op=2 msgId=4 - SRCH base="dc=example,dc=com" 
     scope=2 filter="(objectClass=organizationalunit)" attrs=ALL
  2. 获取该连接的目录代理服务器连接信息。

    要获取此信息,请搜索目录服务器访问日志,以找到具有相应连接号的所有操作。例如,在 UNIX 系统上运行以下 grep 命令,可找到目录服务器访问日志中与连接 conn=12839 相对应的所有行:


    $ grep conn=12839 access

    显示初始 LDAP 连接的行就是您要查找的行,该行类似于以下内容:


    [19/Jul/2006:16:32:51 -0500] conn=12839 op=-1 msgId=-1 - fd=27 slot=27 
     LDAP connection from 129.153.160.175:57153 to 129.153.160.175

    上面的行表明存在从 129.153.160.175:57153 到目录服务器的 LDAP 连接。端口号 (57153) 是将连接链接回目录代理服务器访问日志所需的信息。通过端口号可以查找目录代理服务器日志中相应的连接,并从此连接找到客户端信息。

    如果日志文件自首次建立连接后已进行了轮转,则需要搜索已归档的日志文件和当前的访问日志文件。

  3. 找到目录代理服务器访问日志中相应的连接。

    要获取此信息,请搜索目录代理服务器访问日志,以找到具有相应端口号的所有操作。

    您可能会在日志文件中找到具有相同端口号的多个条目。要确保找到正确的条目,请在搜索中包含目录服务器日志条目的时间戳。

    例如,在 UNIX 系统上运行以下 grep 命令,以查找与在目录服务器日志中找到的时间戳和端口号相对应的连接条目:


    $ grep 19/Jul/2006:16:32 access | grep 57153

    请注意,考虑到服务器时间会存在一些细微差别,因此从时间戳中排除了值。

    目录代理服务器日志中的相应行应类似于以下内容:


    [19/Jul/2006:16:32:51 -0500] - SERVER_OP  - INFO  - Created BIND  LDAP connection 
     s_conn=sunds-d1m1-9389:34 client=0.0.0.0:57153 
     server=idm160.central.sun.com:9389 main

    此行表明目录代理服务器创建了到 s_conn=sunds-d1m1-9389:34BIND 连接。目录代理服务器将其自身标识为 TCP 端口 57153 上的客户端 client=0.0.0.0

    可从此日志行中提取的重要信息为服务器 ID 和端口号 (s_conn=sunds-d1m1-9389:34 )。

  4. 找到与上一步中标识的服务器 ID 和端口号相对应的所有操作。

    要获取此信息,请搜索目录代理服务器访问日志,以找到与服务器 ID 和端口号相对应的所有操作。

    例如,在 UNIX 系统上运行以下 grep 命令,可找到与上一步中找到的服务器 ID 相对应的操作。


    $ grep s_conn=sunds-d1m1-9389:34 access

    在这种情况下,搜索时间戳将不起作用,因为这些操作可能会跨越数天。但是,您必须确定搜索返回的操作是否正确。如果存在多个 Create 连接语句,请确保找到与原始搜索语句相对应的语句。要执行此操作,请将此时间戳与步骤 1 中找到的时间戳进行比较。

    从目录代理服务器访问日志中提取的以下内容显示了为 s_conn=sunds-d1m1-9389:34 返回的所有操作。


    [19/Jul/2006:16:32:51 -0500] - SERVER_OP  - INFO - Created BIND LDAP connection
     s_conn=sunds-d1m1-9389:34 client=0.0.0.0:57153 server=idm160.central.sun.com:9389 main
    [20/Jul/2006:18:01:49 -0500] - SERVER_OP  - INFO  - conn=31 op=0 BIND dn="cn=directory manager"
     method="SIMPLE" s_msgid=3 s_conn=sunds-d1m1-9389:34
    [20/Jul/2006:18:01:49 -0500] - SERVER_OP  - INFO  - conn=31 op=0 BIND RESPONSE err=0 msg=""
     s_conn=sunds-d1m1-9389:34
    [20/Jul/2006:18:01:49 -0500] - SERVER_OP  - INFO  - conn=31 op=1 SEARCH base="dc=example,dc=com"
     scope=2 s_msgid=4 s_conn=sunds-d1m1-9389:34
    [20/Jul/2006:18:01:49 -0500] - SERVER_OP  - INFO  - conn=31 op=1 SEARCH RESPONSE err=0 msg=""
     nentries=1 s_conn=sunds-d1m1-9389:34

    通过以上信息,您可以看到目录代理服务器上的此搜索操作的连接 ID 为 31 (conn=31)。

  5. 找到与上一步中找到的连接 ID 相对应的客户端连接 IP 地址。

    要获取此信息,请搜索目录代理服务器访问日志,以找到具有正确连接 ID 和时间戳的所有操作。要使用的时间戳为步骤 1 中原始搜索语句中的时间戳。

    例如,在 UNIX 系统上运行以下 grep 命令,可找到客户端连接 IP 地址:


    $ grep "20/Jul/2006:18:01" access | grep conn=31

    您所关注的行应类似于以下内容:


    [20/Jul/2006:18:01:49 -0500] - CONNECT - INFO  - conn=31 client=129.150.64.156:2031
    server=0.0.0.0:11389 protocol=LDAP
  6. 确定在上一步中找到的 IP 地址的所有者。

    通过此信息,可以准确地确定在目录服务器上负责执行该操作的用户。