Search
Duplicate

#3 Heimdall

이미지
1.png
기술 Stack
Heimdall
Spring Boot + Thymeleaf
Beats
Logstash
Elasticsearch
Kibana
Elastalert
안녕하세요, 사람인HR Tech Sourcer 이승빈입니다
이번 포스팅에서는 기존 서버 기반에서 쿠버네티스 기반의 컨테이너로 서비스 배포가 전환되면서 기존 로그 수집과 컨테이너 기반 로그 수집을 모두 수용할 수 있도록 2020년에 새롭게 구축된 관제시스템 Heimdall에 대하여 소개해드리려 합니다.

Story

지금까지 대용량 Push 메시지 생성 시스템과 개발 환경에 대해 소개해드렸는데요. 시스템을 설계하고 개발한 이후에는 관리할 수 있는 장치가 필요합니다.
Beats → 로그 수집
Logstash → 로그 정제
Elasticsearch → 데이터 저장
Kibana → 데이터 분석
시스템을 관리하기 위해서는 그 지표와 근거를 나타내는 정보인 로그를 다뤄야 해요. 인간이 방대한 양의 로그를 다루는 것은 불가능에 가깝기 때문에 효율적으로 수집과 정제를 수행하고 이를 저장할 대용량 저장소와 유의미한 결과를 도출하기 위한 분석 도구가 필요합니다.

로그 수집 관제 시스템

로그 수집 관제 시스템은 K8S 인프라 CI/CD와 마찬가지로 고객을 위한 서비스 기술이 아닌 시스템을 운영하기 위한 기술입니다. 현재 시행 중인 서비스의 상태나 개선점을 파악하고 유지보수를 통해 고도화하기 위한 관리 방법을 의미해요.
Flow
1.
데이터 수집
2.
데이터 정제
3.
데이터 저장
4.
데이터 분석
시스템을 정상적으로 가동하기 위해서는 예외 상황을 차단하고 현재 상태를 안정적으로 유지해야 합니다. 또한 작동하면서 유난히 작업 속도가 느린 부분이 있는지 평소와 달리 수행 능력이 저조한 구간이 있는지 등을 확인하며 개선의 여부를 파악하고 시스템의 기능을 향상해야 해요. 파악을 위해서는 그에 대한 근거가 필요한데요. 그 근거가 서비스로부터 발생하는 모든 정보를 뜻하는 로그입니다. 로그를 얻어내고 결론에 도달하기까지의 과정은 위와 같은 순서를 거치게 되는 거죠.
우수한 개발 환경에서 좋은 서비스가 나오더라도 제자리에 머물러만 있다면 언젠가는 도태되고 말 겁니다. 그렇기 때문에 시스템의 유지보수와 품질의 향상이 꾸준하게 이루어져야 해요. 무한에 가까운 로그 정보 속에서 유의미한 결과를 도출하고 돌발 상황을 포함한 모든 경우의 수를 통제하는 과정은 개발을 시작하고 완성하는 단계만큼 중요한 부분입니다. 서비스인프라개발팀은 개발한 서비스를 항상 최고의 레벨에 위치시키기 위한 관제 환경을 구축하기 위해 노력하고 있습니다.

시스템 구축에 사용된 주요 기술 스택

