当前位置: 首页 > 科技观察

LinuxSyslog初学者指南

时间:2023-03-12 20:51:25 科技观察

几十年来,Linux日志记录一直由syslogd守护进程管理(请注意,rsyslogd是syslogd的较新版本,一个东西)。Syslogd将收集系统进程和应用程序发送到/dev/log的日志消息。然后它将消息定向到/var/log/目录中适当的纯文本日志文件。Syslogd将知道将消息发送到哪里,因为每条消息都包含一个标头,其中包含元数据字段,包括时间戳、消息来源和优先级。除了Syslogd,Linux日志记录现在也由journald来记录,后面会介绍。使用syslogd记录syslogd系统上的事件生成的所有日志都添加到/var/log/syslog文件中。然而,根据它们的识别特征,它们也可能被发送到同一目录中的一个或多个其他文件。在syslogd中,消息的分发由位于/etc/rsyslog.d/目录中的50-default.conf文件的内容决定。下面50-default.conf的例子表示cron相关的日志信息会写入到cron.log文件中。星号(*)告诉syslogd发送具有任何优先级的条目(而不是像emerg或err这样的单一级别):cron.*/var/log/cron.logsyslogd日志文件不需要特殊工具,例如journalctl。但是如果你想在这方面做得很好,你需要知道每个标准日志文件中保存了什么样的信息。下表列出了最常见的syslogd日志文件及其记录的消息。文件名内容auth.log系统认证和安全事件boot.log启动相关事件的记录dmesg与设备驱动程序相关的内核环缓冲区事件dpkg.log包管理事件kern.logLinux内核事件syslog所有日志的集合wtmptrace用户会话(通过who和last命令访问)此外,个别应用程序有时会写入自己的日志文件。您还会经常看到为接收应用程序数据而创建的整个目录,例如/var/log/supervisor/或/var/log/mysql/。除了前面看到的*符号(适用于所有优先级)之外,日志重定向的文件路径可以由八个优先级中的任何一个控制。级别描述debug有助于调试info信息通知正常情况warn需要警告的情况err错误情况crit严重情况alert警报要求立即采取行动emerg系统不可用默认情况下使用sysglogd管理日志文件syslogd在后台处理日志轮换,压缩和删除而不您的任何行动。但是如果您有需要特殊处理的日志,您应该知道它是如何完成的。如果您的日志必须长期保留,您一定想知道如何通过密钥文件找到您需要的内容。要查看正在运行的logrotate系统,请列出/var/log/目录的一些内容。例如,auth.log文件有三种不同的格式:auth.log-当前活动的版本,新的授权信息写入其中。auth.log.1-轮换出的最新文件。它以未压缩格式保存,以便在必要时更容易快速调用。auth.log.2.gz-已压缩以节省空间的旧日志文件(下图中扩展名为.gz的文件)。7天后,下一个轮转日期到来时,auth.log.2.gz将更名为auth.log.3.gz,auth.log.1将被压缩并更名为auth.log.2.gz,auth.log将变为auth.log.1并创建一个新文件并命名为auth.log。默认日志轮换周期在/etc/logrotate.conf文件中控制。下面配置中显示的值表示一周后轮换文件,四周后删除旧文件。#rotatelogfilesweeklyweekly#keep4weeksworthofbacklogsrotate4#createnew(empty)logfilesafterrotatingoldonescreate#packagesdroplogrotationinformationintothisdirectoryinclude/etc/logrotate./etc/logrotate.d/定义配置文件用于管理单个服务或应用程序的日志轮换。列出该目录的内容,您将看到以下配置文件:$ls/etc/logrotate.d/apache2aptdpkgmysql-serverrsyslogsambaunattended-upgrade您可以查看它们的内容以查看它们的日志轮换配置。如何读取syslog文件应避免完全使用cat。它只会在您的屏幕上显示数千行内容。我建议使用grep来过滤文件中的文本。使用tail-f命令实时读取当前日志文件。您可以将其与grep结合使用以过滤所需的文本。在某些情况下,您可能需要访问旧的压缩日志。您始终可以先解压缩文件,然后使用grep、less和其他命令读取其内容,但是,还有更好的选择。zcat、zless等z命令允许您在不先解压缩文件的情况下使用压缩文件。日志分析示例下面是一个示例,它将在auth.log文件中搜索登录尝试失败的证据。搜索单词failure将返回包含短语authenticationfailure的所有行。偶尔检查可以帮助您发现通过猜测正确密码登录Linux系统的尝试。管理员可能会输错一两次密码,但如果密码输错次数太多,就需要提高警惕了:$cat/var/log/auth.log|grep'authenticationfailure'Sep411:00:37workstationsshd[2740141]:pam_unix(sshd:auth):authenticationfailure;logname=uid=0euid=0tty=sshruser=rhost=121.46.19.30Sep411:00:38workstationsshd[2740140]:pam_unix(sshd:auth):身份验证失败;logname=uid=0euid=0tty=sshruser=rhost=121.46.19.30user=rootSep411:00:38workstationsshd[2740148]:pam_unix(sshd:auth):身份验证失败;logname=uid=0euid=0tty=sshruser=rhost=121.46.19.30如您所知,grep为您完成了这项工作,但您从结果中只能看到身份验证失败。知道涉及谁的帐户会更有用。您可以通过告诉它包含匹配前后的行来扩展grep返回的结果。此示例打印匹配项及其前后的1行。它告诉你有人使用帐户ubuntu试图su(切换用户)登录到root帐户但失败了:$cat/var/log/auth.log|grep-C1failureSep422:43:43hongdaokejisu:pam_unix(su:auth):无法打开/etc/securetty:没有这样的文件或目录Sep422:43:43hongdaokejisu:pam_unix(su:auth):验证失败;logname=ubuntuuid=1000euid=0tty=pts/2ruser=ubunturhost=user=rootSep422:43:46hongdaokejisu:FAILEDSU(toroot)ubuntuonpts/2