Linux系统日志的分析与存储

分析和存储日志

系统日志

进程和操作系统内核需要能够为发生的事件记录日志,这些日志可用于系统审核和问题的故障排除。依照惯例,这些日志永久存储在/var/log目录中。
红帽企业Linux中内建了一个基于系统日志协议的标准日志记录系统。许多程序使用此系统记录事件,并将它们整理到日志文件中。Red Hat Enterprise 7中的系统日志消息由两个服务负责处理,它们是systemd-journald 和rsyslog。
systemd-journald 守护进程提供一种改进的日志管理服务,可以收集来自内核、启动过程的早期阶段、标准输出、系统日志、以及守护 进程启动和运行期间错误的消息。它将这些消息写入到一个结构化事件日志中,默认情况下不在重新启动之间保留。这允许系统日志所错过的系统日志消息和事件收集到一个中央数据库中,系统日志消息也可由systemd-journald 转发到rsyslog以做进一步处理。
rsyslog服务随后根据类型(或设备)和优先级排列系统日志消息,将它们写入到/var/log目录内的永久文件中。

系统日志文件概述

/var/log/messages # 大多数系统日志消息记录在此处。例外是与身份验证、电子邮件 
                                  处理相关的定期运行作业的消息以及纯粹与调试相关的消息。
/var/log/secure   # 安全和身份验证相关的消息和错误的日志文件
/var/log/maillog  # 与邮件服务器相关的消息的日志文件。
/var/log/cron     # 与定期执行任务相关的日志文件。
/var/log/boot.log # 与系统启动相关的消息记录在此处。

许多程序使用syslog协议将事件记录到系统。每一日志消息根据设备(消息的类型)和优先级(消息的严重性)分类。
八个优先级按照如下所述进行了标准化和评级:

系统日志优先级概述

    编码          优先级           严重性
    0             emerg           系统不可用
    1             alert           必须立即采取措施
    2             crit            严重状况
    3             err             非严重错误状况
    4             warning         警告状况
    5             notice          正常但重要的事件
    6             info            信息性事件
    7             debug           调试级别消息

rsyslogd服务使用日志消息的设备和优先级来确定如何进行处理。这通过/etc/rsyslog.conf文件,以及/etc/rsyslog.d中的*.conf文件 进行配置。程序和管理员可以将带有.conf后缀的自定义文件放入/etc/rsyslog.d目录,以更改rsyslogd配置而不被rsyslog更新所覆盖。/etc/rsyslog.conf 的### RULES ### 部分包含定义日志消息保存位置的相关指令。每行左侧表示与指令匹配的日志消息的设备和严重性。rsyslog.conf 文件的设备和严重性字段中可能包含 *字符作为通配符,代表所有设备或所有严重性级别。e每行右侧表示要将日志消息保存到的文件。日志消息通常保存在/var/log 目录内的文件中。
rsyslog 处理的消息可能会出现在多个不同日志e文件中。为避免这种情况,可以将严重性字段设为none,表示定向到这一设备的所有消 息都不添加到指定的日志文件中。
除了将系统日志消息记录到文件中外,也可将它们打印到所有已登陆用户的终端中。在默认的rsyslog.conf文件中,对优先级为 "emreg"的所有消息执行此操作。

日志文件轮转

日志通过logrotate 实用工具“轮转”,以防止它们将包含/var/log的文件系统填满。轮转日志文件时,使用扩展名对其进行重命名,扩展名中指示轮转日期:如果在2020年06月30日轮转文件,原/var/log/messages文件可能成为/var/log/messages-20200630.轮转原日志文件之后,会创建新日志文件,并通知对它执行写操作的服务。
轮转若干次之后(通常在四周之后),丢弃原日志文件以释放磁盘空间。cron作业每日运行一次logrotate程序,以查看是否有任何日志 需要轮转。大多数日志文件每周轮转一次,但是logrotate轮转文件的速度有时较快,有时较慢,或在文件达到特定大小时进行轮转。

分析系统日志条目

rsyslog 所写的系统日志在文件的开头显示最旧的消息,在文件的末尾显示最新的消息。由rsyslog管理的日志文件中的所有日志条 目都以标准的格式记录。下例将深入介绍/var/log/secure日志文件中的日志文件消息;

 ①Feb 11 20:11:48 ②localhost③sshd[1433]:④Failed password for  student from 172.16.0.10 port 59344
 ①      记录该日志条目的时间戳
 ②      发送该日志消息的主机
 ③      发送该日志消息的程序或进程
 ④      发送的实际消息

利用tail 监控日志文件

