Systemd 日志系统

一、前言

昨天写了一篇文章,内容为:Systemd 常规操作与彩蛋,参考了 ArchLinux 官方文档并结合培训中的思路进行了部分修改补充。如果你懂得了基础的管理,那必然还需要做维护和审计。这时候就需要 Redhat7 中的systemd 架构下的——systemd-journald

下有俩例子对比 init.d 和 systemd :

service daemon ---> rsyslog ---> /var/log

systemd --> systemd-journald --> ram DB --> rsyslog -> /var/log

当 systemd 启动后,systemd-journald 也会立即启动。将日志存入RAM中,当rsyslog 启动后会读取该RAM并完成筛选分类写入目录 /var/log 。所以牵扯到DB,操作就会很舒服。

二、基础知识

描述RHEL7的基本系统日志(syslog)架构

  • 进程和操作系统内核需能够为发生的事件记录日志
  • 日志内容可用于系统审计和故障排除
  • 默认日志存储在 /var/log 目录中
  • RHEL的日志系统基于 syslog 协议,许多程序使用此系统记录事件,并将齐整理到日志
    文件中
  • RHEL7的日志系统由systemd-journald和 rsyslog 两服务组成

systemd-journald和rsyslog:

  • 一种改进的日志管理服务,是 syslog 的补充,收集来自内核、启动过程早期阶段、标
    准输出、系统日志,守护进程启动和运行期间错误的信息
  • 将消息写入到结构化的事件日志中(数据库),默认情况下重启后删除
  • syslog 的信息也可以由 systemd-journald 转发到 rsyslog 中进一步处理
  • 默认情况下,systemd 的日志保存在 /run/log/journal 中,系统重启就会清除,这是RHEL7的新特性。通过新建 /var/log/journal 目录,日志会自动记录到这个目录中,并永久存储。
  • rsyslog 服务随后根据优先级排列日志信息,将它们写入到 /var/log目录中永久保存

三、常规操作

systemd提供了自己的日志系统(logging system),称为 journal。使用 systemd 日志,无需额外安装日志服务(syslog)。读取日志的命令:

# journalctl 

​ 重要:显示所有的日志信息,notice或warning以粗体显示,红色显示error级别以上的信息

显示最后行数的日志:

# journalctl -n

显示最详细信息:

# journalctl -f

​ 提示:其实它很像tailf命令,默认显示十行。随着匹配日志的增长而持续输出。

只显示错误、冲突和重要告警信息

# journalctl -p err..alert

​ 提示:也可以使用数字表示哟。

显示指定单元的所有消息:

# journalctl -u netcfg

​ 重要:一般 -u 参数是 systemctl status 调用的参数之一(journalctl -l 可查看所有)

​ 提示:如果希望显示 kernel 的信息需要使用 journalctl -k 进行内核环缓存消息查询。

显示从某个时间 ( 例如 20分钟前 ) 的消息:

# journalctl --since "20 min ago"
# journalctl --since today
# journalctl --until YYYY-MM-DD

显示本次启动后的所有日志:

# journalctl -b

不过,一般大家更关心的不是本次启动后的日志,而是上次启动时的(例如,刚刚系统崩溃了)。可以使用 -b 参数:

  • journalctl -b -0 显示本次启动的信息
  • journalctl -b -1 显示上次启动的信息
  • journalctl -b -2 显示上上次启动的信息
  • journalctl -b -2 只显示错误、冲突和重要告警信息

显示特定进程的所有消息:

# journalctl _PID=1
1. \_COMM 显示特定程序的所有消息,例如:``journalctl /usr/lib/systemd/systemd``
2. \_EXE 进程的可执行文件的路径
3. \_PID 进程的PID
4. \_UID 运行该进程用户的UID
5. _SYSTEMD_UNIT 启动该进程的 `systemd` 单元

​ 提示:以上筛选条件可组合使用,例如:journalctl _SYSTEMD_UNIT=sshd.service _PID=1182

显示更多输出方案:

# journalctl -o short|short-iso|short-percise|short-monotonic|verbose|export|json|json-pretty|json-sse|cat

四、一些其他

Q:你说有RAM的DB文件,在哪里?

A:文件位于 /run/log/joutmal ,下附命令。

➜  ~ cd /run/log/journal
➜ journal ll
total 0
drwxr-s---+ 2 root systemd-journal 60 Aug 27 02:08 b30db55783924f1ea633ca636730d409
➜ b30db55783924f1ea633ca636730d409 cat system.journal

Q:那 joutnal 有配置文件吗,有的话在哪呢?

A:有的。容量定义文件位于 /etc/systemd/journald.conf ,日志调整文件位于 /etc/logrotate.conf

日志系统同样会进行轮转,每月触发。默认情况下,日志大小不能超过所处文件系统的10%,也不可使所处文件系统空间低于15%。在 /etc/systemd/journald.conf 可进行大小容量上的调节;而在 /etc/logrotate.conf 则定义了那些日志文件记录、怎么记录、记录多少。

Q:那你说到了日志轮询,在哪里实现呢?

