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

로그 모니터링

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

ELK 스택이란?

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

etc-image-0

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에 접근할 수 있는지 확인합니다.

etc-image-1


이후 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 패턴을 생성해주면 됩니다.

etc-image-2


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

5. discover로 로그 보기

etc-image-3


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