我知道像'jq'这样的工具可以让你在命令中添加一个管道并对其进行格式化,但你不能将它用于从本地服务器显示实时json日志的情况。有没有可以实现这一目标的工具?
答案 0 :(得分:0)
我假设您使用安装了systemd
的默认Linux发行版,并且所有服务都将与systemd
通信以生成协议条目。
回到linux那天只创建了日志文件,但是他们变得很大。然后他们添加logrotate
以保持更清洁。
最新的Linux发行版使用systemd
来存储协议条目,这要好得多。
要阅读协议,您需要先找到您要查找的服务
列出与systemd
呼叫相关联的所有服务...
systemctl list-units | grep service
如果你真的不能使用管道,你可以在没有grep
的情况下使用它。
无论如何,选择您喜欢的服务并通过journalctl
调用其协议。以下是一些例子......
journalctl -u ssh.service -p warning -n 30 # (sudo) last 30 warnings and errors SSH created
journalctl -u apache2.service -p err --no-pager # (sudo) all Apache entries without using the pager (less)
journalctl -k -p err --since today # (sudo) kernel error messages of today
向其添加选项-o json
或-o json-pretty
,您将获得所需的输出。您还可以添加选项-F
或--follow
以显示最新的日记帐分录,并在将新条目附加到日记帐后不断打印新条目。这样,您可以使用conky
制作很酷的背景。
您还可以通过systemctl
...
systemctl status apache2.service # (sudo) status of Apache
通过这种方式你可以打印......
来自本地服务器的实时json日志
就像你想要的那样,没有使用jq
......
admin@suse:~$ journalctl -u apache2.service -p warning -n 1 -o json-pretty --no-pager
{
"__CURSOR" : "s=65cbb17b253f44c0b800cee690cfb9ee;i=187fd;b=d3effa777ddf4ba9b4f82f126be4439e;m=51cb2bb2d53;t=54b7c4c9ffbeb;x=9fd3b1bc1e50a798",
"__REALTIME_TIMESTAMP" : "1490372117134315",
"__MONOTONIC_TIMESTAMP" : "5620815834451",
"_BOOT_ID" : "d3effa777ddf4ba9b4f82f126be4439e",
"_TRANSPORT" : "syslog",
"_SYSTEMD_SLICE" : "system.slice",
"_MACHINE_ID" : "dc3b59f36cc34cfa8873c5b530577a2a",
"_HOSTNAME" : "suse",
"SYSLOG_FACILITY" : "1",
"_UID" : "33",
"_GID" : "33",
"PRIORITY" : "4",
"SYSLOG_IDENTIFIER" : "/usr/lib/cgi-bin/captainlog/search.sh",
"MESSAGE" : "Request for the specified frontend is not possible. REMOTE_ADDR: xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxx:xxxx",
"_COMM" : "logger",
"_CAP_EFFECTIVE" : "0",
"_SYSTEMD_CGROUP" : "/system.slice/apache2.service",
"_SYSTEMD_UNIT" : "apache2.service",
"SYSLOG_PID" : "21314",
"_PID" : "21314",
"_SOURCE_REALTIME_TIMESTAMP" : "1490372117133991"
}