본문 바로가기
SpringBoot

[ELK] ELK 스택 구축으로 로그를 수집하고 시각화하기(2/3) (feat. Redis)

by 띵앤띵 2025. 6. 11.
728x90
서브타이틀 : 로그를 모으고 보는 것까지! Kibana UI 확인과 Spring Boot 로그 설정법

 

🙇‍♂️ 이전 글 : https://thinkandthing.tistory.com/121

 

🧐 왜 이걸 딥다이빙하게 되었을까요?

앞선 글에서 ELK 스택을 구축했다면, 이제 실제 로그를 수집하고 확인하는 과정을 다뤄볼 차례에요. 단순히 구성만 해놓고 로그가 안 들어오면 무용지물이잖아요? Kibana UI에서 로그를 확인하고, Spring Boot에서 Redis를 활용해 logstash로 로그를 흘려보내는 방법까지 제대로 정리해봤어요!



🔍 실행 및 Kibana 접속

1. ELK 컨테이너 실행

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.7.0
docker pull docker.elastic.co/logstash/logstash:8.7.0
docker pull docker.elastic.co/kibana/kibana:8.7.0

docker-compose up setup
sudo docker-compose build && docker-compose up -d

그럼 아래처럼 좌르르륵 뜨면서 ELK이 실행되는것을 확인 하실 수 있습니다.

 

2. 접속 확인

 

  • 브라우저에서 http://THINKANDTHING:5601 접속
    (주석: 호스트 IP 또는 도메인 주소는 THINKANDTHING으로 치환됨)
  • 로그인 정보: elastic / changeme
  • Welcome 메시지 뜨면 성공! 🎉

 


🪃 logstash 권한 설정 (Kibana UI 에서)

1. 로그 수집 인덱스 권한 설정

  • 좌측 메뉴 → Management → Stack Management → Security → Roles → logstash_writer 클릭
  • Indices 항목에 appapi-* 추가 (ex. appapi-local, appapi-develop 등)

 

2. logstash_internal 사용자 권한 설정

  • Management → Security → Users → logstash_internal 선택
  • Role로 logstash_writer 부여


 

🏝 Spring Boot 로그 ELK 연동

이제 스프링부트에서 쌓이는 로그를 ELK로 적재하고 Kibana UI에서 확인 해보도록할께요!
일단 개인 SpringBoot 프로젝트로 가봅시다!

 

1. 라이브러리 추가

# gradle
implementation group: 'com.cwbase', name: 'logback-redis-appender', version: '1.1.6'

# maven
<dependency>
  <groupId>com.cwbase</groupId>
  <artifactId>logback-redis-appender</artifactId>
  <version>1.1.6</version>
</dependency>

 

 

2. logback-spring.xml 설정

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

    <!-- 공통 설정 -->
    <springProperty scope="context" name="SERVICE_NAME" source="spring.application.name"/>
    <springProperty scope="context" name="profile" source="spring.profiles.active"/>
    <springProperty scope="context" name="REDIS_HOST" source="spring.redis.host"/>
    <springProperty scope="context" name="REDIS_PORT" source="spring.redis.port"/>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <!-- 로그 패턴 설정 -->
    <property name="CONSOLE_LOG_PATTERN" value="%d{YYYY.MM.dd HH:mm:ss.SSS, Asia/Seoul} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n%throwable"/>

    <!-- 콘솔 로그 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- Redis 로그 -->
    <appender name="redis" class="com.cwbase.logback.RedisAppender">
        <host>${REDIS_HOST}</host>
        <port>${REDIS_PORT}</port>
        <key>logstash</key>
        <type>appapi-${profile}</type>
        <source>${SERVICE_NAME}</source>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <!-- 비동기 Redis 로그 -->
    <appender name="redisAsync" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="redis"/>
        <queueSize>512</queueSize>
        <discardingThreshold>0</discardingThreshold>
        <includeCallerData>false</includeCallerData>
    </appender>

    <!-- Local 환경 -->
    <springProfile name="local">
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>

    <!-- Develop 환경 -->
    <springProfile name="develop">
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="redisAsync"/>
        </root>
    </springProfile>

</configuration>

 


🙆‍♀️ Kibana Discover 확인

자 이제 정말 기본적으로 확인 가능하도록 구성은 완료하였습니다.
지금 세팅한 상태로 SpringBoot를 실행하면 Console로그와 Console에 찍힌 로그들이 ELK로 적재가 되어 Kibana UI에서 확인이 가능합니다.

 

1. kibanaUI에 들어가 로그인해봅시다.

2. Analystics => Discover 메뉴를 누르면 create data view 가 보인다. 아래와 같이 작성한다

 

 

 


💃 Kibana의 Dashboard 활용해서 시각화

대시보드를 원하는 차트들을 구현 후 만들어내어 시각화 할 수 있다.

  1. 메세지 호출 비중
  2. 서비스 별 ERROR
  3. 전체 ERROR 카운팅

위의 요구사항들을 포함하는 대시보드를 아래와 같이 생성하였다.

 


🔚 마무리 멘트

이제 진짜 로그가 흘러들어오고, Kibana에서 눈으로 확인도 가능해졌어요! 🙌
Spring Boot 로그가 Redis로, 거기서 Logstash를 통해 Elasticsearch로, 마지막엔 Kibana에서 시각화까지!
모든 구성요소가 하나씩 연결되고 동작하는 걸 보니 감동이네요 😊

 


 

🙇‍♀️ 다음 글 (많관부)

이번 글에서는 Kibana로 로그를 보는법과 대시보드 설정 방법에 대해서 작성했는데요, 로그를 계속해서 유지하면 시스템에 문제가 생기기겠죠?

다음글에서는 인덱스 라이프 정책(ILM) 에 대해 작성해보겠습니다 ~

다음글 : https://thinkandthing.tistory.com/123

 

[ELK] ELK 스택 구축으로 로그를 수집하고 시각화하기(3/3) (feat. Redis)

쌓이기만 하는 로그는 그만! ILM 설정으로 효율적인 로그 운영하기🙇‍♂️ 이전 글 : https://thinkandthing.tistory.com/122 🧐 왜 이걸 딥다이빙하게 되었을까요?ELK 스택을 도입하고 로그가 잘 쌓이기

thinkandthing.tistory.com

 

 

반응형

댓글