zoukankan      html  css  js  c++  java
  • linux学习-systemd-journald.service 简介

    过去只有 rsyslogd 的年代中,由于 rsyslogd 必须要开机完成并且执行了 rsyslogd 这个 daemon 之 后,登录文件才会开始记录。所以,核心还得要自己产生一个 klogd 的服务, 才能将系统在开机过 程、启动服务的过程中的信息记录下来,然后等 rsyslogd 启动后才传送给它来处理

    现在有了 systemd 之后,由于这玩意儿是核心唤醒的,然后又是第一支执行的软件,它可以主动呼 叫 systemd-journald 来协助记载登录文件~ 因此在开机过程中的所有信息,包括启动服务与服务若 启动失败的情况等等,都可以直接被记录到 systemd-journald 里头去!

    不过 systemd-journald 由于是使用于内存的登录文件记录方式,因此重新启动过后,开机前的登录文 件信息当然就不会被记载了。

    为此,我们还是建议启动 rsyslogd 来协助分类记录!也就是说, systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来记录以前及现在的所
    以数据到磁盘文件中,

    使用 journalctl 观察登录信息

    那么 systemd-journald.service 的数据要如何叫出来查阅呢?很简单!就透过 journalctl 即可!

    [root@study ~]# journalctl [-nrpf] [--since TIME] [--until TIME] _optional
    选项与参数:
    预设会秀出全部的 log 内容,从旧的输出到最新的讯息
    -n :秀出最近的几行的意思~找最新的信息相当有用
    -r :反向输出,从最新的输出到最旧的数据
    -p :秀出后面所接的讯息重要性排序!请参考前一小节的 rsyslogd 信息
    -f :类似 tail -f 的功能,持续显示 journal 日志的内容(实时监测时相当有帮助!)
    --since --until:设定开始与结束的时间,让在该期间的数据输出而已 
    _SYSTEMD_UNIT=unit.service :只输出 unit.service 的信息而已
    _COMM=bash :只输出与 bash 有关的信息
    _PID=pid :只输出 PID 号码的信息
    _UID=uid :只输出 UID 为 uid 的信息
    SYSLOG_FACILITY=[0-23] :使用 syslog.h 规范的服务相对序号来呼叫出正确的数据!
    
    范例一:秀出目前系统中所有的 journal 日志数据
    [root@study ~]# journalctl
    -- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 00:01:01 CST. --
    Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max 
     142.4M, leaving 213.6M of free 1.3G, current limit 142.4M).
    Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max
     142.4M, leaving 213.6M of free 1.3G, current limit 142.4M).
    Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpuset
    Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpu
    .....(中間省略).....
    Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19268]: finished 0anacron
    Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19270]: starting 0yum-hourly.cron
    Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19274]: finished 0yum-hourly.cron
    # 从这次开机以来的所有数据都会显示出来!透过 less 一页页翻动给管理员查阅!资料量相当大!
    
    范例二:(1)仅显示出 2015/08/18 整天以及(2)仅今天及(3)仅昨天的日志数据内容
    [root@study ~]# journalctl --since "2015-08-18 00:00:00" --until "2015-08-19 00:00:00" 
    [root@study ~]# journalctl --since today
    [root@study ~]# journalctl --since yesterday --until today
    
    范例三:只找出 crond.service 的数据,同时只列出最新的 10 笔即可
    [root@study ~]# journalctl _SYSTEMD_UNIT=crond.service -n 10
    
    范例四:找出 su, login 执行的登录档,同时只列出最新的 10 笔即可
    [root@study ~]# journalctl _COMM=su _COMM=login -n 10
    
    范例五:找出讯息严重等级为错误 (error) 的讯息!
    [root@study ~]# journalctl -p err
    
    范例六:找出跟登录服务 (auth, authpriv) 有关的登录文件讯息
    [root@study ~]# journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10
    

    有 journalctl 就真的可以搞定你的讯息数据啰!全部的资料都在这里面耶~再来假设一下, 你想要了解到登录档的实时变化, 那又该如何处置呢?现在,请开两个终端机,让我们来处理处理!

    # 第一号终端机,请使用底下的方式持续侦测系统!
    [root@study ~]# journalctl -f
    # 这时系统会好像卡住~其实不是卡住啦!是类似 tail -f 在持续的显示登录文件信息的!
    
    # 第二号终端机,使用底下的方式随便发一封 email 给系统上的账号!
    [root@study ~]# echo "testing" | mail -s 'tset' dmtsai
    # 这时,你会发现到第一号终端机竟然一直输出一些讯息吧!没错!这就对了!
    

    logger 指令的应用

    上面谈到的是叫出登录档给我们查阅,那换个角度想,『如果你想要让你的数据储存到登录文件当中』 呢?那该如何是好? 好用的家伙了!这个家伙可以传输很多信息,不过, 我们只使用最简单的本机信息传递~

    [root@study ~]# logger [-p 服务名称.等级] "讯息"
    选项与参数:
    服务名称.等级
    
    范例一:指定一下,让 dmtsai 使用 logger 来传送数据到登录文件内
    [root@study ~]# logger -p user.info "I will check logger command"
    [root@study ~]# journalctl SYSLOG_FACILITY=1 -n 3
    -- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 18:03:17 CST. --
    Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29710]: starting 0yum-hourly.cron
    Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29714]: finished 0yum-hourly.cron
    Aug 19 18:03:17 study.centos.vbird dmtsai[29753]: I will check logger command
    

    现在,让我们来瞧一瞧,如果我们之钱写的 backup.service 服务中,如果使用手动的方式来备份,亦 即是使用 "/backups/backup.sh log" 来执行备份时, 那么就透过 logger 来记录备份的开始与结束的 时间!该如何是好呢?这样作看看!

    [root@study ~]# vim /backups/backup.sh
    #!/bin/bash
    
    if [ "${1}" == "log" ]; then
            logger -p syslog.info "backup.sh is starting"
    fi
    source="/etc /home /root /var/lib /var/spool/{cron,at,mail}"
    target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
    [ ! -d /backups ] && mkdir /backups
    tar -zcvf ${target} ${source} &> /backups/backup.log
    if [ "${1}" == "log" ]; then
            logger -p syslog.info "backup.sh is finished"
    fi
    
    [root@study ~]# /backups/backup.sh log
    [root@study ~]# journalctl SYSLOG_FACILITY=5 -n 3
    Aug 19 18:09:37 study.centos.vbird dmtsai[29850]: backup.sh is starting
    Aug 19 18:09:54 study.centos.vbird dmtsai[29855]: backup.sh is finished
    

    保存 journal 的方式

    systemd-journald.servicd 的讯息是不会放到下一次开机后的,所以,重新启动后, 那之前的记录通通会遗失。虽然我们大概都有启动 rsyslogd 这个服务来进行后续的登录档放置,不 过如果你比较喜欢 journalctl 的存取方式,那么可以将这些数据储存下来喔!

    systemd-journald.service 的配置文件主要参考 /etc/systemd/journald.conf 的内容,因为预设的情况底下,配置文件的内容应该已经符合我 们的需求,所以这边就不再修改配置文件了。只是如果想要保存你的 journalctl 所读取的登录档, 那么就得要建立一个 /var/log/journal 的目录,并且处理一下该目录的权限,那么未来重新启动 systemd-journald.service 之后, 日志登录文件就会主动的复制一份到 /var/log/journal 目录下.

    # 1. 先处理所需要的目录与相关权限设定
    [root@study ~]# mkdir /var/log/journal
    [root@study ~]# chown root:systemd-journal /var/log/journal
    [root@study ~]# chmod 2775 /var/log/journal
    
    # 2. 重新启动 systemd-journald 并且观察备份的日志数据!
    [root@study ~]# systemctl restart systemd-journald.service
    [root@study ~]# ll /var/log/journal/
    drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec7a
    
  • 相关阅读:
    CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)
    Xcode Shortcuts
    In App Purchase
    CoreData
    Sandbox 文件存放规则
    在 mac os 上搭建 git server
    Git
    Git and Xcode
    心算技巧
    AppleScript
  • 原文地址:https://www.cnblogs.com/uetucci/p/7767759.html
Copyright © 2011-2022 走看看