1

我想将一些程序的标准输出记录到 loggly 中。我发现了一些简单的实用程序(例如https://github.com/meatballhat/loggly-pipehttps://github.com/segmentio/loggly-cat),但它们看起来像重新矫枉过正。

我可以做这么简单的事情吗:

log.sh

#!/bin/bash
while read line
do
    echo "$line"
    curl -H "content-type:text/plain" -d "$line" https://logs-01.loggly.com/inputs/<my-token>/tag/tag1,tag2/ >/dev/null 2>&1
done < /dev/stdin

然后我运行我的程序并将其通过管道传输到我的日志记录脚本:

./my_script.sh | ./log.sh

这似乎工作正常,但我想知道其他解决方案的所有复杂性是否出于某种原因是必要的?

这里有什么问题吗?

谢谢!

4

1 回答 1

1

想想你的脚本做了什么。它curl 每行输入运行一次。

想想这意味着什么。

如果您记录 10K 行,那么您将产生 10K 进程。这将启动 10K TCP 连接。这是对计算资源的巨大浪费。

此外,您根本不处理错误(实际上,您通过将 curl 的 stderr 发送到 /dev/null 来主动隐藏它们!)。这意味着脚本不仅效率低下,而且不可靠。

我建议启动所有 Bash 脚本set -eu以退出未处理的错误,但这只是一个步骤,而不是对上述问题的完整修复。

于 2015-01-09T07:43:52.677 回答