본문 바로가기

Study Information Technology

Spring Boot에서 ELK 스택Elasticsearch Logstash Kibana을 이용한 로깅 및 모니터링 설정

728x90
반응형

Spring Boot에서 ELK 스택(Elasticsearch, Logstash, Kibana)을 이용한 로깅 및 모니터링 설정

Overview

Spring Boot 애플리케이션에서 ELK 스택(Elasticsearch, Logstash, Kibana)을 사용하여 로그를 수집하고 모니터링하는 것은 시스템의 상태를 파악하고 문제를 빠르게 해결하는 데 큰 도움이 됩니다. ELK 스택을 활용하면 로그 데이터를 수집하고, 이를 분석하며, 시각화하여 효과적인 모니터링 환경을 구축할 수 있습니다. 이 문서에서는 ELK 스택을 Spring Boot와 통합하는 과정과 각 단계에서의 설정 방법을 상세히 설명하겠습니다.

1. Elasticsearch 설치 및 설정

Elasticsearch는 로그 데이터를 저장하고 검색하는 데 사용됩니다. 다음은 Elasticsearch를 설치하고 설정하는 단계입니다.

  1. Elasticsearch 다운로드 및 설치
  • Elasticsearch 다운로드 페이지에서 적절한 버전을 다운로드합니다.
  • 압축 파일을 해제한 후, Elasticsearch 디렉토리로 이동합니다.
  • 다음 명령어로 Elasticsearch를 실행합니다:
    ./bin/elasticsearch
  • 기본적으로 Elasticsearch는 http://localhost:9200에서 실행됩니다.
  1. Elasticsearch 설정
  • config/elasticsearch.yml 파일에서 설정을 조정할 수 있습니다.
  • 예를 들어, 클러스터 이름을 변경하려면 cluster.name을 설정합니다:
    cluster.name: my-cluster
  • Elasticsearch를 재시작하여 설정을 적용합니다.

2. Logstash 설치 및 설정

Logstash는 로그를 수집하고 변환하여 Elasticsearch에 전송하는 역할을 합니다.

  1. Logstash 다운로드 및 설치
  • Logstash 다운로드 페이지에서 Logstash를 다운로드합니다.
  • 압축을 해제한 후, Logstash 디렉토리로 이동합니다.
  • 다음 명령어로 Logstash를 실행할 수 있습니다:
    ./bin/logstash -f logstash.conf
  1. Logstash 설정
  • logstash.conf 파일을 작성하여 로그를 수집하고 전송하는 방법을 정의합니다. 예를 들어, Spring Boot의 로그를 Elasticsearch로 전송하기 위한 설정 파일은 다음과 같습니다:
    input {
    file {
    path => "/path/to/spring-boot-logs.log"
    start_position => "beginning"
    }
    }
    

filter {
json {
source => "message"
}
}

output {
elasticsearch {
hosts => ["localhost:9200"]
index => "spring-boot-logs"
}
}

- `path`는 로그 파일의 경로를 지정합니다.
- `index`는 Elasticsearch에서 로그가 저장될 인덱스의 이름을 정의합니다.

### 3. Kibana 설치 및 설정

Kibana는 Elasticsearch의 데이터를 시각화하는 도구입니다.

1. **Kibana 다운로드 및 설치**
- [Kibana 다운로드 페이지](https://www.elastic.co/downloads/kibana)에서 Kibana를 다운로드합니다.
- 압축을 해제한 후, Kibana 디렉토리로 이동합니다.
- 다음 명령어로 Kibana를 실행합니다:
```bash
./bin/kibana
  1. Kibana 설정
  • Kibana는 기본적으로 http://localhost:5601에서 실행됩니다.
  • config/kibana.yml 파일에서 설정을 조정할 수 있습니다.
  • 예를 들어, Elasticsearch의 주소를 설정하려면 elasticsearch.hosts를 설정합니다:
    elasticsearch.hosts: ["http://localhost:9200"]

4. Spring Boot 애플리케이션에서 로그 설정

Spring Boot 애플리케이션에서 로그를 JSON 형식으로 출력하도록 설정하고, Logstash가 이를 읽어들이도록 합니다.

  1. Spring Boot 의존성 추가
  • pom.xml 파일에 필요한 의존성을 추가합니다:
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>
  1. 로그 출력 형식 설정
  • application.properties 또는 application.yml 파일에서 로그 포맷을 JSON으로 설정합니다:
    logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
    logging.file.name=application.log
  • 로그를 JSON 형식으로 출력하려면, Logback의 JSON Encoder를 사용할 수 있습니다.
  1. Logback 설정
  • src/main/resources/logback-spring.xml 파일을 생성하여 JSON 형식의 로그를 설정합니다:

    <configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
      <file>logs/spring-boot-logs.log</file>
      <encoder>
        <pattern>%json</pattern>
      </encoder>
    </appender>
    
    <root level="info">
      <appender-ref ref="FILE" />
    </root>
    </configuration>

5. 로그 모니터링 및 시각화

Kibana를 통해 수집된 로그를 시각화합니다.

  1. Kibana에서 인덱스 패턴 설정
  • Kibana의 웹 UI에서 Management > Index Patterns로 이동하여 새 인덱스 패턴을 생성합니다.
  • Elasticsearch의 인덱스 이름(예: spring-boot-logs)을 입력하고, 날짜 필드를 선택합니다.
  1. 대시보드 및 시각화 생성
  • Discover 탭에서 로그 데이터를 조회하고, Visualize 탭에서 다양한 시각화 차트를 생성합니다.
  • 대시보드를 만들어 여러 시각화를 종합적으로 모니터링할 수 있습니다.

에러 처리

  • Logstash 에러: No such file or directory

  • 해결책: Logstash 설정 파일의 경로를 확인하고, 파일이 존재하는지 확인합니다.

  • Elasticsearch 에러: Bootstrap checks failed

  • 해결책: elasticsearch.yml 설정 파일에서 클러스터 및 노드 설정을 확인합니다.

참고문서

728x90
반응형