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