Search
Duplicate

#3 서비스인프라개발팀 : Heimdall

이미지
1.png
기술 Stack
Heimdall
Spring Boot + Thymeleaf
Beats
Logstash
Elasticsearch
Kibana
Elastalert

로그 수집 관제 시스템

안녕하세요, 사람인HR Tech Sourcer 이승빈입니다
이번 포스팅에서는 기존 서버 기반에서 쿠버네티스 기반의 컨테이너로 서비스 배포가 전환되면서 기존 로그 수집과 컨테이너 기반 로그 수집을 모두 수용할 수 있도록 2020년에 새롭게 구축된 관제시스템 Heimdall에 대하여 소개해드리려 합니다.
Elastic Stack
육상선수의 기록 향상을 위해서는 꾸준히 선수의 상태를 살펴야 합니다. 출발점부터 결승점까지의 과정 중 부족한 부분이 어떤 부분인지, 평소와 다르게 문제가 발생하는 구간은 없는지 정보를 수집합니다. 구간별로 혹은 선수의 신체별로 나누어진 토픽대로 정보를 다듬고 저장합니다. 저장된 정보를 그래프나 테이블로 나타내는 등 시각화한 뒤 내용을 분석하고 보완해 기록 향상을 도모합니다.
서비스도 마찬가지입니다. 서비스를 위한 시스템이 가동되는 동안 관련된 정보인 로그를 수집, 정제하고 저장한 후 시각화한 자료를 분석합니다. 이를 통해 장애에 대처하거나 개선점을 파악해 신규 기능을 추가함으로써 우수한 개발 환경을 구축하고 나아가 더욱 질 좋은 서비스를 제공할 수 있습니다.
이러한 업무를 수행하기 위한 도구가 바로 Elastic Stack입니다. Elastic Stack이란 Elasticsearch, Logstash, Kibana를 의미하는 ELK Stack 기존 아키텍처에 Beats 제품군이 추가된 Elastic의 제품군들을 말합니다. 사용자가 서버로부터 원하는 모든 유형의 데이터를 가져와서 실시간으로 해당 데이터를 검색, 분석 및 시각화할 수 있는 Elastic사의 오픈소스 서비스 제품입니다.
CI Tool인 Jenkins를 활용한 기존 서버 기반에서 쿠버네티스 기반의 컨테이너로 서비스 배포 및 기동이 전환되면서 기존 로그 수집과 컨테이너 기반의 로그 수집을 모두 수용할 수 있게 고도화를 목적으로 개발이 진행되었습니다. Heimdall 관리자 화면 UI를 개선한 뒤 ELK Stack에서 Elastic Stack으로 모니터링과 관제를 개선하였으며 ElastAlert를 사용하여 관제 설정을 추가하였습니다. Heimdall 고도화에 적용된 기술 스택을 중점으로 살펴보겠습니다.
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에 대해 관심을 가져보시는 것을 추천합니다.
다음 포스팅에서는 사람인의 SVN에서 Git으로 변환한 형상 관리 과정을 소개해드리겠습니다. 사람인HR의 기술에 대한 궁금증이나 개발 큐레이션에 대한 피드백은 언제든지 환영하고 있습니다. 앞으로도 사람인HR 피플팀의 개발 큐레이션 많은 관심 부탁드립니다.
(사람인HR Talent Sourcer 이승빈 E-mail : lsb5368@saramin.co.kr)

출처 및 참고 사이트