聊聊journald是如何当一只优秀帕鲁的

本文介绍了systemd的组成部分,特别是其日志管理服务journald,以及journalctl工具的详细用法。对比了journalctl与/var/log/messages的日志特点,突出了journalctl在结构化日志、实时查看和高级过滤方面的优势。
摘要由CSDN通过智能技术生成

目录

一、前言

二、systemd的主要组成

        1.系统和服务管理器

        2.资源限制

        3.环境限制

        4.日志记录守护程序

        5.支持SysV和LSB初始化脚本

        6.其他

二、journald 能做什么

        1.收集日志

        2.结构化日志

        3.持久化存储

        4.实时查看日志

        5.灵活的过滤与搜索

        6.日志轮换

        7.压缩和加密

        三、journalctl 详解

        1.工作原理

        2.配置文件路径

        3.中文命令手册

        4.实战场景下的运用

                a.查看某个服务的日志(高频使用)        

                b.快速定位报错日志并给出相关上下文解释(高频使用)

                c.查看某个时间段的日志(高频使用)

                d.实时跟踪日志(高频使用)

                e.查看某一个进程今天的日志(排故障必备)

   四、journalctl和/var/log/messages查到的日志有什么区别

                1.访问方式不同

                2.可读性不同

                3.使用场景略有不同

                4.出现的时间不同

        五、总结


一、前言

        说起 journald 其实它还有另一种叫法systemd-journald,它是systemd项目的一个组成部分,是一个内建的日志管理服务。由于 systemd 是这个服务的上下文环境,所以在提到该服务时,通常会结合在一起称之为 systemd-journald  所以在聊起journald不得不先提一下systemd

二、systemd的主要组成

        1.系统和服务管理器

        这是systemd的核心部分,它负责启动和管理系统服务。systemd支持并行启动系统服务,使用套接字和D-Bus激活来启动服务,按需启动守护程序,利用Linux控制组监视进程,以及实现基于事务依赖关系的服务控制逻辑。

        2.资源限制

        systemd通过配置文件(如system.conf和user.conf)以及系统单元目录(如/etc/systemd/system、/usr/local/lib/systemd/system和/usr/lib/systemd/system)和用户单元目录(如/etc/systemd/user和/usr/lib/systemd/user)来实现资源的限制和管理。

        3.环境限制

        systemd可以限制和控制系统的环境,包括执行进程的环境变量、工作目录、用户、组等。

        4.日志记录守护程序

        systemd包含一个日志记录守护程序,用于记录系统事件和服务状态,方便进行故障排查和系统监控。通常指的是systemd-journald 。它是 systemd 的核心组件之一,负责收集、存储和管理系统的日志信息。也就是我们今天的要聊的主角 journald

        5.支持SysV和LSB初始化脚本

        systemd可以兼容并替代传统的SysVinit初始化系统,支持SysV和LSB(Linux Standard Base)初始化脚本。

        6.其他

        此外,systemd还支持许多其他功能,如快照和系统恢复、维护挂载点和自动挂载点、各服务间基于依赖关系的精密控制等。这些功能使得systemd成为了一个强大而灵活的系统和服务管理器,可以大大提高Linux系统的稳定性和可维护性。

二、journald 能做什么

        1.收集日志

                systemd-journald 从各种来源收集日志,包括内核、系统服务、用户进程等。

        2.结构化日志

                与传统的文本日志不同,systemd-journald 支持结构化日志,即日志条目包含额外的元数据,如时间戳、进程ID、用户ID等。

        3.持久化存储

                systemd-journald 将日志存储在磁盘上,即使系统重启也不会丢失。默认没开启

        4.实时查看日志

                通过 journalctl 命令,用户可以实时查看或搜索日志。journalctl 会与 systemd-journald 通信,获取所需的日志条目,并将其显示给用户。

        5.灵活的过滤与搜索

                用户可以基于时间、进程、用户、优先级等条件过滤和搜索日志。

        6.日志轮换

                systemd-journald 支持日志轮换,即自动将旧的日志移到归档目录,并创建新的日志文件。

        7.压缩和加密

            为了节省空间,systemd-journald 支持压缩旧的日志。此外,它还可以加密日志,以保护日志内容的安全。     

        三、journalctl 详解

        1.工作原理

                journalctlsystemd服务管理器提供的系统日志管理工具。它默认查找的二进制文件存储在/run/log/journal目录或者/var/log/journal目录下。这些二进制文件包含了日志数据,并以带有索引的结构化形式保存。

        2.配置文件路径

                journal配置文件默认路径 /etc/systemd/journald.conf

        3.中文命令手册

                

