Filebeat 데이터를 로드밸런싱하는 방법을 검토해보았습니다.
1. logstash loadbalance 설정을 활성화시키는 방법
filebeat.yml
logstash:
hosts: ["192.168.0.10:5044", "192.168.0.11:5044", "192.168.0.12:5044"]
loadbalance: true
Filebeat 설정에서 logstash의 loadbalance 옵션을 활성화시키면 등록된 Logstash hosts들에게 데이터가 분산됩니다. LogStash 인스턴스 개수가 고정이라면 이 방법이 가장 유용합니다.
하지만 LogStash가 오토-스케일링되는 조건이라면 LogStash 인스턴스들을 Discovery하여 Filebeat 설정에 반영해주는 모듈을 별도로 구현해줘야합니다. filebeat.yml 파일을 직접 변경하지 않고 환경변수를 통해 변경하는 방법을 사용하면 구현이 용이합니다.
2. Filebeat가 로그를 Shipping하는 방법
첫번째 방법에서 LogStash Shipper로 분산되었던 데이터들도 결국은 메시지큐에 담겼습니다. 필터 플러그인 적용 전,후의 데이터 크기가 큰 차이가 없다면 LogStash Shipper를 별도로 구축하지 않고 Filebeat 자신이 Shipper가 되는 것도 좋은 방법입니다.
이 경우 Filter 플러그인은 LogStash Indexer에 적용하는 것이 좋습니다. Filebeat에서 로그를 직접 파싱할 수도 있지만 정규식 처리는 리소스 비용이 비싸기 때문에 원활한 서비스 제공에 영향을 미칠 수 있기 때문입니다.
개인적으로 LogStash가 오토-스케일링되는 조건에서는 이 방법이 가장 편리하고 합리적이라고 생각합니다.
filebeat.yml
filebeat:
prospectors:
paths:
- /var/log/celery.log
input_type: log
multiline:
pattern: '^[[:space:]]+|^Traceback'
negate: false
match: after
output:
redis:
host: 192.168.10.100
port: 6379
password: mypassword
logstash.conf
input {
redis {
host => "192.168.10.100"
password => "mypassword"
key => "filebeat"
data_type => "list"
}
}
output {
elasticsearch {
hosts => ["192.168.10.200:9200"]
}
stdout {}
}
3. AWS ELB를 통한 로드밸런싱 방법
Filebeat는 LogStash와 Persistent 연결을 하기 때문에 ELB를 거치더라도 최초에 연결됐던 Logstash에게만 데이터를 전송합니다. 반드시 ELB를 통해 로드밸런싱을 구현해야 한다면 LogStash 연결에 대한 TTL을 설정하여 재연결을 유도하는 방법을 사용해야합니다. 1.12 버전에서는 해당 기능을 옵션으로 지원하고 있지 않습니다.
참고
- https://discuss.elastic.co/t/filebeat-only-goes-to-one-of-the-logstash-servers-that-is-behind-an-elb/48875/5
- https://github.com/elastic/beats/issues/661
- http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html
'LogStash' 카테고리의 다른 글
[LogStash] Filter 적용하여 로그 파싱하기 (0) | 2016.07.21 |
---|---|
[LogStash] sockAppender로 log4j 로그 입력 (0) | 2015.08.24 |
LogStash, ElasticSearch, Kibana 설치하기 (0) | 2015.08.21 |