我想将stdout从某些程序登录到loggly。我找到了一些简单的实用程序(例如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
然后我运行我的程序并将其传递给我的loggly日志记录脚本:
./my_script.sh | ./log.sh
这似乎工作正常,但我想知道其他解决方案的所有复杂性是否因某些原因是必要的?
这里有什么问题吗?
谢谢!
答案 0 :(得分:1)
想想你的脚本做了什么。每行输入一次运行curl
。
想想这意味着什么。
如果记录10K行,则会产生10K进程。这将启动10K TCP连接。这是对计算资源的巨大浪费。
此外,您根本不处理错误(事实上,您通过将curl的stderr发送到/ dev / null来主动隐藏它们!)。这意味着脚本不仅效率低下,而且不可靠。
我建议使用set -eu
启动所有Bash脚本以退出未处理的错误,但这只是一步,而不是对上述内容的完整修复。