04-04 19:25
Notice
Recent Posts
관리 메뉴

독산구너

ELK (ElasticSearch, Logstash, Kibana) 도입 본문

프로젝트/[SW마에스트로] SROOM

ELK (ElasticSearch, Logstash, Kibana) 도입

독산구너 2023. 11. 6. 16:04

글의 목적

스프링 서버에서의 INFO 레벨 로그를 kibana를 통해 시각화, 분석하는 과정을 설명하고자 합니다.

 

ELK

로그는 LogStash를 통해 검색 엔진인 ElasticSearch로 전달되고, Kibana는 ElasticSearch에서 빠른 검색을 통해 데이터를 시각화 및 분석하게 됩니다.

elk 구조

 

 

스프링에서의 로그, Logstash

스프링 로그는 Java에서 가장 많이 사용되었던 로깅 라이브러리인 log4j의 후속 버전인 Logback을 통해 로그 전송 설정이 가능하다.

src/main/resource에서 xml 파일인데, 다음과 같이 설정했다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n</pattern>
        </encoder>
    </appender>

    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>15.164.211.181:5000</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="stash"/>
    </root>

</configuration>

이때 appender는 로그를 어떤 방식으로 넣을 것인지 설정하는 것으로, 다음과 같은 옵션이 있다.

  1. ConsoleAppender: 콘솔에 로그를 기록
  2. FileAppender: 파일에 로그를 기록
  3. RollingFileAppender: 여러 개의 파일을 순회하며 로그를 기록
  4. SMTPAppender: 로그를 메일로 기록
  5. DBAppender: 데이터베이스에 로그를 기록
  6. LogstashTcpSocketAppender: tcp 통신을 통해 로그를 전송

로그  레벨을 알려진 것과 같이 다음과 같다.

  1. ERROR: 요청을 처리하는 중 오류가 발생한 경우 표시한다.
  2. WARN: 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다.
  3. INFO: 상태변경과 같은 정보성 로그를 표시한다.
  4. DEBUG: 프로그램을 디버깅하기 위한 정보를 표시한다.
  5. TRACE: 추적 레벨은 Debug보다 훨씬 상세한 정보를 나타낸다.

따라서 위와 같은 설정은 콘솔에 로그를 출력할 뿐 아니라 Logstash 서버로 로그를 보내는 것까지 포함한다.

여기서 ip 설정은 elk 가 설치된 ec2의 ip 이다.

 

ELK 설치

elk는 ec2에서 설치했으며, ElasticSearch, Logstash, Kibana를 각각 설치할 수 있지만 다음과 같이 git clone을 통해 한꺼번에 설치가 가능하다. 이때는 docker-compose를 사용한다.

git clone https://github.com/deviantony/docker-elk.git

파일 구조는 다음과 같다.

clone 받은 docker-elk 파일 구조

많은 블로그에 나와있는 내용과 다르게 지금은 docker-stack.yml 파일이 없다. .env 편집을 통해 비밀번호를 설정해줘야 한다.

vi .env

여기서 '-----' 으로 되어있는 부분을 비밀번호 수정해줘야 하며, ElasticSearch 에 접속하여 아이디, 비밀번호를 입력할 때 사용된다 (아이디는 elastic)

다음으로 docker-compose.yml을 수정해주어야 한다.

복잡하므로 참고한 글을 첨부한다.

https://mattjhayes.com/2023/07/26/build-an-elk-stack/

 

Build an ELK Stack

When I had a need to visualise telemetry data from a home project, the ELK stack was my go-to solution. The ELK stack (Elasticsearch, Logstash, Kibana) is an open-source-ish[i] tool for ingesting, …

mattjhayes.com

 

 

모든 설정 이후,docker-compose up을 통해 실행 가능하다.

물론, ec2에서 보안그룹 수정을 통해 Logstash(5000 포트, 임의 설정), kibana(5601 포트)를 열어주어야 한다. (로그를 전달할 ip, elasticsearch 접속 가능한 ip)

 

이렇게 실행이 완료되면 Ec2의 ElasticSearch에 접속 가능하다. 아이디는 elastic, 비밀번호는 .env에서 설정한 ElasticSearch 비밀번호이다.

[ELK 가 설치된 EC2 IP]:kibana port

로그인하고 Analytics -> Discover를 확인해 스프링 서버에서 전달한 로그가 제대로 저장되고 있는지 확인한다.

 

 

로그를 활용해 시각화, 분석하는 과정은 다음 글에서 작성하겠습니다.