systemd的统一日志记录系统journalctl,助力问题定位

systemd程序是进程ID为1的进程,负责以所需的方式初始化系统。systemd由内核直接启动,信号 9(该信号通常会终止进程)对它不起作用。systemd统一管理所有 Unit 的启动日志,好处是仅用journalctl一个命令,查看所有日志(内核日志和应用日志)。

systemd-journald.service从内核、用户进程、标准输入和系统服务错误收到的日志记录信息,维护结构化的索引日记,并以此方式来收集和储存日志记录数据。systemd-journald服务默认处于启用状态。

显示特定进程 ID 生成的讯息:

# journalctl _PID=1039

显示属于特定用户 ID 的讯息:

# journalctl _UID=1000

仅显示指定服务生成的讯息:

# journalctl _SYSTEMD_UNIT=avahi-daemon.service

如果指定了两个不同的字段,则仅显示同时与两个表达式匹配的项

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1488

如果两个匹配条件引用了相同的字段,则显示与两个表达式中任意一个匹配的所有项

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service

可以使用“+”分隔符将两个表达式组合成一个逻辑“OR”。以下示例将显示来自进程 ID 为 1480 的 Avahi 服务进程的所有讯息,以及来自 D-Bus 服务的所有讯息:

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1480 + _SYSTEMD_UNIT=dbus.service

日记设为永久

默认情况下,日记在 /run/log/journal/ 中储存日志数据。由于 /run/ 目录具有易失本性,因此,在重引导时会丢失日志数据。要永久保存日志数据,/var/log/journal/ 目录必须存在且具有正确的所有权和权限,如此,systemd-journald 服务便可在其中储存其数据。

以 root 身份编辑journald.conf。

# vi /etc/systemd/journald.conf

将包含Storage= 的行取消注释,并更改为

[...]

[Journal]

Storage=persistent

#Compress=yes

[...]

保存该文件,然后重启 systemd-journald:

systemctl restart systemd-journald

如果将日记日志数据保存到永久位置,这些数据最多占用/var/log/journal 所在文件系统空间的10%。如果 /var/log/journal 位于一个 30 GB /var 的分区中,则日记最多会占用 3 GB 磁盘空间。要更改此限制,请更改(并取消注释)SystemMaxUse 选项:

SystemMaxUse=50M

调用systemd错误

举例:如何找出并修复在 apache2 启动期间 systemd 报告的错误。

尝试启动 apache2 服务:

# systemctl start apache2

Job for apache2.service failed. See 'systemctl status apache2' and 'journalctl -xn' for details.

我们来看看该服务的状态如何:

# systemctl status apache2

apache2.service - The Apache Webserver

  Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)

  Active: failed (Result: exit-code) since Tue 2014-06-03 11:08:13 CEST; 7min ago

  Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND \

          -k graceful-stop (code=exited, status=1/FAILURE)

导致错误的进程 ID 为 11026。

显示与进程 ID 11026 相关的详细讯息:

# journalctl -o verbose _PID=11026

[...]

MESSAGE=AH00526: Syntax error on line 6 of /etc/apache2/default-server.conf:

[...]

MESSAGE=Invalid command 'DocumenttRoot', perhaps misspelled or defined by a module

[...]

修复 /etc/apache2/default-server.conf 中的拼写错误,启动 apache2 服务,然后列显其状态:

# systemctl start apache2 && systemctl status apache2

apache2.service - The Apache Webserver

  Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)

  Active: active (running) since Tue 2014-06-03 11:26:24 CEST; 4ms ago

  Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND

          -k graceful-stop (code=exited, status=1/FAILURE)

Main PID: 11263 (httpd2-prefork)

  Status: "Processing requests..."

  CGroup: /system.slice/apache2.service

          ├─11263 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

          ├─11280 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

          ├─11281 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

          ├─11282 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

          ├─11283 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

          └─11285 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

参考

journalctl:查询systemd日记

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 systemd即为system daemon,是linux下的一种init软件,由Lennart Poett...
    JameShen_Wen阅读 3,255评论 0 0
  • 原文链接如果有效,请点击原文链接查看。 原文:http://www.ruanyifeng.com/blog/201...
    f95da03ef3b2阅读 2,187评论 0 0
  • 转载于:http://www.ruanyifeng.com/blog/2016/03/systemd-tutori...
    A孑木阅读 1,603评论 0 0
  • 日志介绍rsyslog日志管理journalctlMySQL管理日志 一、日志介绍 (一)日志的基本概念 日志:将...
    哈喽别样阅读 3,652评论 0 0
  • 日志介绍 日志 记录历史事件:时间,地点,人物,事件 日志级别:事件的关键性程度,Loglevel 系统日志服务 ...
    Ben0606阅读 5,707评论 0 2

友情链接更多精彩内容