[Infra] ELK 스택으로 모니터링 시스템 구축하기

다은·2025년 8월 27일

Infra

목록 보기
2/4
post-thumbnail

1. ELK란?

ElasticSearch + Logstash + Kibana 의 약어로, 로그 수집을 위해 오픈소스 툴들을 이용해 만든 아키텍처의 일환입니다.

  1. Logstash
    • 데이터 처리를 담당함
    • 앱으로부터 받은 로그를 가공함
  2. ElasticSearch
    • 전처리된 로그 데이터를 저장함
  3. Kibana
    • 데이터를 시각화 해 확인할 수 있음

서버에서 발생하는 로그들을 수집해 더욱 효율적으로 확인하기 위한 모니터링 스택의 일종으로, 로컬에서 ELK 스택을 구축하는 실습을 진행해보겠습니다.



2. Elasticsearch 설정

1. Elasticsearch 설치

아래 코드를 통해 elasticsearch를 설치하고 압축을 해제해줍니다.

# 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 - 

# Elasticsearch 압축 해제
tar -xzf elasticsearch-8.14.3-darwin-x86_64.tar.gz

2. Elasticsearch 실행

cd elasticsearch-8.14.3/

# Elasticsearch 실행
./bin/elasticsearch

elasticsearch를 처음 실행하면 다음과 같이 주요 정보들을 확인할 수 있습니다.
password나 키바나 연동 토큰은 이후 작업에서 사용되니 따로 메모해둡시다!


3. Elasticsearch Config

기본적으로 elasticsearch는 https를 이용해 통신하기 때문에, 로컬에서 테스트할 분들은 config/elasticsearch.yml를 아래와 같이 변경해줍니다.

xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false



3. Logstash 설정

1. Logstash 설치

아래 링크를 통해 Logstash를 설치 후 압축을 해제합니다.
https://www.elastic.co/kr/downloads/logstash


2. Logstash Config

config 폴더에 logstash.conf라는 이름의 설정 파일을 생성해줍니다.

cd /logstash-9.1.2

# config 파일 생성
vi config/logstash.conf

logstash.conf는 logstash의 입력과 출력에 대한 세부 설정을 명시해주는 파일입니다. 5001포트로 tcp를 이용해 데이터를 수집하고, 이를 elasticsearch로 보낸다는 내용이죠.

  • hosts : elasticsearch의 host, port num 정보
  • index : 수집할 데이터를 저장할 인덱스
  • user : elastic
  • password : 3-2에서 확인한 elasticsearch pwd 기입

만약 앱에서 filebeat를 이용해 로그를 수집한 후 logstash로 보낼 경우, input에 tcp {}가 아닌 beats {}를 이용하면 됩니다.

input {
  tcp {
    port => 5001
    codec => json_lines
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"] # elasticsearch host, port num
    index => "logstash-log"  
    user => "elastic"
    password => {elastic_pwd}
  }
  stdout {} # 모니터링용으로 console에 출력함
}

변경사항을 logstash의 파이프라인에 올바르게 적용하기 위해, pipelines.yml에 아래 코드를 추가해줍니다.

- pipeline.id: springboot-logstash
  queue.type: persisted
  path.config: config/logstash.conf



4. SpringBoot 연동

이제 서비스 단에서 로그를 Logstash로 전송하는 기능을 구현해봅시다.

1. logback dependency

logback custom을 위한 의존성을 추가해줍니다.

implementation("net.logstash.logback:logstash-logback-encoder:7.4")

2. logback custom

우선, 앞서 설정한 logstash의 host, port 정보를 application-secret.yml에서 관리하겠습니다.
springboot와 logstash는 tcp를 이용해 통신하므로, host 정보에 추가적으로 http://와 같은 다른 프로토콜을 등록하면 오류가 발생합니다.

logstash:
  host: localhost:5001

/resources 폴더에 logback-spring.xml 이라는 이름의 파일을 생성해줍니다.

보통 logback 커스텀 파일명은 logback.xml 으로 지정하지만, 아래 보시는 것처럼 springProperty를 이용할 경우, 파일명에 반드시 -spring이 붙어야 합니다.

spring 관련 값을 불러오기 전에 logback.xml 파일을 먼저 읽기 때문에, 올바른 값을 넣지 못해 태그를 해석할 수 없어 오류가 발생합니다. 하지만 파일명에 -spring을 넣게 되면, 바로 logback에 넘기지 않고 application.yml에서 관련 값을 찾아 넣고 실행하기 때문에 오류를 방지할 수 있습니다!

<configuration>

    <!--application.yml에서 목적지 주소 관리-->
    <springProperty scope="context" name="LOGSTASH_HOST" source="logstash.host"/>
    <!--인덱스로 추가할 서비스명-->
    <springProperty scope="context" name="APP_NAME" source="spring.application.name"/>

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--로그 수집 후 출력할 주소-->
        <destination>${LOGSTASH_HOST}</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <!--커스텀해 키바나에서 추가적으로 확인할 필드-->
            <customFields>{"index":"${APP_NAME}"}</customFields>
        </encoder>
    </appender>
	
  <!-- logging level -->
    <root level="WARN">
        <appender-ref ref="LOGSTASH" />
    </root>

</configuration>



5. Kibana 설정

1. Kibana 설치

아래 명령어를 이용해 Kibana를 설치하고 압축을 해제합니다.

# 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 - 

# Kibana 압축 해제
tar -xzf kibana-8.14.3-darwin-x86_64.tar.gz

2. Kibana 실행

cd kibana-8.14.3/ 

## Kibana 실행
./bin/kibana

3. Elasticsearch 연동

localhost:5601 으로 접속하면 아래와 같은 키바나 화면을 마주할 수 있습니다.
elasticsearch로부터 얻은 키바나 연동 토큰을 입력해줍니다.

토큰 입력을 완료하면, 키바나 서버 콘솔에 인증 코드가 나타납니다. 이 코드를 입력해줍니다.

이후, elasticsearch를 처음 시동해서 얻은 비밀번호를 이용해 로그인하면, 두 스택의 연동이 완료됩니다!


4. Kibana 대시보드 구축

Kibana에서 Elasticsearch로부터 들어온 로그를 확인할 수 있도록 Data View를 생성해줍니다.

index pattern에는 logstash config에 작성한 인덱스명을 작성해줍니다.

설정을 마치면, discover 탭에서 아래와 같이 내가 설정한 로그들을 한 눈에 대시보드로 파악할 수 있습니다!



Reference

https://kghworks.tistory.com/204
https://tech.ktcloud.com/255

profile
CS 마스터를 향해 ..

0개의 댓글