Elastic Stack
CI Tool인 Jenkins를 활용한 기존 서버 기반에서 쿠버네티스 기반의 컨테이너로 서비스 배포 및 기동이 전환되면서 기존 로그 수집과 컨테이너 기반의 로그 수집을 모두 수용할 수 있게 고도화를 목적으로 개발이 진행되었는데요. 개발이 주축이 된 기술이 바로 Elastic Stack입니다.
Elastic Stack이란 Elasticsearch, Logstash, Kibana를 의미하는 ELK Stack 기존 아키텍처에 Beats 제품군이 추가된 Elastic의 제품군들을 말합니다. 사용자가 서버로부터 원하는 모든 유형의 데이터를 가져와서 실시간으로 해당 데이터를 검색, 분석 및 시각화를 통해 모니터링과 관제 업무를 수행할 수 있는 Elastic 사의 오픈소스 서비스 제품이에요.
Heimdall
Heimdall은 Elastic Stack에 수집된 애플리케이션 로그 데이터를 관리하고 관제 알람 설정과 확인을 위한 통합 모니터링 관리자 서비스입니다. Elastic Stack의 설정 편의성을 높이기 위해 사용하는 애플리케이션입니다.
SpringBoot + Thymeleaf
SpringBoot란 Java Web Framework로 Heimdall 관리자 화면의 UI를 개선하기 위해 최신 버전으로 변경하여 리팩토링을 진행한 Tool입니다. Thymeleaf는 Java의 라이브러리로 템플릿의 문법과 JSON, XML 등의 데이터를 이용해서 HTML 문서를 만들어주는 템플릿 엔진이에요. 기존에 사용했던 템플릿 엔진인 Mustache와 Thymeleaf 모두 Spring Boot에서 지원하고 있지만 비즈니스 로직과 View로 백엔드와 프론트엔드의 개발 영역이 분리되어 있는 Thymeleaf로 변경하여 고도화를 진행했습니다.
Beats
Beats란 단일 목적의 데이터 수집기 플랫폼으로 수백 수천 개의 장비와 시스템으로부터 Logstash나 Elasticsearch에 데이터를 전송할 수 있는 Tool이며 이 중 Filebeat와 Metricbeat를 사용합니다. 애플리케이션 내부에서 동일한 리소스에 액세스할 수 있지만 애플리케이션에 거의 영향을 주지 않으면서 독립적으로 작동하는 별도의 Sidecar 형태의 컨테이너로 애플리케이션의 핵심 로직과 관련 없는 기능들을 추가하거나 제거할 수 있습니다. 데이터를 수집하고 전송하는 매개체가 제한적이고 Logstash 수준의 데이터 가공을 지원하지 않지만 그만큼 자원을 적게 소모하여 가벼운 경량 로그 수집의 장점이 있습니다.
종류
Filebeat : 로그 파일
Metricbeat : 메트릭(timestamp와 한두 가지 숫자 값을 포함하며 주기적으로 발생하는 데이터)
Packetbeat : 네트워크 데이터
Winlogbeat : Windows 이벤트 로그
Auditbeat : 감사 데이터
Heartbeat : 가동 시간 모니터링
Functionbeat : 서버를 사용하지 않는 수집기
Logstash
Logstash란 이름 그대로 로그를 저장한다는 의미로 실시간 파이프라인 기능을 가진 오픈소스 데이터 수집 엔진입니다. 반정형 데이터인 로그를 다양한 소스에서 수집하고 시스템에서 인식할 수 있도록 로그를 정제하여 저장소에 적재하는 역할을 합니다. Logstash는 임시 저장 공간으로 Buffer를 두는 In-memory 방식을 사용하는데 이 경우 갑작스러운 트래픽 증가로 부하가 발생했을 때 데이터가 유실될 우려가 있습니다. 이 문제를 해결하기 위해 중간 저장소 Buffer로써 Kafka를 사용하여 로그 수집 구조를 개선하였습니다.
Elasticsearch
Elasticsearch란 Java언어로 이루어진 오픈 소스 형태의 정보 검색 라이브러리인 Apache Lucene을 기반으로 하는 오픈소스 분산 검색 엔진입니다. 방대한 양의 데이터를 거의 실시간으로 검색, 분석, 저장할 수 있습니다.
Kibana
Kibana란 프론트엔드 애플리케이션으로 Elasticsearch에서 색인된 데이터를 검색하고 시각화하는 기능을 제공하는 오픈소스 분석 및 시각화 플랫폼입니다.
ElastAlert
ElastAlert란 로그의 특정 키워드값을 읽어서 실시간 알람기능을 제공하는 오픈 소스입니다. 애플리케이션 에러가 발생해 로그에 찍혔을 경우 개발자가 해당 내용의 알람을 제공받아 빠르게 대처할 수 있습니다. Rule 파일을 작성해 관제 규칙을 설정할 수 있으며 발생 시 Telegram으로 메시지가 전송됩니다. 독립적으로 실행되는 애플리케이션이기 때문에 쿠버네티스 환경에서 관리가 용이합니다.
Flow
1.
Rancher + Helm Chart를 사용하여 컨테이너 로그 수집에 대한 ON/OFF 설정
2.
ON 설정의 경우, Beats(Filebeat, Metricbeat)가 Sidecar 형태로 배포되어 애플리케이션 로그 수집
3.
Beats에서 수집한 로그 정보를 Kafka로 전달
4.
Buffer 역할을 하는 Kafka에서 토픽에 따라 Logstash로 전달
5.
Logstash에서 Elasticsearch로 데이터 적재
6.
Elasticsearch에 적재된 데이터를 Kibana로 검색 및 시각화하고 Dashboard로 구성해 분석
7.
관제 발생 시 Telegram으로 메시지를 전송받아 확인할 수 있도록 관제 Rule 추가
이번 포스팅에서는 사람인HR의 로그 수집 관제 시스템 Heimdall의 고도화 프로젝트를 살펴보았습니다. 오픈 소스 활용 능력이 중요해지면서 검색, 모니터링 측면의 Elastic Stack 활용 역량의 중요성이 점차 증가하고 있는 만큼 개발자분들의 경우 Elastic Stack에 대해 관심을 가져보시는 것을 추천합니다.
다음 포스팅에서는 사람인의 대표 프론트엔드 기술스택을 소개해드리겠습니다. 다음 포스팅이 개발 큐레이션의 마지막 장인데요. 마지막까지 사람인HR 피플팀의 개발 큐레이션 많은 관심 부탁드립니다.

출처 및 참고 사이트

기술블로그에서 더 자세한 내용 확인하기