我想从某些程序记录标准输出来登录。 我发现了一些简单的实用程序(例如 https://github.com/meatballhat/loggly-pipe 和 https://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
这似乎工作正常,但我想知道出于某种原因,其他解决方案的所有复杂性是否都是必要的?
这里会出什么问题吗?
谢谢!
想想你的脚本是做什么的。 它每行输入运行一次curl
。
想想这意味着什么。
如果您记录 10K 行,则会生成 10K 个进程。 这将启动 10K TCP 连接。 这是对计算资源的巨大浪费。
此外,你根本不处理错误(事实上,你通过将curl的stderr发送到/dev/null来主动隐藏它们!)。 这意味着脚本不仅效率低下,而且不可靠。
我建议使用 set -eu
启动所有 Bash 脚本以在未处理的错误时退出,但这只是一个步骤,而不是对上述问题的完全修复。