1

一部のプログラムから stdout をログに記録したいと考えています。私が見つけたいくつかの単純なユーティリティがあります (例: 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

これはうまくいくように見えますが、他のソリューションのすべての複雑さが何らかの理由で必要なのだろうか?

ここで何か問題が発生する可能性はありますか?

ありがとう!

4

1 に答える 1

1

スクリプトが何をするかを考えてください。入力行ごとに 1 回実行されcurl ます。

それが何を意味するか考えてみてください。

10K 行をログに記録すると、10K プロセスが生成されます。これにより、10K TCP 接続が開始されます。これは、コンピューティング リソースの大幅な浪費です。

また、エラーをまったく処理しません (実際、curl の stderr を /dev/null に送信することで積極的に非表示にしています!)。これは、スクリプトが非効率であるだけでなく、信頼性が低いことを意味します。

すべての Bash スクリプトを で開始しset -euて未処理のエラーで終了することをお勧めしますが、これは 1 つのステップにすぎず、上記の完全な修正ではありません。

于 2015-01-09T07:43:52.677 に答える