Unix / Linux - 系统日志

  • 简述

    本章,我们将详细讨论 Unix 中的系统日志记录。
    Unix 系统有一个非常灵活和强大的日志系统,它使您能够记录几乎所有您能想象到的内容,然后操作日志以检索您需要的信息。
    许多版本的 Unix 提供了一个通用的日志工具,称为 syslog. 需要记录信息的各个程序将信息发送到 syslog。
    Unix syslog是一种主机可配置的统一系统日志记录工具。系统使用运行程序的集中式系统日志记录过程/etc/syslogd 或者 /etc/syslog.
    系统记录器的操作非常简单。程序将它们的日志条目发送到syslogd,后者查阅配置文件/etc/syslogd.conf 或者 /etc/syslog 并且,当找到匹配项时,将日志消息写入所需的日志文件。
    您应该了解四个基本的系统日志术语 -
    序号 术语和描述
    1
    Facility
    用于描述提交日志消息的应用程序或进程的标识符。例如,邮件、内核和 ftp。
    2
    Priority
    消息重要性的指标。级别在 syslog 中定义为指导方针,从调试信息到关键事件。
    3
    Selector
    一个或多个设施和级别的组合。当传入事件与选择器匹配时,将执行操作。
    4
    Action
    匹配选择器的传入消息会发生什么 - 操作可以将消息写入日志文件,将消息回显到控制台或其他设备,将消息写入登录用户,或将消息发送到另一个系统日志服务器。
  • 系统日志设施

    我们现在将了解系统日志设施。以下是选择器的可用工具。并非所有工具都存在于所有版本的 Unix 上。
    设施 描述
    1
    auth
    与请求名称和密码相关的活动(getty、su、login)
    2
    authpriv
    与 auth 相同,但登录到只能由选定用户读取的文件
    3
    console
    用于捕获通常定向到系统控制台的消息
    4
    cron
    来自 cron 系统调度程序的消息
    5
    daemon
    系统守护进程包罗万象
    6
    ftp
    与 ftp 守护进程相关的消息
    7
    kern
    内核消息
    8
    local0.local7
    每个站点定义的本地设施
    9
    lpr
    来自行式打印系统的消息
    10
    mail
    与邮件系统相关的消息
    11
    mark
    用于在日志文件中生成时间戳的伪事件
    12
    news
    与网络新闻协议 (nntp) 相关的消息
    13
    ntp
    与网络时间协议相关的消息
    14
    user
    常规用户流程
    15
    uucp
    UUCP子系统
  • 系统日志优先级

    下表总结了系统日志优先级 -
    序号 优先级和描述
    1
    emerg
    紧急情况,例如即将发生的系统崩溃,通常会广播给所有用户
    2
    alert
    应立即纠正的情况,例如系统数据库损坏
    3
    crit
    临界条件,例如硬件错误
    4
    err
    普通错误
    5
    Warning
    警告
    6
    notice
    不是错误但可能应该以特殊方式处理的情况
    7
    info
    信息性消息
    8
    debug
    调试程序时使用的消息
    9
    none
    用于指定不记录消息的伪级别
    设施和级别的组合使您能够辨别记录的内容以及该信息的去向。
    当每个程序尽职尽责地将其消息发送到系统记录器时,记录器会根据选择器中定义的级别来决定要跟踪什么和丢弃什么。
    当您指定一个级别时,系统将跟踪该级别及更高级别的所有内容。
  • /etc/syslog.conf 文件

    /etc/syslog.conf文件控制记录消息的位置。一个典型的syslog.conf 文件可能看起来像这样 -
    
    *.err;kern.debug;auth.notice /dev/console
    daemon,auth.notice           /var/log/messages
    lpr.info                     /var/log/lpr.log
    mail.*                       /var/log/mail.log
    ftp.*                        /var/log/ftp.log
    auth.*                       @prep.ai.mit.edu
    auth.*                       root,amrood
    netinfo.err                  /var/log/netinfo.log
    install.*                    /var/log/install.log
    *.emerg                      *
    *.alert                      |program_name
    mark.*                       /dev/console
    
    文件的每一行包含两部分 -
    • message selector指定要记录的消息类型。例如,来自内核的所有错误消息或所有调试消息。
    • action field这说明了应该对消息做什么。例如,将其放入文件或将消息发送到用户的终端。
    以下是上述配置的值得注意的点 -
    • 消息选择器有两部分: a facilitya priority. 例如,kern.debug选择内核(工具)生成的所有调试消息(优先级)。
    • 消息选择器kern.debug选择所有大于 debug 的优先级。
    • 代替设施或优先级的星号表示“全部”。例如,*.debug 表示所有调试消息,而 kern.* 表示内核生成的所有消息。
    • 您还可以使用逗号来指定多个设施。可以使用分号将两个或多个选择器组合在一起。
  • 记录操作

    动作字段指定五个动作之一 -
    • 将消息记录到文件或设备。例如,/var/log/lpr.log 或者 /dev/console.
    • 向用户发送消息。您可以通过用逗号分隔来指定多个用户名;例如,root、amrood。
    • 向所有用户发送消息。在这种情况下,操作字段由星号组成;例如, *。
    • 将消息通过管道传送到程序。在这种情况下,程序在 Unix 管道符号 (|) 之后指定。
    • 将消息发送到另一台主机上的系统日志。在这种情况下,操作字段由主机名组成,前面有一个 at 符号;例如,@cainiaoya.com。
  • 记录器命令

    Unix 提供了 logger命令,这是一个处理系统日志非常有用的命令。这logger 命令将日志消息发送到 syslogd 守护程序,从而引发系统日志记录。
    这意味着我们可以随时从命令行检查 syslogd守护进程及其配置。logger 命令提供了一种从命令行向系统日志文件添加单行条目的方法。
    命令的格式是 -
    
    logger [-i] [-f file] [-p priority] [-t tag] [message]...
    
    这是参数的详细信息 -
    序号 选项和说明
    1
    -f filename
    使用文件 filename 的内容作为要记录的消息。
    2
    -i
    用每一行记录记录器进程的进程 ID。
    3
    -p priority
    输入具有指定优先级的消息(指定的选择器条目);消息优先级可以用数字指定,也可以指定为一个 factory.priority 对。默认优先级是 user.notice。
    4
    -t tag
    用指定的标签标记添加到日志的每一行。
    5
    message
    其内容按指定顺序连接在一起的字符串参数,由空格分隔。
    您可以使用 Manpage Help 检查此命令的完整语法。
  • 日志轮换

    日志文件具有增长非常快并消耗大量磁盘空间的倾向。为了启用日志轮换,大多数发行版使用工具,例如newsyslog 或者 logrotate.
    应使用以下方法在频繁的时间间隔内调用这些工具 cron daemon. 查看newsysloglogrotate的手册页以获取更多详细信息。
  • 重要日志位置

    所有系统应用程序都在 /var/log及其子目录。以下是一些重要的应用程序及其相应的日志目录 -
    应用 目录
    httpd /var/log/httpd
    samba /var/log/samba
    cron /var/log/
    mail /var/log/
    mysql /var/log/