프로젝트/기술적 선택

[기술적 선택] ELK-Stack 도입 이유 및 개념

배발자 2023. 7. 22.
반응형

 

 

협업 프로젝트를 하다보면 정해진 목표와 과제가 매일 주어지면서 각자 맡은 역할을 충실히 하는 것이 제일 중요하다. 특히나 프로젝트의 목표물을 만들기 위해 기본적인 API를 작성하고 로직을 설계하고 테스트를 하다보면 시간이 무척 빨리 지나간다. 프로젝트는 시간이 한정적이라 서비스를 만드는 것이 급급한 나머지 성능을 개선한다거나 새로운 기술에 도전하는 것은 상당히 힘든일이다. 필자는 그 시간을 쪼개고 쪼개서 새로운 기술 "ELK-Stack"을 활용한 로그 수집가로서 활동을 하게 되었다. 

 

도입 이유 

 

지금까지 프로젝트를 진행하면서 로그를 활용했던 경험은 단순히 데이터를 출력하기 위함이였다. 

즉, 스프링 환경에서 로깅 레벨을 INFO로 설정하여 DTO의 값이 제대로 전달되었는지에 대한 확인차 체크하는 용도였던 것이다. 하지만 실제 현업에서는 이러한 로그들을 통해 시스템을 개선해나간다고 얘기를 접했다. 

 

로그를 수집을 하게 된다면 다음과 같은 장점이 있다. 

 

  1. 사용자 행동 분석 로그 데이터를 통해 사용자의 행동 패턴을 파악하고 이를 바탕으로 서비스 개선 및 마케팅 전략을 세울 수 있다. 
  2. 오류 및 버그 추적 로그를 통해 시스템 내 발생한 오류나 문제를 확인하고 추적할 수 있어, 소프트웨어의 안정성과 품질을 개선할 수 있다. 
  3. 성능 최적화 로그 데이터를 분석하여 데이터 베이스 작업, API 호출, 시스템 리소스 사용 등 시스템의 성능 상태를 파악하고, 이를 통해 성능 문제점을 찾아 수정할 수 있다.
  4. 보안 감시 로그를 통해 시스템 내의 비정상적인 활동, 해킹 시도, 인증 실패 등을 식별하고, 보안 취약점을 찾아낼 수 있습니다. 이는 시스템 보안의 유지를 도울 뿐만 아니라, 사이버 공격에 대한 대응 역시 가능하게 한다.

 

즉, "로그 데이터를 통해 사용자의 행동 패턴을 파악하고 이를 바탕으로 서비스 개선을 할 수 이으며, 로그를 통해 시스템 내 발생한 오류나 문제를 확인하고 추적할 수 있어, 서비스의 안정성과 품질을 개선할 수 있다“ 는 것이 도입의 가장 큰 이유다. 

 

물론, 프로젝트가 승승장구하여 정말 로그를 유용하게 쓰인다면 뿌듯함과 동시에 성취감을 얻겠지만 사실상 작은 토이 프로젝트 환경에서는 로그 수집을 해도 실제로 활용하기에는 부족한 감이 있다. 하지만, 조금이라도 실무에서 사용하는 기술들을 도입해보고 싶은 마음이 가장 컸다. 

 

 

 

ELK - Stack

 

ELK-Stack을 활용하면 시스템 전반의 성능과 안정성을 모니터링할 수 있다. 엘라스틱 서치는 대용량 데이터를 빠르게 저장, 검색, 분석할 수 있는 분산형 검색 엔진으로, 로그를 수집 및 분석, 검색 하기에 용이하며, 키바나를 통해 실시간 대시보드를 구축할 수 있으며, 다양한 시각화 도구를 통해 데이터를 손쉽게 분석할 수 있다. 다음과 같은 장점이 있다. 

 

 

  1. ELK-Stack을 활용하면 시스템 전반의 성능과 안정성을 모니터링할 수 있다.
  2. 엘라스틱서치는 대용량 데이터를 빠르게 저장, 검색, 분석할 수 있는 분산형 검색 엔진으로, 클러스터를 확장 혹은 축소 가능하며, 가용 비용에 따라 성능을 조정할 수 있다. 
  3. 키바나를 통해 실시가 대시보드를 구축할 수 있으며, 다양한 시각화 도구를 통해 데이터를 손쉽게 분석할 수 있다. 
  4. 비용절감 오픈 소스 기반인 ELK 스택은 라이선스 비용이 발생하지 않으며, 다양한 환경에서 쉽게 배포 및 사용할 수 있어 초기 구축 비용과 유지 보수 비용 줄일 수 있다. 

 

 