journalctl [选项...] [匹配项...]

查询日志。

选项:
     --system                显示系统日志
     --user                  显示当前用户的用户日志
  -M --machine=CONTAINER     对本地容器进行操作
  -S --since=DATE            显示不早于指定日期的条目
  -U --until=DATE            显示不晚于指定日期的条目
  -c --cursor=CURSOR         从指定的游标开始显示条目
     --after-cursor=CURSOR   显示指定游标之后的条目
     --show-cursor           在所有条目后打印游标
     --cursor-file=FILE      显示文件中游标后的条目并更新文件
  -b --boot[=ID]             显示当前启动或指定的启动
     --list-boots            显示有关记录启动的简洁信息
  -k --dmesg                 显示当前启动的内核消息日志
  -u --unit=UNIT             显示指定单元的日志
     --user-unit=UNIT        显示指定用户单元的日志
  -t --identifier=STRING     显示具有指定syslog标识符的条目
  -p --priority=RANGE        显示具有指定优先级的条目
     --facility=FACILITY...  显示具有指定设施的条目
  -g --grep=PATTERN          显示与PATTERN匹配的MESSAGE的条目
     --case-sensitive[=BOOL] 强制进行大小写敏感或不敏感的匹配
  -e --pager-end             在分页器中立即跳到末尾
  -f --follow                跟踪日志
  -n --lines[=INTEGER]       要显示的日志条目数量
     --no-tail               即使在跟踪模式下也显示所有行
  -r --reverse               先显示最新的条目
  -o --output=STRING         改变日志输出模式 (short, short-precise,
                               short-iso, short-iso-precise, short-full,
                               short-monotonic, short-unix, verbose, export,
                               json, json-pretty, json-sse, json-seq, cat,
                               with-unit)
     --output-fields=LIST    在verbose/export/json模式下选择要打印的字段
     --utc                   以协调世界时(UTC)表示时间
  -x --catalog               在可用的地方添加消息解释
     --no-full               缩略字段
  -a --all                   显示所有字段,包括长和不可打印的
  -q --quiet                 不显示信息消息和权限警告
     --no-pager              不将输出管道输出到分页器
     --no-hostname           抑制主机名字段的输出
  -m --merge                 显示所有可用日志的条目
  -D --directory=PATH        显示来自目录的日志文件
     --file=PATH             显示日志文件
     --root=ROOT             在根目录下操作文件
     --namespace=NAMESPACE   显示指定命名空间的日志数据
     --interval=TIME         更改FSS密封键的时间间隔
     --verify-key=KEY        指定FSS验证键
     --force                 使用--setup-keys覆盖FSS密钥对
命令:
  -h --help                  显示此帮助文本
     --version               显示包版本
  -N --fields                列出当前使用的所有字段名称
  -F --field=FIELD           列出指定字段采取的所有值
     --disk-usage            显示所有日志文件的总磁盘使用量
     --vacuum-size=BYTES     将磁盘使用量减少到指定大小以下
     --vacuum-files=INT      只保留指定数量的日志文件
     --vacuum-time=TIME      删除早于指定时间的日志文件
     --verify                验证日志文件的一致性
     --sync                  将未写入的日志消息同步到磁盘
     --relinquish-var        停止记录到磁盘,记录到临时文件系统
     --smart-relinquish-var  类似,但如果日志目录在根挂载上,则无操作
     --flush                 将所有日志数据从 /run 刷新到 /var
     --rotate                请求立即旋转日志文件
     --header                显示日志头信息
     --list-catalog          在目录中显示所有消息ID
     --dump-catalog          显示消息目录中的条目
     --update-catalog        更新消息目录数据库
     --setup-keys            生成新的FSS密钥对

有关详细信息,请参阅 journalctl(1) 手册页。
        4.实战场景下的运用
                a.查看某个服务的日志(高频使用)        