监控事件的一个或多个日志文件,这对重要问题特别有帮助。tail -f /path/to/file 命令输出s指定文件的最后10行,并在新行写 入到监控文件中时继续输出它们。

使用发送系统消息日志logger

logger命令可以发送消息到rsyslog服务。默认情况下,它将严重性为notice(user.notice)的消息发送给设备用户,除非通过-p 选项另 外指定。测试对rsyslog配置的更改将特别有用。若要向rsyslogd发送消息并记录在/var/log/boot.log 日志文件中,可以执行:

 #logger -p local7.notice "Log entry created on server"

查看systemd 日志条目

通过查找事件journalctl

systemd日志将日志数据存储在带有索引的结构化二进制文件中。此数据包含与日志事件相关的额外信息。例如,对于系统日志事件,这 包含原始消息的设备和优先级。
重要:在Rhel7中,systemd日志默认存储在/run/log中,其内容会在重启后予以清除。
journalctl命令从最旧的日志条目开始显示完整的系统日志,以粗体文本突出显示优先级为notice或waring的消息,以红色文本突出显示优先级为error和更高的消息。
成功利用日志进行故障排除和审核的关键在于,将日志搜索限制为仅显示相关的输出。在下列段落中,将介绍各种用于减少日志查询输出的不同策略。
默认情况下,journalctl -n 显示最后10个条目。它可接受通过可选参数指定应显示最后多少个日志条目。若要显示最后3个日志条目, 可执行:

 #journalctl -n 3

在对问题进行故障排除时,根据日志条目的优先级过滤日志输出非常有用。#journalctl -p 可以接受已知优先级的名称或编号作为参数 如:

 #journalctl -p err

journalctl -f 跟tail -f 相似

查找具体的事件时,将输出限制为特定的时间段非常有用。journalctl 命令有两个选项,分别是--since和--until 选项,它们可以将输出限制为特定的时间范围。两个选项都接受格式为YYYY-MM-DD hh:mm:ss 的时间参数。如果省略日期,则命令会假定日期为当天;如果省略时间部分,则假定为自00:00:00起的一整天。除了日期和时间字段外,这两个选项还接受yesterday、today、tomorrom 作为有效的 参数。

#journalctl --since today ##输出当天记录的所有日志条目
#journalctl --since "2020-06-07 17:00:00" --until "2020-06-10 12:00:00" ##输出2020年6月7日17:00:00到2020年6月10日12:00:00的日志条目

除了日志的可见内容外,日志条目中还附带了只有在打开详细输出时才可看到的字段。所有显示的额外字段都可用于过滤日志查询的输出。这可用于减少查找日志中特定事件的复杂搜索的输出。

#journalctl -o verbose

其他用于搜索关于 特定进程或事件的行的选项还有:
_COMM #命令的名称
_EXE #进程的可执行文件的路径
_PID #进程的PID
_UID #运行该进程的用户的UID
_SYSTEM_UNIT #启动该进程的systemd单元
可以组合使用其中多个选项,例如:#journalctl _SYSTEM_UNIT=sshd.service _PID=1182

永久存储系统日志

默认 情况下,systemd日志保存在/run/log/journal 中,这意味这系统重启时它会被清除。该日志是RHEL7中的一种新机制,而对于大多数安装来说,自上一次启动起的详细日志就已足够。
如果存在/var/log/journal目录,该日志会改为记录在这个目录中。这样做的优点是启动后就可立即利用历史数据。然而,即便是永久日志,并非所有数据都将永久保留。该日志具有一个内置日志轮转机制,会在每个月触发。此外,默认情况下,日志的大小不能超过所处文件系统的10%,也不能造成文件系统的可用空间低于15%。这些值可以在 /etc/systemd/journald.conf中调节,日志大小的当前限制则在systemd-journald进程启动时予以记录,可通过下列命令进行查看,该命令显示journalctl输出的前两行:

#journalctl | head -2

#mkdir /var/log/journal ##创建目录,使systemd日志变为 永久日志
#chown root:systemd-journal /var/log/journal ##确保目录由root用户和组systemd-journal 所有
#chmod 2755 /var/log/journal ##更改权限为2755
#killall -USER1  systemd-journald  ##将特殊信号USER1发送到systemd-journald进程

由于systemd日志现在已经在重新启动之间永久保留,因此可以通过journalctl -b 仅显示系统上一次启动以来的日志消息,以减少输出 。

注:利用永久日志调试系统崩溃时,通常需要将日志查询限制为崩溃发生之前的重新启动。可以给-b 选项附上一个负数值,指示应该将 输出限制为过去多少次系统启动。例如:#journal -b -1 将输出限制为上一次启动。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350