[ELK] 로그 모니터링 시스템

로그 모니터링

운영하고 있는 서비스에 장애가 생기면, 로그를 분석함으로 발빠르게 대응을 할 수 있다. 실제로 운영중인 서비스는 짧은 시간의 장애에도 사용자에게 부정적인 영향을 주기에 발빠르게 대처해야한다. 이를 위해 사용하는것이 로그모니터링 시스템이다.

ELK 스택이란?

  • ElasticSearch 로그 저장 및 검색
  • Logstash 로그 수집
  • Kibana 로그 시각화

3개의 모듈을 따로 사용할 수 있지만 합쳤을때 호환이 좋아서 같이 구축하여 사용한다.

1. Logstach

  • 시스템의 로그, 메트릭 등 다양한 소스에서 데이터를 수집
  • 데이터 변환
  • 데이터 출력 및 송신

2. Elasticsearch

  • 데이터 저장
  • 데이터 분석
  • 데이터 관리

3. kibana

  • 데이터의 시각화

Docker-Compose로 ELK 스택 활성화

망나니 개발자님 repository를 참조했습니다.

1. git clone

git clone "https://github.com/MangKyu/Docker-ELK"

2. logstash 설정

/logstash/pipeline/logstash.conf를 열어준 뒤 다음과 같이 수정합니다.

input {

        tcp {
                port => 5000
        }
}

## Add your filters / logstash plugins configuration here

output {
        elasticsearch {
                hosts => "elasticsearch:9200"
                user => "elastic"
                password => "changeme"
                index => "test-%{+YYYY.MM.dd}"
        }

}

3. docker-compose build & up

해당 설정이 마무리되면 docker-compse build와 up 명령어를 통해 실행시켜줍니다.

docker-compse build && docker-compse up -d

4. kibana가 제대로 실행되었는지 확인

호스트와 5601포트를 이용해 kibana에 접근할 수 있는지 확인합니다.


이후 Username : elastic, Password : changeme를 통해 접속하면됩니다.

SpringBoot에서 발생한 로그 Logstash로 보내기

1. 프로젝트에 디펜던시 추가

Logback의 로깅 시스템과 Logstash를 연동하기 위한 라이브러리를 추가합니다.

implementation 'net.logstash.logback:logstash-logback-encoder:7.2'

2. logback-spring.xml 생성

/resources하위에 logback-spring.xml을 생성해줍니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>host:5000</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>

destination은 logstash가 설치된 서버의 호스트를 잘 입력해줘야합니다.

4. kibana에서 log 보기

사이드바의 맨 밑으로 내리면 Management에 Stack Management에 들어간 뒤에 Index Patterns에 들어가서 이전에 설정한 index 패턴을 생성해주면 됩니다.


이미 인덱스가 생성되어 있기에 빨간색으로 표시됩니다. 정상적이면 빨간색 표시가 없습니다.

5. discover로 로그 보기


정상적으로 was의 로그가 전송된 것을 확인할 수 있습니다.