"ELK Stack"은 ElasticSearch, Logstash 및 Kibana라는 오픈 소스 도구의 조합으로, 대규모 로그 데이터를 수집, 저장, 검색 및 시각화하기 위해 사용되는 강력한 도구이다. 

 

 

1. ElasticSearch

  • ElasticSearch는 분산 검색 및 분석 엔진으로, 실시간으로 대규모 데이터를 저장하고 검색할 수 있다.
  • JSON 기반 문서를 사용하여 데이터를 저장하며, 검색 및 집계를 위해 강력한 쿼리 언어를 제공한다.
  • 자동 분산화와 높은 가용성으로 대용량 데이터를 처리할 수 있다. 

 

 2. Logstash

  • Logstash는 다양한 소스에서 로그 데이터를 수집하고 가공하여 ElasticSearch 또는 다른 저장소에 전송하는 데이터 수집 도구이다.
  • 다양한 입력 플러그인과 출력 플러그인을 제공하여 다양한 데이터 소스와 저장소와 통합할 수 있다.
  • 데이터 전처리 및 변환 기능을 제공하여 데이터 품질을 향상시키고 검색 가능한 형식으로 변환한다.

 

3. Kibana

  • Kibana는 ElasticSearch에서 저장된 데이터를 시각화하고 대시보드를 만드는 도구이다.
  • 직관적인 웹 기반 UI를 통해 사용자가 데이터를 쉽게 이해하고 분석할 수 있도록 한다.
  • 다양한 종류의 그래프, 차트, 지도 등을 지원하여 데이터의 동향과 패턴을 시각적으로 파악할 수 있다.

 

4. Filebeat

  • Filebeat는 경량화된 설계로 작동하며, 시스템 자원을 적게 사용하여 데이터를 수집하여 성능상의 이점이 있다.
  • 수집한 로그 데이터를 ElasticSearch 또는 Logstash와 같은 저장소로 실시간으로 전송한다. 이렇게 함으로써 중앙 집중화된 로그 시스템에서 로그 데이터를 효과적으로 처리하고 분석할 수 있습니다.

 

 

요약하자면, Beats는 Logstash의 동작 과정은 거의 유사하지만 Logstash에 비해 기능이 제한적이나 리소스가 적게 드는 Logstash의 경량화 버전이다. 각 어플리케이션 서버마다 filebeat를 심어 로그 데이터를 Logstash에 전송한다. 이후 필터링을 진행한다. Elasticsearch는 로그스태쉬를 통해 수신된 데이터의 저장소 역할을 수행하며, Kibana는 수집된 내용의 분석하고 결과를 시각화 해주는 역할을 한다는 것이다. 

 

 

 

로그 활용

 

 

필자가 진행했던 프로젝트에서 도커를 활용한 가상 환경을 구축하여 MainAPI 서버, Story 서버, Notify 서버에서 요청이 처리된 데이터 내역들을 Kibana 환경에서 시각적으로 데이터를 보여주었다. 

EC2 서버는 프로젝트가 끝나고 약 1주일 정도만 더 사용할 수 있었기 때문에 서비스를 계속해서 유지할 순 없었다. 그래서 프로젝트 개발이 완료되고 많은 트래픽이 발생했던 점이 없었기에 로그로 오류가 검출된 적은 없었다. 로깅 레벨 설정을 통해 ERROR 관련 로그도 처리하게끔 설정하였는데, 서비스를 배포할 때 발생하는 오류는 빌드 과정에서 모두 동료들과 수정 보완해서 배포를 진행하였다. ERROR 관련 로그는 서비스가 조금 더 커지면 발생하는 트래픽이나 생각하지 못한 예외 사항 발생 시 ERROR 로그가 수집될 것이라고 생각한다. 

 

 

 

 

 

 

또한, 필터링을 통해 어떠한 게시글물들이 사람들이 많이 찾는지 키워드 별로 원형 차트도 키바나에서 제공해준다. 검색 키워드 관리를 통해서 사용자들이 개발자 커뮤니티에서 가장 많이 찾고 있는 주제들을 가지고 새로운 서비스로 개선해나가는 방안을 검토할 수 있을 것이라고 생각한다. 

 

 

 

 

 

 

 

 

반응형

댓글