-
SpringBoot 프로젝트 ELK 연동개발 지식 2024. 11. 9. 16:23
ElasticSearch: 검색 엔진, 로그 저장소
LogStash: SpringBoot의 Logback에 저장된 로그를 ElasticSearch로 전송
Kibana: ElasticSearch에 저장된 로그를 시각화테스트 편의성을 위해 세가지 스택을 Docker-Compose를 통해 실행
networks: elk: driver: bridge services: # Elastic search 설정 elasticsearch: container_name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:8.15.3 ports: - 9200:9200 - 9300:9300 # Elastic search 계정정보 environment: discovery.type: single-node xpack.security.enabled: false xpack.security.transport.ssl.enabled: false networks: - elk # Logstash 설정 logstash: container_name: logstash image: logstash:8.15.3 ports: - 5000:5000 - 9600:9600 volumes: - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf depends_on: - elasticsearch networks: - elk # Kibana 설정 kibana: container_name: kibana image: kibana:8.15.3 ports: - 5601:5601 depends_on: - elasticsearch volumes: - ./kibana/logstash.conf/kibana.yml:/usr/share/kibana/logstash.conf/kibana.yml networks: - elk
보안이 불필요 했기에 xpack.security를 모두 false 설정 했다.
xpack.security가 모두 true라면 계정 정보와 SSL 인증을 애플리케이션 계층에서 거쳐야 ElasticSearch 연동에 성공한다.kibana 설정 파일
server.name: kibana server.host: "0" elasticsearch.hosts: http://elasticsearch:9200 elasticsearch.username: "elastic" elasticsearch.password: "elastic123!@#"
(xpack.security를 false로 했기에 username, password는 불필요)
logback.yml 파일
SpringBoot의 logback에 저장된 로그를 LogStash를 통해 수집, 변환 및 전송하는 파이프라인을 정의한다.
output에서 정의한 인덱스를 기준으로 kibana에서 로그를 모니터링 하게 된다.input { tcp { port => 5000 codec => json_lines } } output { elasticsearch { hosts => "elasticsearch:9200" user => "elastic" password => "elastic123!@#" index => "logstash-%{+YYYY.MM.dd}" } }
파일 구조는 다음과 같으며 elk라는 최상위 폴더 안에 생성했다.
compose.yml logstash -pipeline --logstash.conf kibana -config --kibana.yml
elk 디렉토리에서 docker compose up 명령어(백그라운드 실행은 -d 추가)를 사용하여 elk 스택을 모두 실행할 수 있다.
SpringBoot의 logback에 저장되는 로그와 LogStash가 이해할 수 있는 로그는 형식이 다르다.
LogStash가 이해할 수 있도록 로그를 인코딩하기 위해 다음과 같은 과정이 필요하다.프로젝트에 의존성을 추가한다.
implementation 'net.logstash.logback:logstash-logback-encoder:7.4'
resouces 디렉토리에 logback.xml 파일을 생성한다.
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <!-- Logstash appender 설정 --> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>localhost:5000</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder"/> </appender> <!-- root 로거 설정 --> <root level="INFO"> <appender-ref ref="LOGSTASH"/> </root> <!-- 특정 패키지나 클래스에 대한 로거 설정 (필요할 경우 추가) --> <logger name="INFO_LOG" level="DEBUG" additivity="false"> <appender-ref ref="LOGSTASH"/> </logger> </configuration>
http://localhost:5601 를 통해 Kibana에 접속할 수 있다.
애플리케이션을 실행하고 로그가 발생하면, 화면 좌측 Discover에서 인덱스를 만들라는 화면이 출력된다.
인덱스를 만들면 로그를 실시간 모니터링 할 수 있다.'개발 지식' 카테고리의 다른 글
ElasticsearchException + MappingException (0) 2025.01.24 프로젝트 분석 도구 (4) 2024.11.09 코딩 컨벤션 (Coding Conventions) (0) 2023.12.26