我正在尝试使用 curl 将日志发送到远程服务器。我尝试了以下命令,但没有任何反应
journalctl -o json -f | curl -H "content-type:application/json" -d @- http://logs
有任何想法吗?
答案1
看起来通过互联网检索 JSON 事件的正确方法可能是systemd-journal-gatewayd
您需要重写另一端以从服务器提取事件,但根据文档,如果将参数添加follow
到 url,服务器可以传输 JSON 数据:
curl -H 'Accept: application/json' 'http://localhost:19531/entries?follow'
如果您的接收应用程序跟踪已收到的事件,则它可以使用范围标头来避免在必须重新连接时接收重复的事件:
-H 'Range: cursorname:number_of_events_to_skip'
从文档中无法清楚地看出cursorname
应该是什么,我怀疑这是您编写的一个唯一名称,以便 gatewayd 可以跟踪它向您的应用程序显示的事件以及其他可能也需要日志条目的应用程序。
或者你可以使用systemd-journal-remote
在远程计算机上以本机格式接收日记条目,然后在本地使用 journalctl 接收 JSON 数据。
答案2
您可能需要-X POST
在那里确定数据是如何发送到服务器的,尽管这似乎是暗示的-d
。
在 journalctl 中的使用-f
使其像tail -f
预期的那样运行,因为流保持打开状态。这告诉我您的意图是创建一个持久的 HTTP 隧道,通过 http 将新的日志行发送到日志服务器。根据手册页:
在正常工作情况下,curl 会使用标准缓冲输出流,其效果是它会分块输出数据,而不一定在数据到达时准确输出。
这种行为不符合您的意图。您可能还想使用-N
或--no-buffer
选项运行,以便每行在进入时都通过管道传输到 curl。