2015-01-09 3 views
1

일부 프로그램에서 stdout을 loggly에 로그하려고합니다. 밖에있는 몇 가지 간단한 유틸리티 (예 : https://github.com/meatballhat/loggly-pipehttps://github.com/segmentio/loggly-cat)가 있지만 과장된 것처럼 보입니다.간단한 bash 스크립트를 통해 loggly로 표준 출력 파이프

log.sh :

./my_script.sh | ./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 로그인 스크립트에 내 프로그램 및 파이프를 실행

나는이 간단한 일을 멀리 얻을 수 괜찮 으면 좋겠지 만, 거기에있는 다른 솔루션의 모든 복잡성이 어떤 이유에서 필요한지 궁금합니다.

여기에 문제가 있습니까?

감사합니다.

+0

그런데'

+0

우수. 더 적은 코드가 더 좋습니다. – Nate

답변

1

스크립트의 기능에 대해 생각해보십시오. 입력 행 당 한 번 curl을 실행합니다.

의미가 무엇인지 생각해보십시오.

10K 회선을 기록하면 10K 개의 프로세스가 생성됩니다. 그러면 10K TCP 연결이 시작됩니다. 이것은 컴퓨팅 리소스의 엄청난 낭비입니다.

또한 오류를 전혀 처리하지 않습니다 (실제로는 curl의 stderr를/dev/null로 보내 숨김). 이것은 스크립트가 비효율적 일뿐만 아니라 신뢰할 수 없다는 것을 의미합니다.

처리되지 않은 오류를 종료하려면 set -eu의 모든 Bash 스크립트를 시작하는 것이 좋지만 위의 해결 방법이 아니라 한 단계에 불과합니다.

+0

그래서 아마도 TCP 연결을 일괄 처리하는 것은 낭비가 적을 것이고 다른 솔루션이 어느 정도까지는 그렇게한다고 가정합니다. 오류를 처리하고 싶지는 않습니다. 어떤 이유로 든 작동하지 않는 경우 오류가 발생하거나 중단되지 않도록하고 싶습니다. 차라리 뭔가 다른 것보다 통나무를 얻지 않을거야. set -eu를 사용하여 종료하면 첫 번째 my_script.sh가 계속 실행됩니까? – Nate

+0

아니요, 파이프 라인의 두 번째 스크립트가 중지되면 첫 번째 스크립트는 SIGPIPE를 받게됩니다. 실패한 로그 행을 파일이나 다른 것에 쓰는 것이 좋습니다. –