通过简单的bash脚本将stdout标记为loggly

时间:2015-01-09 07:33:43

标签: bash pipe stdout loggly

我想将stdout从某些程序登录到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

然后我运行我的程序并将其传递给我的loggly日志记录脚本:

./my_script.sh | ./log.sh

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

这里有什么问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

想想这意味着什么。

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

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

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