04-journalctl 命令

@

1. 日志查询

1.1 输出所有日志

journalctl

日志如滔滔江水连绵不绝~~找不到目标也就并没有什么意义,所以要加一下条件,如下。

1.2 按服务查询

  • 方法一
[root@pre-iot journal]# journalctl _SYSTEMD_UNIT=docker.service
-- Logs begin at Thu 2021-02-18 20:17:12 CST, end at Fri 2021-02-19 14:25:03 CST. --
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.109 cache.device.go:94 [DEBUG] [cache] GetDevice: A0BB3ED304FA]
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.109 cache.cmdrecord.go:122 [DEBUG] [cache] GetActiveCmdRecordsFromSn sn A
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.110 mqttmessagehandler.go:60 [DEBUG] [mqttMessageHandler] active commands
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.112 mqttproducer.go:60 [DEBUG] [MqttProducer] ProduceMqttMessage]
  • 方法二
journalctl -u docker.service

1.3 按级别查询

  • 方法一
[root@pre-iot ~]# journalctl _SYSTEMD_UNIT=docker.service PRIORITY=6
-- Logs begin at Thu 2021-02-18 20:17:12 CST, end at Fri 2021-02-19 14:31:15 CST. --
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.109 cache.device.go:94 [DEBUG] [cache] GetDevice: A0BB3ED304FA]
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.109 cache.cmdrecord.go:122 [DEBUG] [cache] GetActiveCmdRecordsFromSn sn A
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.110 mqttmessagehandler.go:60 [DEBUG] [mqttMessageHandler] active commands
Feb 18 20:17:12 pre-iot dockerd-current[1658]: [2021-02-18 20:17:12:2188.112 mqttproducer.go:60 [DEBUG] [MqttProducer] ProduceMqttMessage]

关于级别说明:
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
一个字段有哪些值我们可以通过下边命令查看

查看字段值

[root@pre-iot ~]# journalctl -F PRIORITY
7
3
5
6
  • 方法二
journalctl -p err

或写成

journalctl -p 3

1.4 按时间查询

  • 查看2月19号15:10之后的日志
# journalctl --since "2021-02-19 15:10:00"

如果时间未填写,默认 00:00:00

  • 查看2月19号15:10到15:15的日志
# journalctl --since "2021-02-19 15:10:00" --until   "2021-02-19 15:15:00"
  • 获取昨天日志
 journalctl --since yesterday

说明:
1)此时不会带入今天日志
2)其它值如:today

  • 10点到2小时之后的日志
journalctl --since 10:00 --until "2 hour ago"

1.5 其他

  • 查看实时日志
journalctl -f
  • 查看最后n行
journalctl -n 200
  • 不分页显示
journalctl --no-pager
  • 适合阅读模式
[root@pre-iot ~]# journalctl -p 3 -o json-pretty
{
        "__CURSOR" : "s=00000000000000000000000000000000;i=4723d36;b=fa4d204b7c914952aa122f81601779d0;m=7f08844e1a8;t=5bb9b577d9228;x=66fc20d38ca0
        "__REALTIME_TIMESTAMP" : "1613650745725480",
        "__MONOTONIC_TIMESTAMP" : "8729659761064",
        "_BOOT_ID" : "fa4d204b7c914952aa122f81601779d0",
        "_TRANSPORT" : "journal",
        "_PID" : "1658",
        "_UID" : "0",
        "_GID" : "0",
        "_COMM" : "dockerd-current",
        "_EXE" : "/usr/bin/dockerd-current",
        "_CMDLINE" : "/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --e
        "_CAP_EFFECTIVE" : "1fffffffff",
        "_SYSTEMD_CGROUP" : "/system.slice/docker.service",
        "_SYSTEMD_UNIT" : "docker.service",
        "_SYSTEMD_SLICE" : "system.slice",
        "_MACHINE_ID" : "20190711105006363114529432776998",
        "_HOSTNAME" : "pre-iot",
        "CONTAINER_TAG" : "c9199286e1eb",
        "CONTAINER_ID" : "c9199286e1eb",
        "CONTAINER_ID_FULL" : "c9199286e1ebec7ab987c55c91bf241aa01dbf5f97c8e43519781bbbdaa97855",
        "CONTAINER_NAME" : "iot-remoteops",
        "MESSAGE" : "[2021-02-18 20:19:05:2188.724 cache.upgradetask.go:131 [ERROR] [cache] <nil>]",
        "PRIORITY" : "3",
        "_SOURCE_REALTIME_TIMESTAMP" : "1613650745725005"
}
  • 查看内核日志
journalctl -k

2. 清理和限制

2.1 查看占据磁盘空间

[root@pre-iot ~]# journalctl --disk-usage
Archived and active journals take up 1008.0M on disk.

2.2 清理日志

  • 按大小清理

说明:保留最新的1G日志

journalctl --vacuum-size=1G
  • 按时间清理

说明:清除一年之前的日志

journalctl --vacuum-time=1years

2.3 限制大小

- 文件示例

配置文件:/etc/systemd/journald.conf

SystemMaxUse=2G
SystemKeepFree=4G
SystemMaxFileSize=100M
RuntimeMaxUse=2G
RuntimeKeepFree=4G
RuntimeMaxFileSize=100M

- 说明

整体说明
1) 以 "System" 开头的选项用于限制磁盘使用量
也就是 /var/log/journal 的使用量。仅在 /var/log/journal 目录确实存在且可写时才有意义。
2) 以 "Runtime" 开头的选项用于限制内存使用量, 也就是 /run/log/journal 的使用量。
3)journalctl 与 systemd-journald 工具会忽略日志目录中 所有后缀名不等于 ".journal" 或 ".journal~" 的文件, 其他文件 永远不会被清理。

  • SystemMaxUse=
    作用:持久存储占用磁盘大小限制
    默认:默认值是10%空间与4G空间两者中的较小者;

  • RuntimeMaxUse=
    作用:占用内存大小限制(/run文件系统之内)
    默认:默认值是10%空间与4G空间两者中的较小者

  • SystemKeepFree=
    作用:添加新条目时需要保留的磁盘剩余空间
    默认:默认值是15%空间与4G空间两者中的较大者

  • RuntimeKeepFree=
    作用:内存保留的剩余空间
    默认:默认值是15%空间与4G空间两者中的较大者

  • SystemMaxFileSize=
    作用:限制单个日志文件的最大体积(到达此限制后日志文件将会自动滚动)
    默认: SystemMaxUse 值的1/8

  • RuntimeMaxFileSize=

作用:限制单个日志文件占用的内存大小(/run文件系统之内)
默认: RuntimeMaxUse= 值的1/8

  • 重启生效
systemctl restart systemd-journald

posted on 2021-09-18 14:49  运维开发玄德公  阅读(53)  评论(0编辑  收藏  举报  来源

导航