journalctl -u 服务名称

例子:查看sshd服务的日志

                b.快速定位报错日志并给出相关上下文解释(高频使用)
journalctl -xe

-x 选项:这个标志让 journalctl 输出时包含额外的调试信息,特别是当有错误发生时,会尝试展示可能与错误相关的详细上下文和解释文本。

-e 选项:该选项指示 journalctl 跳转到日志文件的结尾(end),并继续显示新的日志条目,直到用户停止命令或没有更多新日志为止。它通常用来实时监控系统当前正在发生的事件。

当出现报错时,一个必不可少的命令。

                c.查看某个时间段的日志(高频使用)
#查询2024年2月21日早上9点到10点的日志

journalctl --since "2024-02-21 09:00:00" --until "2024-02-21 10:00:00"
                d.实时跟踪日志(高频使用)
journalctl -f

一般直接开两个终端,一个调试复现问题一个追踪日志。效果极佳

                e.查看某一个进程今天的日志(排故障必备)
#先拿到进程的PID,再根据PID拿该进程今天的日志。下面以dockerd进程为例
ps -ef | grep docker   先看个大概主要是找准进程拿PID(第二列就是PID值,熟悉的直接awk 出来)
journalctl _PID=上面拿到的第PID  --since today

   四、journalctl和/var/log/messages查到的日志有什么区别

                1.访问方式不同

                journalctl是直接访问一个二进制的文件,文件存放位置默认在/run/log/journal目录下,不过也有的在/var/log/journal目录下。而/var/log/messages是访问了一个文本文件。

                2.可读性不同

                一个二进制文件本身就是为了让机器更容易阅读,同时可以记录结构化的日志,记录的信息更加丰富,细节更加准确。但正常人类是无法阅读的,所以出现了journalctl这个工具可以将复杂的二进制文件内容转化为人类易读的内容(太强了)。而/var/log/messages是传统的系统日志文件之一,以文本的方式去记录系统启动后的各种消息和事件,所以本身就十分适合人类去阅读。还可以直接编辑这个文件。

                3.使用场景略有不同

                由于journalctl可以记录结构化日志,这本身是/var/log/messages一个文本存储不具备的能力。所以前者对于细节可以记录的更加详细,配合它强大的过滤能力(基于时间,进程,用户,优先级等)具备快速筛选定位故障的能力。而/var/log/messages主要记录一些事件告警等,虽然也能通过(grep,sed,awk等方法筛选)很麻烦不推荐,更多的应用场景在应用监控告警方面,日志记录的详细程度不如journalctl 。

                4.出现的时间不同

                /var/log/messages  (历史悠久的syslog体系的一部分,目前与journalctl是共存的关系)

这个文件在传统的 syslog 体系结构中是一个非常重要的系统日志文件,用于存储来自各种守护进程和服务的非安全相关的消息。它包含了系统的启动信息、服务运行状态、错误和警告等。

Syslog 是一个历史悠久的日志协议和守护程序,在没有 systemd 的早期 Linux 发行版以及类 Unix 操作系统中广泛应用。

                journalctl  (新一代,可以简单的理解为Centos7之后linux发行版都已经集成了)

journalctl是随着 systemd 在 Linux 内核管理中的引入而出现的新一代日志工具。当 CentOS 7 开始采用 systemd 后,journalctl 成为了查看和管理由 systemd-journald 收集的系统日志的标准工具。但这并不意味着 syslog 不再存在或不再使用,实际上很多情况下,systemd-journald 会与 syslog 共存,甚至可以配置为将部分日志信息通过 syslog 协议发送出去。

        五、总结

                综上所述,在采用 systemd 的现代 Linux 发行版中,journalctl 已经成为管理和查看系统日志的主要手段,提供了更为全面和灵活的功能,而 /var/log/messages 则是基于 syslog 的传统日志文件,两者在功能和实现上有显著差异。默认情况下,systemd的日志会在每次系统重启后被覆盖。因此,如果你需要保留旧的日志信息,你需要配置systemd以在不同的方式下处理这些日志。不多说了,铁粉看到这里肯定已经点赞收藏关注了,借鉴了很多优秀的文章以及把AI都快问傻了。我要继续肝帕鲁去了!!!

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值