docker-compose.yml
파일에 해당 내용 추가
logstash:
image: docker.elastic.co/logstash/logstash:8.11.0
container_name: logstash
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline
ports:
- "9600:9600"
- "5044:5044"
depends_on:
- elasticsearch
이후 docker compose를 실행시키고 제대로 Logstash가 기동되었다면 docker-compose.yml이 있던 디렉토리에 logstash 폴더가 생성되어 있을 것이다.
\logstash\pipeline
폴더 안으로 들어가 logstash.conf 파일을 생성하고
input {
tcp {
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "search-log-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
내용을 넣어준다. 여기서 위 yml파일과 포트번호를 맞춰야하고, 제대로 저장이 되었다면 Logstash 컨테이너를 재시작해준다.
스프링부트에서도 logback-spring.yml 파일에서도 같은 포트로 설정을 해줘야 제대로 로그를 Logstash에서 쌓을 수 있다.
logback-spring.yml 예시
<!-- Logstash appender --> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>localhost:5044</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder"/> </appender> <!-- 콘솔 로그 출력 설정 (스프링부트 기본 형식 유지) --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %5p %t --- [%X{session}] %logger{36} : %m%n </pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="logstash"/> <appender-ref ref="CONSOLE"/> </root>
Appender를 두가지로 설정한 이유는 Logstash Appender만 설정 할 경우 모든 스프링부트의 로그가 Logstash로 넘어가고 프로젝트를 현재 돌리고 있는 Intellij환경의 console에서는 로그가 뜨지 않기 때문에 기본 스프링부트 로그 형식을 그대로 출력할수 있도록 설정하였다.