通过HTTP跟踪日志文件

8

出于安全考虑(我是开发人员),我没有访问我们的生产服务器的命令行访问权限,日志文件是在那里写入的。然而,我可以通过HTTP访问这些日志文件。是否有一种类似于“tail -f”的实用程序,只使用HTTP就可以“跟踪”普通文本文件?

5个回答

7
如果HTTP服务器接受返回资源的部分请求,您可以这样做。例如,如果HTTP请求包含以下标头:

Range: bytes=-500

响应将包含资源的最后500个字节。您可以获取它,然后将其解析为行等。我不知道是否有任何现成的客户端可以为您完成此操作-我会编写一个脚本来完成这项工作。
您可以使用Hurl来尝试使用标头(从公共可用资源中)。

+1 这非常有帮助。我想到了使用 HEAD 方法来获取资源的大小,以此来查看是否添加了任何新内容。再加上对特定范围的 GET 请求,我可能会有所发现。谢谢! - kurosch

3

0

您可以使用小型Java工具,使用Apche HTTP库通过Http读取日志文件。

HttpClient client = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet(uri);
    HttpResponse response = client.execute(request);
    BufferedReader rd = new BufferedReader(new InputStreamReader(
            response.getEntity().getContent()));
    String s = "";
    while ((s = rd.readLine()) != null) {
       //Process the line
    }

0

你可以使用 PsExec 在远程计算机上执行命令。 Windows 的 tail 命令可以在 http://tailforwin32.sourceforge.net/ 找到。

如果必须使用 HTTP,你可以编写一个轻量级的 Web 服务来轻松实现这一点。 例如:读取指定文件中从第 0 行到第 200 行的文本。


我无法远程执行任何操作,这会使安全人员非常担心。我希望在尝试自己编写之前已经存在某些东西。 - kurosch

0
我编写了一个简单的Bash脚本,每2秒获取URL内容并与本地文件output.txt进行比较,然后将差异追加到同一文件中。
我想在我的Jenkins管道中流式传输AWS Amplify日志。
while true; do comm -13 --output-delimiter="" <(cat output.txt) <(curl -s "$URL") >> output.txt; sleep 2; done

不要忘记先创建空文件output.txt

: > output.txt

查看数据流:

tail -f output.txt

更新:

我在这里找到了更好的使用wget的解决方案:

while true; do wget -ca -o /dev/null -O output.txt "$URL"; sleep 2; done

https://superuser.com/a/514078/603774


可以更新wget选项以使用curl吗? - ziggy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接