A:在计划任务实现。

➜  ~ sudo cat /etc/cron.daily/logrotate
\#!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

Q:在 journalctl -p 一节说可以使用数字表达,有详细吗?

A:如下。但是建议使用英文表达,因为不同发行版本可能编码有不同,而英文是标准是通用。

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

五、结文总结

通过作者参加 RHCE 工程师的培训,分享了 systemd 与 journalctl 的使用。

希望你可以喜欢。如果 ITer奋斗点滴对您有所帮助,请通过赞赏鼓励我坚持下去。

systemd 之 journalctl的更多相关文章

  1. systemd的作用

    早上群上讨论了一下systemd的作用,还导致了一个人的直接退群,出于求知心理,搜索了一些systemd,对此也作出了一些相应的整理: 一.systemd的诞生: 学习嵌入式bootloader与ke ...

  2. ubuntu 安装Elasticsearch5.0(Debian包)

    通过Debian包安装Elasticsearch Elasticsearch的Debian包可以从downloaded from our website或APT repository 它可以用于在任何 ...

  3. linux commands

    abrt-cli --since ;查看abrt捕捉的异常 alias ;别名,alias rm='rm -i':使用“ \rm ” 使用原命令 alsamixer ;图形音量调节,q 增加左声道, ...

  4. 谈一下Docker与Kubernetes集群的日志和日志管理

    本文的测试环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 日志对于我们管理Kubernetes集群及其上的 ...

  5. Linux 下的 netfilter 认识与常规操作

    Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...

  6. The All-in-One Note

    基础 操作系统 I/O 模型 阻塞式 I/O 模型(blocking I/O) 描述:在阻塞式 I/O 模型中,应用程序在从调用 recvfrom 开始到它返回有数据报准备好这段时间是阻塞的,recv ...

  7. 安装KubeSphere

    1. KubeSphere 是什么 1.1. 官方解释 KubeSphere是一个分布式操作系统,提供以Kubernetes为核心的云原生堆栈,旨在成为第三方应用程序的即插即用架构,以促进其生态系统的 ...

  8. linxu 查看运行日志

    journalctl - 检索 systemd 日志 journalctl 可用于检索 systemd(1) 日志(由 systemd-journald.service(8) 记录). 如果不带任何参 ...

  9. Linux Hardening Guide

    文章转载自:https://madaidans-insecurities.github.io/guides/linux-hardening.html 1. Choosing the right Lin ...

随机推荐

  1. 阿里巴巴Java开发手册———总结

    前言 阿里巴巴Java开发手册———个人追加的见解和补充(一) 阿里巴巴Java开发手册———个人追加的见解和补充(二) 阿里巴巴Java开发手册———个人追加的见解和补充(三) 阿里巴巴Java开发 ...

  2. 牛X的规则引擎urule2

    牛X的规则引擎urule2 教程:http://wiki.bsdn.org/pages/viewpage.action?pageId=75071499

  3. 【杂谈】从CGI到Servlet

    访问服务器的静态页面 每个Web服务器都运行着一个HTTP服务软件,用于响应web浏览器的请求,返回客户想要的页面.HTTP服务器都会有一个文件夹用于放置相关的页面文件,默认是  /user/loca ...

  4. Spring MVC - MultipartFile实现文件上传(单文件与多文件上传)

    准备工作: 需要先搭建一个spirngmvc的maven项目 1.加入jar包 <dependency> <groupId>commons-fileupload</gro ...

  5. 【SpringBoot系列4】SpringBoot定制自己的bean

    起因:SpringBoot我是越用越喜欢,但当SpringBoot出了问题的时候,我却无从下手,因为封装实在是太高度化了.然后之前有一个需求,使用SpringBoot提供的StringRedisTem ...

  6. 并发编程之 CopyOnWriteArrayList 源码剖析

    前言 ArrayList 是一个不安全的容器,在多线程调用 add 方法的时候会出现 ArrayIndexOutOfBoundsException 异常,而 Vector 虽然安全,但由于其 add ...

  7. ASP.NET MVC的JavaScriptResult

    前段时间,我们有学习<在ASP.NET MVC使用JavaScriptResult>http://www.cnblogs.com/insus/p/3960994.html ,今天我们来加强 ...

  8. MVC应用程序的jQuery代码重构

    先看看这篇<在jQuery定义自己函数>http://www.cnblogs.com/insus/p/3415444.html 程序越看越是有重构的地方. 先看1部分,由于在#16代码有宣 ...

  9. SQL语句,表中的列字段字符串合并 和 字符串拆分成表

    研究了两天也没有研究的很明白,但是问题做出来了, 如下表中的字段,第一级是由逗号隔开字符串,第二级是由空格隔开的字符串,现在想取空格字符串中的第几个空格前后的字符串, 所用到的工具,1.是 for x ...

  10. Java多线程编程之单例模式

    延迟加载:“懒汉模式” 延迟加载是指在调用getInstance()方法时创建实例.常见的方法是在getInstance()方法中实例化new.实现代码如下: 但是因为getInstance()中有多 ...