fluentd의 require_ack_response 설정이 역시 필수 설정이라고 재인식했을 때의 검증 메모
1. 검증 배경
참고 기사
Fluentd v0.12의 At-least-once Semantics 사용
fluentd에서 로그가 누락 될 가능성을 생각하십시오.
등으로 fluentd v0.12를 사용했을 때 "require_ack_response를 반드시 설정해 두도록"이라는 노하우는 오이타 침투하게 되었다고 생각된다.
다만, fluentd를 운용하는 가운데, require_ack_response의 설정 누설을 깨닫지 않고, 수신측의 fluentd를 reload해 버리는 경우도 생각할 수 있다.
그래서 실제 운용하에서 이 설정이 어느 정도의 효과를 발휘하는지를 검증해 보았다.
2. 검증 환경
2-1. 구성도
그림으로 할 정도는 아니지만 fluentd의 송신측과 수신측의 EC2를 준비한다.
OS와 fluentd 버전은 다음과 같습니다.
2-2. 검증 환경
환경
버전
OS
우분투14.04
fluentd(td-agent)
0.12.20
설치가 쉽기 때문에 td-agent를 이용했다.
2-3. 설정 파일
송신측 및 수신측의 설정 파일은 이하와 같다.
송신자의 td-agent.conf
<source>
type forward
@label @raw
</source>
<label @raw>
<match test.**>
buffer_type file
buffer_path /tmp/hoge.buffer
flush_interval 1s
type forward
require_ack_response #ここの設定をコメントアウトしたりする
flush_at_shutdown true
<server>
host [受信側のホスト]
port 24224
</server>
</match>
</label>
수신측의 td-agent.conf
<source>
type forward
@label @raw
</source>
<label @raw>
<match test.**>
buffer_type file
buffer_path /tmp/hoge.buffer
type file
path /tmp/hoge.log
</match>
</label>
3. 검증 결과
fluent-cat을 사용하여 1,000건의 데이터를 전송하면서 10sec마다 reload하는 패턴과 logroteate하는 패턴의 2개의 케이스를 검증해 본다.
송신측
for i in `seq 1 1000`;do echo "{\"test\":\"$i\"}" | /opt/td-agent/embedded/bin/fluent-cat test.1;done
수신측
3-1.td-agent를 reload했을 때의 경우
for i in `seq 1 10`;do /etc/init.d/td-agent reload;sleep 10;done
실행 후의 로그 수신 결과는 다음과 같습니다.
require_ack_response 없음
시도 횟수
reciever에 도착한 로그 수
첫 번째
946
두 번째
951
세 번째
970
네 번째
960
다섯 번째
947
대략 54~30건 정도의 로그 로스트가 보였다.
require_ack_response 있음
시도 횟수
reciever에 도착한 로그 수
첫 번째
1,000
두 번째
1,000
세 번째
1,000
네 번째
1,000
다섯 번째
1,000
로그 로스트 없음.
3-2.td-agent가 logrotate했을 때의 경우
for i in `seq 1 10`;do pid=/var/run/td-agent/td-agent.pid;test -s $pid && kill -USR1 "$(cat $pid)" ;sleep 10;done
실행 후의 로그 수신 결과는 다음과 같습니다.
require_ack_response 없음
시도 횟수
reciever에 도착한 로그 수
첫 번째
1,000
두 번째
1,000
세 번째
1,000
네 번째
1,000
다섯 번째
1,000
로그 로스트 없음.
require_ack_response 있음
시도 횟수
reciever에 도착한 로그 수
첫 번째
1,000
두 번째
1,000
세 번째
1,000
네 번째
1,000
다섯 번째
1,000
로그 로스트 없음.
4. 정리
매일 logrotate 시에는 로그의 결손은 보이지 않지만, 설정 파일의 변경 등으로 reload하거나 할 때에는 로그의 결손이 보였다. 프로덕션 환경 등 이번 경우보다 로그 유량이 더 많은 환경에서는 상당한 로그를 결손할 수 있다고 생각된다.
AWS라고는 해도, 네트워크의 순단등의 부조한 때는 발생하고, EC2 인스턴스도 재기동하는 경우가 있으므로, 역시 require_ack_response는 확실하게 설정해 두는 것이 필요할까.
그리고, fluentd가 아직 v0.10 환경하의 시스템은, 역시 업데이트 해 둡시다 ^^;
Reference
이 문제에 관하여(fluentd의 require_ack_response 설정이 역시 필수 설정이라고 재인식했을 때의 검증 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/CkReal/items/bb6f0490a6ba94c1fab3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
2-1. 구성도
그림으로 할 정도는 아니지만 fluentd의 송신측과 수신측의 EC2를 준비한다.
OS와 fluentd 버전은 다음과 같습니다.
2-2. 검증 환경
환경
버전
OS
우분투14.04
fluentd(td-agent)
0.12.20
설치가 쉽기 때문에 td-agent를 이용했다.
2-3. 설정 파일
송신측 및 수신측의 설정 파일은 이하와 같다.
송신자의 td-agent.conf
<source>
type forward
@label @raw
</source>
<label @raw>
<match test.**>
buffer_type file
buffer_path /tmp/hoge.buffer
flush_interval 1s
type forward
require_ack_response #ここの設定をコメントアウトしたりする
flush_at_shutdown true
<server>
host [受信側のホスト]
port 24224
</server>
</match>
</label>
수신측의 td-agent.conf
<source>
type forward
@label @raw
</source>
<label @raw>
<match test.**>
buffer_type file
buffer_path /tmp/hoge.buffer
type file
path /tmp/hoge.log
</match>
</label>
3. 검증 결과
fluent-cat을 사용하여 1,000건의 데이터를 전송하면서 10sec마다 reload하는 패턴과 logroteate하는 패턴의 2개의 케이스를 검증해 본다.
송신측
for i in `seq 1 1000`;do echo "{\"test\":\"$i\"}" | /opt/td-agent/embedded/bin/fluent-cat test.1;done
수신측
3-1.td-agent를 reload했을 때의 경우
for i in `seq 1 10`;do /etc/init.d/td-agent reload;sleep 10;done
실행 후의 로그 수신 결과는 다음과 같습니다.
require_ack_response 없음
시도 횟수
reciever에 도착한 로그 수
첫 번째
946
두 번째
951
세 번째
970
네 번째
960
다섯 번째
947
대략 54~30건 정도의 로그 로스트가 보였다.
require_ack_response 있음
시도 횟수
reciever에 도착한 로그 수
첫 번째
1,000
두 번째
1,000
세 번째
1,000
네 번째
1,000
다섯 번째
1,000
로그 로스트 없음.
3-2.td-agent가 logrotate했을 때의 경우
for i in `seq 1 10`;do pid=/var/run/td-agent/td-agent.pid;test -s $pid && kill -USR1 "$(cat $pid)" ;sleep 10;done
실행 후의 로그 수신 결과는 다음과 같습니다.
require_ack_response 없음
시도 횟수
reciever에 도착한 로그 수
첫 번째
1,000
두 번째
1,000
세 번째
1,000
네 번째
1,000
다섯 번째
1,000
로그 로스트 없음.
require_ack_response 있음
시도 횟수
reciever에 도착한 로그 수
첫 번째
1,000
두 번째
1,000
세 번째
1,000
네 번째
1,000
다섯 번째
1,000
로그 로스트 없음.
4. 정리
매일 logrotate 시에는 로그의 결손은 보이지 않지만, 설정 파일의 변경 등으로 reload하거나 할 때에는 로그의 결손이 보였다. 프로덕션 환경 등 이번 경우보다 로그 유량이 더 많은 환경에서는 상당한 로그를 결손할 수 있다고 생각된다.
AWS라고는 해도, 네트워크의 순단등의 부조한 때는 발생하고, EC2 인스턴스도 재기동하는 경우가 있으므로, 역시 require_ack_response는 확실하게 설정해 두는 것이 필요할까.
그리고, fluentd가 아직 v0.10 환경하의 시스템은, 역시 업데이트 해 둡시다 ^^;
Reference
이 문제에 관하여(fluentd의 require_ack_response 설정이 역시 필수 설정이라고 재인식했을 때의 검증 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/CkReal/items/bb6f0490a6ba94c1fab3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
for i in `seq 1 1000`;do echo "{\"test\":\"$i\"}" | /opt/td-agent/embedded/bin/fluent-cat test.1;done
for i in `seq 1 10`;do /etc/init.d/td-agent reload;sleep 10;done
for i in `seq 1 10`;do pid=/var/run/td-agent/td-agent.pid;test -s $pid && kill -USR1 "$(cat $pid)" ;sleep 10;done
매일 logrotate 시에는 로그의 결손은 보이지 않지만, 설정 파일의 변경 등으로 reload하거나 할 때에는 로그의 결손이 보였다. 프로덕션 환경 등 이번 경우보다 로그 유량이 더 많은 환경에서는 상당한 로그를 결손할 수 있다고 생각된다.
AWS라고는 해도, 네트워크의 순단등의 부조한 때는 발생하고, EC2 인스턴스도 재기동하는 경우가 있으므로, 역시 require_ack_response는 확실하게 설정해 두는 것이 필요할까.
그리고, fluentd가 아직 v0.10 환경하의 시스템은, 역시 업데이트 해 둡시다 ^^;
Reference
이 문제에 관하여(fluentd의 require_ack_response 설정이 역시 필수 설정이라고 재인식했을 때의 검증 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/CkReal/items/bb6f0490a6ba94c1fab3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)