목차
- 모니터링 방법과 ELK 스택
- 구축해 보기
모니터링 방법과 ELK 스택
어제 8시 즈음 회원 서버 로그 좀 봐볼까?
(회원 서버만 10대인데요?)
애플리케이션이 많아질수록 개발자 (관리자)가 조회해야 하는 애플리케이션 관련 데이터가 급격히 늘어난다. metric, 로그 데이터와 같은 것들이다. 애플리케이션이 한 개이고, 레플리카도 하나라면 직접 서버에 접속해 로그 파일을 추적해 보면 되지만, 여러 대인 상황에서는 쉽지 않다. APM (Application Performance Monitoring) 솔루션을 사용하면 애플리케이션의 실시간 모니터링이 가능하다.
성능 관련 데이터는 실시간에 가깝게 조회되어야 하는 데이터지만, 로그나 사용자 추적 데이터 (히스토리, 페이지 이동 이력 등)는 성격이 다르다. 실시간에 가깝지 않아도 되며, 나중에 시각화되어 개발자 (관리자)의 입맛에 맞게 데이터를 확인할 수 있어야 된다.
이때 데이터들을 집중 저장소에 모아두면 조회하기 편하지 않을까?라는 발상으로 DBMS와 같은 저장소에 저장하는 것이 방법이 될 수 있다. 실무에서도 사용자 히스토리 데이터들은 별도의 히스토리 전용 테이블을 생성해서 저장해두곤 한다. 이런 데이터들은 조회 시기도 불분명하고, 잦지도 않아 DBMS에 적재하는 것만으로 큰 불편함은 없다. 데이터가 시각화될 필요가 딱히 없다.
그러나 어떤 데이터들을 시각화해야 할 수 있고, 빠르게 조회가 가능하고 쉽게 접근할 수 있어야 한다. (HTTP 접근 로그, 로그 레벨(유형) 별 개수, 조회) 이에 적합한 오픈소스로 ELK 스택이 있다.
- Logstash (L, 로그스태시) : 다양한 소스 (app)들로부터 데이터를 처리하는 파이프라인
- Elasticsearch (E, 엘라스틱서치) : 데이터 저장소, 데이터를 중앙에 저장, 색인하여 Restful로 빠르게 조회 가능
- Kibana (K, 키바나) : 데이터 시각화
- 애플리케이션 로그들을 Logstash 파이프라인으로 처리하여
- Elasticsearch 저장소로 저장 (색인)하면
- Kibana를 통해 보기 좋게 확인한다.
구축해 보기
ELK 스택을 위해서는 Java가 필요하다.
환경
- OS : Mac OS
- Elasticsearch 8.14.3
- Kibana 8.14
- Logstash 8.14
- Java 17
- Spring Boot 3.3
구축 순서
- Elasticsearch, Kibana, Logstash 설치
- Logstash 파이프라인 설정
- Spring Boot와 Logstash 연동
- Kibana에서 Dataview 생성, 확인
Step 1. Elasticsearch 설치 & 실행
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-darwin-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c -
tar -xzf elasticsearch-8.14.3-darwin-x86_64.tar.gz
cd elasticsearch-8.14.3/
## elasticsearch 실행
./bin/elasticsearch
처음 실행하면 각 정보들이 로그에 남는다. elastic user의 비밀번호는 따로 메모해 두거나 EXPORT 해주자.
Elasticsearch의 기본 포트는 9200으로, 계정 정보 (ID : elastic, PWD : 최초 실행 시 elatic user의 비밀번호)로 로그인해 보면
만일 이 포스팅처럼 모두 localhost에서 진행할 예정이면 xpack 관련 설정을 모두 false로 수정한다. (elasticsearch.yml)
Step 2. Kibana 설치 & 실행
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.14.3-darwin-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/kibana/kibana-8.14.3-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c -
tar -xzf kibana-8.14.3-darwin-x86_64.tar.gz
cd kibana-8.14.3/
## Kibana 실행
./bin/kibana
Kibana의 기본 포트는 5601이다. 접속해서 나의 elastic 계정 정보로 로그인한다.
이제 Elasticsearch 저장소와 Kibana가 연동되었다. 이제 Logstash 파이프라인으로 데이터를 보내서 Kibana에서 확인해 보자.
Step 3. Logstash 설치 & 실행
https://www.elastic.co/kr/downloads/logstash
위 링크에서 OS에 맞게 다운로드 후 압축을 풀어준다.
tar -xzf logstash-8.14.3-darwin-x86_64.tar.gz
cd /logstash-8.14.3
파이프라인으로 이벤트를 발행해 보자
bin/logstash -e 'input { stdin { } } output { stdout {} }'
## ... (실행 로그 생략)
hello world!
Step 4. Spring Boot에 Logstash 연동
logstash-logback-encoder 라이브러리가 필요하다.
dependencies {
implementation("net.logstash.logback:logstash-logback-encoder:7.4")
}
logback.xml 설정에 Logstash 인코더를 통해 로깅할 수 있게 추가해 준다.
<!--logback.xml-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:5001</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"app_name":"spring_boot_app_2"}</customFields>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="LOGSTASH" />
</root>
customFields 태그를 활용해 데이터의 필드를 추가할 수 있다. 나는 app_name을 넣어주었다. 다름 애플리케이션 설정에서는 또다른 이름을 부여해주면 키바나에서 로그 확인 시 어떤 애플리케이션의 데이터인지 조회할 수 있다.
Step 5. Logstash 파이프라인 포트 오픈
Logstash가 파이프라인을 통해 SpringBoot의 로그를 수집할 수 있도록 tcp 포트를 설정해주어야 한다.
cd /logstash-8.14.3/config
vi logstash.conf
logstash.conf에서 설정해 줄 수 있다. (없으면 만들자)
input {
tcp {
port => 5001 # 수집하는 listen port
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"] # Elasticsearch 저장소 주소
index => "spring_boot_elk" # 파이프라인으로 수집하는 데이터의 인덱스
user => "elastic"
password => {elastic_pwd}
}
}
파이프라인 설정에 내 컨피그를 등록해주어야 한다. pipeline.yml을 수정해 준다.
- pipeline.id: from_springboot
queue.type: persisted
path.config: config/logstash.conf
Step 6. 키바나에서 로그 확인
키바나에서 Logstash로 들어온 데이터의 인덱스 spring_boot_elk에 대한 데이터를 조회할 수 있는 뷰를 만들어준다.
이제 위처럼 로그를 확인할 수 있다. 위 화면은 KQL (Kibana Query Language)을 사용해 데이터를 볼 수 있는 간단한 화면이다. Kibana 문서를 통해 여러 가지 설정, 질의를 해보면 입맛에 맞게 데이터를 조회 확인 가능하다.
참고
https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
https://www.elastic.co/guide/en/kibana/current/index.html
https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html
https://github.com/logfellow/logstash-logback-encoder
'Programming > DevOps, Tools' 카테고리의 다른 글
[Java, Spring] 버전 선택 가이드 2024 (Java 21) (0) | 2024.04.27 |
---|---|
[Git] 로컬의 프로젝트별로 git config를 적용하고 싶을 때 (0) | 2024.03.08 |
[Git] rebase + squash로 커밋 합치기 (2) | 2024.01.24 |
[클라우드] 가상화 - 클라우드 컴퓨팅의 핵심 기술 (0) | 2023.10.25 |
[Docker] mysql 8.0 설치하기 (0) | 2023.06.15 |
댓글