gue*_*tli 5 syslog journald journalctl
我寻找一种可靠导出 journalctl 日志的方法。
我可以使用该--since=...
选项,但这有点模糊。
在我的情况下,脚本会journalctl --output=json
每十分钟调用一次。
我不想错过任何一行,并且(如果可能)我想避免重复行。
问这个问题几天后,我遇到了 RELP:https : //en.wikipedia.org/wiki/Reliable_Event_Logging_Protocol
您可以安装 syslog 守护程序,例如 rsyslog(Red Hat 派生系统上的默认设置)。这将以更向后兼容的方式记录所有日志条目,当然您可以根据需要指定自定义日志。
如果不需要实时导出日志,可以journalctl --since
像有人说的那样使用。您可以每天在午夜使用时间说明符运行它yesterday
以获取准确的 24 小时日志。
如果您真的需要在短时间内获取日志并且不想错过任何一个条目,那么您需要了解cursor。对于每个日志条目 journalctl 将提供一个游标,可用于直接跳到该日志条目 with --cursor
,或紧随其后的日志条目 with --after-cursor
。考虑以下示例 JSON:
{
"__CURSOR" : "s=6ad7dcf190f3409c8bf8086fec22888c;i=286c44;b=6b134acc25e94d69b4713422b7c773be;m=46f7a97d25;t=55f5e93131a32;x=aecce3d8b96df5dc",
"__REALTIME_TIMESTAMP" : "1512234682620466",
"__MONOTONIC_TIMESTAMP" : "304802790693",
"_BOOT_ID" : "6b134acc25e94d69b4713422b7c773be",
"PRIORITY" : "6",
"_MACHINE_ID" : "770056613d554df2abcb7757ba2e6270",
"_HOSTNAME" : "dalaran.example.us",
"_PID" : "1",
"_UID" : "0",
"_SELINUX_CONTEXT" : "system_u:system_r:init_t:s0",
"_GID" : "0",
"_CAP_EFFECTIVE" : "3fffffffff",
"SYSLOG_FACILITY" : "3",
"SYSLOG_IDENTIFIER" : "systemd",
"_TRANSPORT" : "journal",
"_COMM" : "systemd",
"_EXE" : "/usr/lib/systemd/systemd",
"_CMDLINE" : "/usr/lib/systemd/systemd --switched-root --system --deserialize 25",
"_SYSTEMD_CGROUP" : "/init.scope",
"_SYSTEMD_UNIT" : "init.scope",
"_SYSTEMD_SLICE" : "-.slice",
"CODE_FILE" : "../src/core/unit.c",
"CODE_LINE" : "1505",
"CODE_FUNC" : "unit_status_log_starting_stopping_reloading",
"MESSAGE_ID" : "de5b426a63be47a7b6ac3eaac82e2f6f",
"MESSAGE" : "Stopping OpenSSH server daemon...",
"UNIT" : "sshd.service",
"_SOURCE_REALTIME_TIMESTAMP" : "1512234682615526"
}
Run Code Online (Sandbox Code Playgroud)
出于您的目的,这__CURSOR
是一个不透明的 blob。只需捕获您在一次调用中收到的最后一个日志条目的值,journalctl
并将其提供给下一次调用:
journalctl --output=json --after-cursor="s=6ad7dcf190f3409c8bf8086fec22888c;i=286c44;b=6b134acc25e94d69b4713422b7c773be;m=46f7a97d25;t=55f5e93131a32;x=aecce3d8b96df5dc" ...
Run Code Online (Sandbox Code Playgroud)
小智 1
使用 --since 选项。要获取最近 10 分钟的日志,只需使用:
--since -10m
Run Code Online (Sandbox Code Playgroud)
这将为您提供当前时间前 10 分钟的日志。请参阅手册页https://www.freedesktop.org/software/systemd/man/journalctl.html以及有关 systemd 时间规范的页面https://www.freedesktop.org/software/systemd/man/systemd.time .html#
归档时间: |
|
查看次数: |
11814 次 |
最近记录: |