journald是systemd的一部分,用于收集和存储日志。 配置journald journald的配置文件位于/etc/systemd/journald.conf。 服务以使配置生效: sudo systemctl restart systemd-journald 2. 使用journalctl查看日志 journalctl命令用于查看journald收集的日志。 总结 通过本文的介绍,我们详细介绍了rsyslog和journald的配置与使用。
在CentOS7.X中,systemd统一管理着所有unit的启动日志,systemd-journald就是一个被systemd管理的进型日志管理服务,可以收集来自内核、系统早期启动阶段的日志、系统守护进程在启动和运行中的标准输出和错误信息 loaded active exited Flush Journal to Persistent Storage systemd-journald.service loaded active running Journal Service systemd-journald.socket loaded active running Journal Socket 对于journal的配置,我们可以参见配置文件:/etc/systemd/journald.conf journal [root@ChatDevOps ~]# chmod g+s /var/log/journal [root@ChatDevOps ~]# systemctl restart systemd-journald
日志系统:rsyslog / journald 等日志系统的配置与使用1️⃣ 前言在 Linux 系统运维与开发中,日志是定位问题、审计安全事件、分析系统状态的核心依据。 本文将从日志系统的基础认知出发,详细讲解 rsyslog 与 journald 的配置方法、常用操作,并对比两者的核心差异,帮助运维人员根据实际场景选择合适的日志解决方案。 协同工作在大多数 systemd 系统中,journald 会先收集日志,再转发给 rsyslog,由 rsyslog 进行持久化或转发。 配置转发:# /etc/systemd/journald.confForwardToSyslog=yes这样可以:journald 提供统一入口(包括 systemd 服务日志)rsyslog 提供灵活的存储与网络转发 rsyslog 以兼容性强、远程转发灵活的优势,在分布式日志收集场景中不可或缺;journald 则凭借结构化查询、systemd 深度集成的特性,成为单机运维的高效工具。
systemd-journald 系统日志组件 守护程序:systemd-journald 配置文件:/etc/systemd/journald.conf 日志搜索程序:journalctl 默认情况下 journald 会在每次重启时覆盖其日志。 journald 持久化存储日志需要修改journald.conf 文件"Storage=auto"参数。 /journald.conf systemctl restart systemd-journald systemd-journald 存储类型 systemd-journald存储类型在journald.conf 的日志 systemd-journald 服务不会像rsyslog将日志保存在不同的日志文件中。
$ tail -f /var/log/dnf.log | 什么是 journald? 实际上,您可能同时使用 journald 和 rsyslog 来监控系统上发生的事情。 journald 的优点和缺点 与任何其他实用程序一样,与类似服务相比,journald 也有其优点和缺点。 需要注意的两个主要 journald 资源是: journald 日志的默认持久存储位置是 /var/log/journal 。 主要配置文件是 /etc/systemd/journald.conf 。 如果您被授予权限,请务必使用 sudo 命令。journald 会根据用户仔细过滤它显示的内容。 将 journald 与 rsyslog 集成 rsyslog 和 journald 之间可以进行一定程度的集成。
同时也可能导致systemd-journald内存占用过高。 因此我们最好优化下journald和rsyslog的参数,将宝贵的内存资源留给业务服务去使用。 /system/rsyslog.service /root/ # 2 修改journald服务 cat /etc/systemd/journald.conf 改动后的3行如下: [Journal] 啊哈哈哈 TODO 持续部署 对于新加的k8s节点,rsyslogd和journald的配置也需要优化,我们可以做成一个巡检类的定时任务。 2、如果主机的2个文件md5和期望的不一致,则用check-deploy的脚本中的文件覆盖,并重启journald或rsyslog服务。 /root/ && /bin/cp template/journald.conf /etc/systemd/journald.conf systemctl restart systemd-journald
日志文件本身较大 如果日志文件生成非常迅速,未能及时清理或压缩,journald 在处理这些大文件时会消耗大量的内存资源。 内存泄漏 虽然较为少见,但 systemd-journald 中的某些内存泄漏问题也可能导致内存占用不断增加。某些特定的系统或 journald 版本可能会有此类问题,尤其是在长时间运行后表现明显。 优化 systemd-journald 的内存占用 修改配置 vim /etc/systemd/journald.conf [Journal] SystemMaxUse=200M # 日志最大使用 当日志文件总大小超过指定的 SIZE 时,journald 会自动删除最旧的日志文件,直到总大小降到指定限制以下。 你可以指定一个时间阈值,journald 会删除早于该时间点的日志文件。
参阅journald.conf的官方文档,可以看到下面这段话: man journald.conf ... 增大journald的速率限制 如果服务器上运行了大量容器,每个容器输出一些日志,这些日志加起来也很容易超过journald的速率限制。因此还可以直接增大journald的速率限制。 # 直接修改/etc/systemd/journald.conf,增大RateLimitBurst配置项的取值,修改完毕后重启journald服务 vim /etc/systemd/journald.conf systemctl restart systemd-journald 其它 journald配置文件的优化 在修改journald.conf里,发现其某些配置项并不合理,可以参考这里优化一下。 增大journald的速率限制的其它办法 查看journald.conf配置文件的文档时,还发现对于较新版本的systemd来说,可以只修改某个服务对应的日志速率限制参数,这样不用修改journald.conf
同时也可能导致systemd-journald内存占用过高 4 解决 4.1 限制服务内存 限制rsyslog服务 [root@op-node-201 ~]# cat /usr/lib/systemd/ [Journal] Storage=none SystemMaxUse=16M ForwardToSyslog=no systemctl restart systemd-journald Storage 选项扩展 通过查看man手册,#man 5 journald.conf 你会发现,Storage=的值可以是volatile,persistent, autoandnone,但是,默认的是auto 这个也算是一个坑吧,看来大家都需要手动mkdir -p /var/log/journal/,systemctl restart systemd-journald来解放自己的内存了!!! none,表示,日志不保留,全部drop,只有当你决定不使用systemd-journald的时候,你可以使用!
# # 日志控制 # # 日志级别: 4 errors, 3 warnings, 2 information, 1 debug # 基本上debug级别可以记录所有日志信息 # 注意: # journald # 默认情况下,不会将日志输出到journald中,也不会输出到其它地方。 log_level = 1 # 日志过滤: # 日志过滤允许对给定类别的日志选择特定日志级别。 # 输出到journald日志系统中 # x代表最小的日志输出过滤级别 # 1: DEBUG # 2: INFO # 3: WARNING # 4: ERROR # 例如:使用libvirtd标识记录WARNING以上日志信息到syslog中 #log_outputs="3:syslog:libvirtd" # # 同时将日志记录到libvirtd.log文件和journald #log_outputs="3:file:/var/log/libvirt/libvirtd.log 3:journald" # 调试日志缓冲区大小: # 自从删除了全局日志缓冲区功能,这个配置选项就不再使用
此选项可以被内核引导选项 “systemd.journald.forward_to_syslog” 覆盖。 此选项可以被内核引导选项 “systemd.journald.forward_to_kmsg” 覆盖。 此选项可以被内核引导选项 “systemd.journald.forward_to_wall” 覆盖。 上述设置可以被如下内核引导选项覆盖: “systemd.journald.max_level_store=“, “systemd.journald.max_level_syslog=“, “systemd.journald.max_level_kmsg =“, “systemd.journald.max_level_console=“, “systemd.journald.max_level_wall=“ ReadKMsg= 是否收集内核日志。
而且systemd-journald这个进程虽然内存占用看起来不算特别高,但在这个2G内存的小服务器上,每一MB都很宝贵。 之前从来没仔细关注过systemd-journald这个进程,它是干什么的?为什么会让服务器这么卡? 深入了解systemd-journald搜了一下才知道,systemd-journald是Linux系统的日志服务,负责收集和管理系统日志。简单来说,系统里所有的日志都会经过它的手。 治本:修改journald配置临时清理只能救急,要彻底解决问题还得改配置:sudo vim /etc/systemd/journald.conf加入这些配置:[Journal]SystemMaxUse= 服务:sudo systemctl restart systemd-journald配置生效后,内存占用明显下降了。
enabled 0 failure 1 pid 0 rate_limit 0 backlog_limit 64 lost 0 backlog 0 loginuid_immutable 0 unlocked 关闭journald systemctl status systemd-journald systemctl stop systemd-journald systemctl stop systemd-journald.socket
第四步、清理系统日志 CentOS系统中有两个日志服务,分别是传统的 rsyslog 和 systemd-journal systemd-journald是一个改进型日志管理服务,可以收集来自内核、系统早期启动阶段的日志 journal日志大小永久限制 第四步的方法只是暂时清理,如果需要永久限制大小,需要修改/etc/systemd/journald.conf 配置文件 永久限制日志大小 打开配置文件sudo vim / etc/systemd/journald.conf,修改参数 SystemMaxUse=50M 限制全部日志文件总共可以占用多少空间。 修改之后重启生效,重启后日志会自动删减到限制的大小 systemctl restart systemd-journald.service
一旦日志消息存储在 journald 中,我们可以显示存储的所有日志消息,journal还可以优化查询,仅显示特定时间范围内的日志,或属于某个服务的日志。 4.1 在default.target注册journald服务 要启动 journald,我们需要一个服务。 这类似于上面的 halt 服务:我们提供应该执行的命令,然后将服务添加为目标的依赖项;这一次它是default.target,因为我们希望在容器“启动”后启动 journald。 这里的例子system-journald,我们创建一个包含两个文件套接字的套接字单元,一个流套接字和一个数据报套接字。 Sockets=systemd-journald.socket 然后我们创建一个服务单元,指定应该传入的套接字单元。
作为统一的边缘采集与汇聚出口,理由如下: 边缘汇聚:在主机上部署 Vector Agent,统一拉/收 node_exporter、process-exporter、DeepFlow Agent 输出(file/journald Vector 以单进程覆盖多源(Prom 拉取 + journald/file)、强背压/缓冲与多后端协议,更适合作为边缘汇聚/出口。 DeepFlow Agent 继续担任网络可观测探针,通过 file/journald/JSON 与 Vector 解耦上游与下游,避免直连 Collector 丢包。 : type: journald current_journal_only: true deepflow_file: type: file include: ["/var/log 与 DeepFlow 解耦:DeepFlow Agent 专注网络探针,产出(最好 JSON 行或 journald)→ Vector 可靠转运,避免直连 Collector 造成环形队列丢包。
使用`-f(facility)'参数过滤组 dmesg -f syslog [ 18.637800] systemd-journald[1060]: /etc/systemd/journald.conf :45: Unknown key name '^Compress' in section 'Journal', ignoring. [ 19.450094] systemd-journald[1060 如果想把日志级别打印出来 ,可以加-x dmesg -f syslog -x syslog:warn : [ 18.637800] systemd-journald[1060]: /etc/systemd /journald.conf:45: Unknown key name '^Compress' in section 'Journal', ignoring. syslog:info : [ 19.450094 ] systemd-journald[1060]: Received client request to flush runtime journal. 2.6 其他常见参数 dmesg -L # color
查看日志的详细参数 journalctl –since //查看从什么时间开始的日志 journalctl –until //查看到什么时间为止的日志 (2)如何使用systemd-journald 保存系统日志 默认systemd-journald是不保存系统日志到硬盘的,那么关机之后再次开机只能看到开机之后的日志,上次关机之前的日志是无法查看 mkdir /var/log/journal chgrp systemd-journal /var/log/journal/ chmod g+s /var/log/journal/ killall -1 /usr/lib/systemd/systemd-journald
200M # 限制每个守护服务 journal 的日志文件数量 journalctl --vacuum-files=5 上述命令只是暂时根据策略手动清理日志文件,如果想自动控制和清理,我们可以通过修改 journald 你可以按照自己的实际情况配置日志保留策略,下面是常用的一些配置项: # 查看 journald 配置文件 cat /etc/systemd/journald.conf ... 编辑完配置文件后,记得需要重启服务才能生效: systemctl restart systemd-journald 总结 本文介绍了轻量服务器如何更好的控制 systemd 系统日志,合理控制系统盘磁盘占用
日志服务未正常运行原因:系统日志服务(如 rsyslog 或 systemd-journald)可能没有正常启动或运行。 解决方法:检查日志服务的状态:检查 rsyslog 服务的状态:systemctl status rsyslog 检查 systemd-journald 服务的状态:systemctl status systemd-journald