当一个进程登录到 systemd 时,它的进程名称被记录并显示为 journalctl 输出中的标识符。
$ systemd-cat echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
...
Jul 25 13:52:26 mycomputer echo[25098]: test
Run Code Online (Sandbox Code Playgroud)
但是,过滤该名称似乎不起作用。
$ journalctl -f -t echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
$ journalctl -f -u echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Run Code Online (Sandbox Code Playgroud)
当我手动指定标识符时,会显示标识符而不是进程名称并且过滤工作。
$ systemd-cat -t myapp echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:56:08 mycomputer …
Run Code Online (Sandbox Code Playgroud) 我寻找一种可靠导出 journalctl 日志的方法。
我可以使用该--since=...
选项,但这有点模糊。
在我的情况下,脚本会journalctl --output=json
每十分钟调用一次。
我不想错过任何一行,并且(如果可能)我想避免重复行。
问这个问题几天后,我遇到了 RELP:https : //en.wikipedia.org/wiki/Reliable_Event_Logging_Protocol
我很难理解日志是如何在 linux 上工作的。
自从加入了systemd,看起来容易了一些,但是我还有几个概念还是不能完全理解。
给定一个带有 journalctl 的系统,我想向远程主机发送一些日志消息。为此,我安装了 rsyslog 并配置了 freeradius,以便将其日志输出到 local3,然后将 rsyslog 配置为将 local3 下的这些消息转发到远程 syslog 服务器。现在,系统日志是否在 rsyslog 和 journalctl 之间共享?这会导致任何形式的冲突吗?
除此之外:谁控制写入/var/log/messages 的内容?某个应用程序如何将其日志输出到此文件?它是由 rsyslog 管理的吗?通过系统?
如果有人能帮我理解整个 linux 日志服务,那就太好了。
journalctl -u ssh
打印与 ssh 单元关联的所有记录。但是我怎样才能获得与 ssh 单元无关的所有记录呢?不起作用的事情:journalctl -u '!ssh'
; journalctl '!_SYSTEMD_UNIT=ssh'
; journalctl '_SYSTEMD_UNIT!=ssh'
。文档并不表明这是可能的,但我仍然充满希望。;-)
我正在使用 Ubuntu 16.04 服务器,创建了一个基本的 nodejs 脚本并将其打包在一个简单的 systemd 服务中。
api.service 的内容/lib/systemd/system/api.service
:
[Unit]
Description=api
After=network.target
[Service]
WorkingDirectory=/var/node/api
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5s
StartLimitInterval=60s
StartLimitBurst=5
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
当我用 看日志时journalctl -u api.service -n -f
,似乎我的一些脚本输出行没有被记录,特别是当脚本在短时间内产生大量日志行时。
例如,如果 nodejs 脚本只是一个简单的 for 循环,输出前 3000 个整数,那么日志中似乎只记录了大约 2500 行。
index.js 的内容在/var/node/api/index.js
:
for (var i = 1; i <= 3000; i++) {
console.log(i);
}
console.log("end of script");
Run Code Online (Sandbox Code Playgroud)
查看日志时journalctl -u api.service -n -f
,我只得到大约 2500 行:
May 04 13:52:15 test systemd[1]: Stopping api...
May 04 13:52:15 …
Run Code Online (Sandbox Code Playgroud) 我在 CentOS 上有各种环境,CentOS7+ 上的主机都带有 journalctl 命令,所以如果我需要查看系统日志,我可以这样做。
但是在另一个机器上它是 CentOS6.6,我得到了没有找到命令的错误。
谁能启发如何在没有journalctl的情况下检查CentOS6.6的登录?或者如何安装/启用 journalctl?
非常感谢。