linux采集日志 ---- journalctl与rsyslog

本文对比介绍了Linux系统下journal和rsyslog两种日志管理工具。journalctl主要用于日志采集和分析,而rsyslog则能分门别类收集不同类型的日志。实验涉及了journalctl的常用命令、永久保存日志设置以及rsyslog的自定义日志路径、格式和远程同步。通过实例展示了如何配置rsyslog实现日志的远程同步,以提高服务器状态管理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对比journal与rsyslog

  • journal 是将所有的日志都存放起来,用日志查看工具,来对我们的日志进行分析。
  • rsyslog 在采集的过程中,就将我们的日志分门别类的放到指定的不同类型中。

实验环境

要求:需要2台可以通信的主机,如果自己没法ping通,请参考虚拟机的网络配置先进行设置。
以我的电脑为例:

  • xixi: 172.25.254.33
  • workstation: 172.25.254.22

journald

  • 服务名称:systemd-journald.service
    给我们的日志采集提供了一个程序-- journalctl,只是用来采集日志的,而不是用来产生日志的
    在这里插入图片描述

  • 默认日志存放路径: /run/log
    在这个joutnal中,有我们的系统ID,可由bootctl进行查看,与Machine ID 一致
    注意:每次重启之后,都会清空日志
    在这里插入图片描述

一. journalctl命令的用法

日志分析命令: journalctl

命令 作用
-n 3 日志的最新3条
–since “2020-04-28 17:20” 显示17:20后的日志
–until “2020-04-28 17:25” 显示日志到17:25
-o 设定日志的显示方式
-p 显示指定级别的日志
-F PRIORITY 查看可控日志级别
-u 指定查看服务
–disk-usage 查看日志大小
–vacuum-size=1G 设定日志存放大小
–vacumm-time=1W 日志在系统中最长存放时间
-f 监控日志

-o与-p的用法会在下面详细介绍

练习:

  • -n 3 日志的最新3条
    在这里插入图片描述

  • since+until
    在这里插入图片描述

  • -F PRIORITY查看可控日志级别
    在这里插入图片描述

  • 查看指定服务
    在这里插入图片描述

  • 查看详细信息
    systemctl status ssh 后重启sshd,此时PID会从5574变成6522
    在这里插入图片描述
    想要查看5574的详细日志,使用journalctl _PID=5574 _SYSTEMD_UNIT=sshd.service将条件添加在journalctl后
    在这里插入图片描述

  • 临时设置日志存放大小,与永久设置

 --vacuum
<think>我们正在解决Ubuntu22.04中无法采集messages日志的问题。根据之前的回答,我们知道Ubuntu22.04默认不生成/var/log/messages,但可以通过配置rsyslog来实现。用户现在再次提出这个问题,可能是配置过程中遇到了问题,或者需要更详细的指导。解决方案步骤:1.检查rsyslog是否安装并运行。2.创建自定义rsyslog配置文件,将日志定向到/var/log/messages。3.配置日志轮转,防止日志文件过大。4.重启rsyslog服务并验证。注意:用户可能之前尝试过配置但没有成功,因此我们需要详细说明每一步,并给出验证方法。根据引用[1]中提到的权限问题,我们需要确保创建的日志文件有正确的权限(syslog用户可写)。引用[2]和引用[3]似乎当前问题无关,引用[4]和引用[5]也不直接相关,因此我们主要参考之前回答中的步骤。具体步骤:步骤1:创建rsyslog配置文件在/etc/rsyslog.d/目录下创建一个新的配置文件,例如50-messages.conf。步骤2:配置日志规则将系统级日志(info及以上级别)写入/var/log/messages,同时排除一些已经单独记录的日志(如认证、计划任务、邮件等)。步骤3:设置日志轮转在/etc/logrotate.d/目录下创建messages文件,配置轮转规则。步骤4:重启服务并验证此外,如果用户仍然无法生成messages日志,我们需要提供故障排查步骤。下面按照要求生成回答。</think>### Ubuntu 22.04 无法采集 messages 日志解决方案 Ubuntu 22.04 默认使用 `journald` 日志系统,不再生成传统的 `/var/log/messages` 文件。以下是完整修复方案: #### 步骤 1:配置 rsyslog 生成 messages 日志 ```bash # 创建配置文件 sudo nano /etc/rsyslog.d/50-messages.conf ``` 添加内容: ```bash # 捕获所有 info 及以上级别日志(排除重复日志类型) *.info;authpriv.none;cron.none;mail.none -/var/log/messages # 包含内核日志 kern.* -/var/log/messages ``` **关键说明**: - `-` 前缀表示异步写入,避免 I/O 阻塞[^1] - 权限配置 `create 0640 syslog adm` 确保 syslog 用户可写入(权限问题参考引用[1]) #### 步骤 2:设置日志轮转策略 ```bash sudo nano /etc/logrotate.d/messages ``` 添加配置: ```bash /var/log/messages { daily rotate 7 compress delaycompress missingok create 0640 syslog adm # 权限设置 postrotate /usr/lib/rsyslog/rsyslog-rotate endscript } ``` **参数解析**: - `delaycompress`:延迟压缩前一个日志文件(便于近期问题排查) - `compress`:启用 gzip 压缩历史日志 - 权限设置参考 Linux 用户权限管理(引用[1]) #### 步骤 3:重启服务并验证 ```bash # 检查配置语法 sudo rsyslogd -N1 # 重启服务 sudo systemctl restart rsyslog # 验证日志生成 sudo ls -l /var/log/messages sudo tail -f /var/log/messages ``` 预期输出: ``` Jan 1 12:00:00 hostname kernel: [ 0.000000] Linux version... ``` #### 故障排查指南 1. **日志未生成**: ```bash # 检查服务状态 sudo systemctl status rsyslog --no-pager # 检查 journald 日志 journalctl -u rsyslog --since "5 min ago" ``` 2. **权限问题**: ```bash # 修复文件权限 sudo chown syslog:adm /var/log/messages sudo chmod 640 /var/log/messages ``` 3. **磁盘空间不足**: ```bash # 清理 journald 日志 sudo journalctl --vacuum-size=200M ``` > **技术原理**:Ubuntu 22.04 采用 `rsyslog` + `journald` 双日志系统。上述配置通过 rsyslog 规则将 `journald` 的日志转发到传统 messages 文件,同时保持日志结构化[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值