로그를 수집하기위해 로그 수집을 편하게 할 수 있게 해주는 툴들을 알아보고 선정했다.
여러가지 툴들이 있었지만 json parser를 지원하지 않거나, 수집한 로그를 시각화하는데 범용화된 툴들과 호환이 안되는 것들을 배제하다 보니 Fluentd랑 Elastic의 LogStash, Beats가 남았다.
글의 제목에서 보일 수 있듯이 결국엔 Fluentd와 Logstash만 비교 툴로 남게 되었는데
Beats는 Logstash가 로그를 쌓는데 너무 많은 리소스를 사용한다고 피드백이 많이 들어와서 elastic에서 만든 경량 로그수집 툴이다. Beats가 제공하는 로그 수집 제품은 다음과 같다.
밑의 사진에서 보이듯이 쌓이는 로그들을 elastic search로 바로 적재할 수 있지만 그렇게 되면 원시적인 형태의 로그(파일 로그, 가공되지 않은 로그 데이터) 만 저장되기 때문에 원하는 형태로 적재하고 분석하거나 시각화하려면 수집만 Beats로 하고 LogStash에서 가공해서 ElasticSearch에 적재하고, Kibana로 시각화를 하게 된다.
그래서 현재 운영하고 있는 서비스에서는 어차피 원시 로그데이터를 원하는 형태나 포맷으로 정제한 후 저장소에 적재해야하기 때문에 Beats는 LogStash를 선택한다면 추가옵션으로 두고 Fluentd와 LogStash를 비교했다.
여러 글들을 찾아봐도 해당 내용과 비슷하다.
중요한 부분
1. 메모리 사용량
메모리 사용량이 Fluentd가 더 낮다.
2. 독립성
Logstash의 큰 문제점으로 손꼽힌 제한적인 버퍼링 시스템때문이 크다. LogStash는 20개의 Fixed-Size Event를 제한된 On-Memory queue에 담기 때문에 Redis나 Kafka와 같은 External queue 의존도가 높다. 물론 여러가지 해결법이 있긴 하지만 추가 도구에 대한 이러한 종속성은 시스템에 또 다른 종속성을 추가하고 시스템을 복잡하게 만든다. Fluentd는 버퍼링 시스템이 잘 구축되어있다.
3. 컨테이너 기반의 서비스 지원
일단 우리가 로그를 쌓으려는 서버는 Docker 컨테이너 환경에서 운영되고 있다.
Fluentd는 Treasure Data라는 빅데이터 기업에 의해 구축되었으며, CNCF(Cloud Native Computing Foundation)의 일부이기 때문에 Docker, Kubernetes, Prometheus, OpenTracing 등과 같은 CNCF 호스팅 프로젝트에서 호환이 잘 된다. 실제로 Docker에 fluentd를 추가하는 글을 봐도 간단하게 구축이 가능하다.
4. 로그 수집 방식
Fluentd는 태그 기반의 방식으로, 원하는 태그를 걸어서 원하는 로그를 쌓는 방식이다.
Logstash는 if-else 조건에 따라 이벤트를 라우팅한다.
로그를 쌓기위한 상세한 설계나, 디테일한 부분을 수집해야 할 땐 LogStash가 낫겠다고 판단이 들지만, 현재 우리 서비스에서 쌓으려는 로그에는 꼭? 굳이? 필요하진 않다고 느꼈다.
물론 LogStash가 플러그인이 훨씬 더 많고, 더 많은 오픈소스 생태계가 있지만 우리는 CSV, json 등 범용적인 로그 형식을 수집하고, 전송하려고 하기때문에 Fluentd가 우리 서비스에 더 낫다고 느껴졌고, 최종적으로 아래 보이는 사진처럼 ElasticSearch나 Kibana와도 호환이 잘 되기 때문에 Fluentd를 선택했다.
**물론 Elastic 회사에 Logstash가 있기 때문에 가장 최근의 ElasticSearch나 Kibana의 업데이트는 Fluentd보단 Logstash가 더 호환이 잘 되겠지만 그정도까지 필요할까 싶다.
이렇게 로그수집 툴은 Fluentd를 선택했고, 다음글은 실제로 서비스에 적용해보겠다.
참고
https://techstricks.com/fluentd-vs-logstash/
https://grip.news/archives/1340
https://www.techmanyu.com/logstash-vs-fluentd-which-one-is-better-adaaba45021b
https://platform9.com/blog/kubernetes-logging-comparing-fluentd-vs-logstash/
https://www.openlogic.com/blog/fluentd-vs-logstash
'Server' 카테고리의 다른 글
웹서버, WAS 선정기준 (0) | 2022.08.09 |
---|---|
Docker - EFK 환경구축 과정 (0) | 2022.08.04 |
클라우드 서비스 - AWS 를 선택한 이유 (0) | 2022.07.18 |
AWS EC2- CloudWatch, Slack 연동 CPU, Memory 사용량 모니터링 (0) | 2022.06.20 |
EC2 프리티어 인스턴스 시작 - Ubuntu (0) | 2022.06.13 |
댓글