DevOps & Cloud발행일 2025. 7. 23.원본 https://blog.naver.com/jword_/223943467686 ↗

[ELK] 1. Logstash 사용하기

[ELK] 1. Logstash 사용하기 — #개발자의도구들 #SpringLog #SpringLogstash #Logstash #로그스태시 #Logback AI스쿨 msa기반 jav...

#DevOps/cloudOps#Naver Blog

#개발자의도구들 #SpringLog #SpringLogstash #Logstash #로그스태시 #Logback

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

\* 현재 Spring x 프로젝트를 진행하고 있습니다. 전체 목차를 보시려면 여기를 눌러주세요.

\* Devops stack: 여기

\* 리눅스 기본기: 여기

이미지

Spring의 로그를 Logstash로 전송하자

이전글을 통해 Spring에서 Logstash로 전송 후 Elsastic search에 로그가 저장되는 것을 이해했습니다. 아키텍처는 이해했으니, 이제 실제로 구현을 해봅시다.

javascript 코드 예제
                                    🧩 이번 글 부터는 제가 직접 기획 및 설계한 체험단 프로젝트로 대체합니다.
해당 서비스 및 서버에 좀 더 많은 기능과 고도화된 설계가 들어가 있습니다.

Logstash 설치하기

다운로드 관련해서는 너무 많은 글이 존재하기 때문에 여기서는 패스하겠습니다. 요즘에는 GPT로도 금방 다운 가능해요.

Logstash 설정하기

Spring과 Logstash를 연동하기 위해 Logstash 내부에서 설정 파일을 만져야 합니다. 또한 Logstash에서 Elastic search로 로그를 보내기 위해서도 따로 설정이 필요하죠. 뿐만 아니라 Logstash는 들어온 로그에 추가적인 프로세싱이 가능합니다.

javascript 코드 예제
                                    세 가지 주요 동작

1. input 설정
  - local file, syslog, File Beats, TCP/UDP input 감지
  - 👉 우리는 Spring에서 바로 보내는거라 TCP를 감지할 것
2. filter 설정 (Optional)
- Process and enriches (parsing Json or adding timestamps)
3. Output 설정

👉 테스트

javascript 코드 예제
                                    # logstash config 파일 위치
config/logstash-sample.conf

설정파일을 직접 수정하면 됩니다. 우리는 TCP로 부터온 Json 데이터를 Parsing 이후 local에 저장해 보도록 하겠습니다.

javascript 코드 예제
                                    # input tcp port 5044를 열어둠, 형식 json
input {
  tcp {
    port => 5044
    codec => json_lines
  }
}

filter에서 json을 설정할 수 있지만, 일반적으로 input으로 들어온 데이터를 codec을 사용하여 바로 json으로 변한합니다.

javascript 코드 예제
                                    codec => json vs codec => json_lines

1. a single json object vs json streams
2. work well with inputs like files, Redis, vs Best for streaming inputs like TCP or UDP
javascript 코드 예제
                                    # input tcp port 5044를 열어둠, 형식 json
output {
  file {
    path => "/home/tod/logs/logstash/simple_test.log"
    codec => json_lines
  }
  stdout { codec => rubydebug }
}

테스트 용으로 output을 file로 저장하도록 하겠습니다. 아래에도 언급하겠지만, path를 잘 적어주세요. 유저 권한 문제가 발생할 수 있습니다.

이제 로그가 잘 입력되고 출력되는지 테스트 해봅시다..

javascript 코드 예제
                                    echo '{"message": "test"}' | nc localhost 5044

json 형식으로 VM 내부에서 5044 포트로 데이터를 보냅니다. 보내고 나면 아래와 같은 결과를 확인하실 수 있습니다.

이미지

stdout을 설정하면 logstash launcher process에서 해당 로그를 확인할 수 있습니다. 또한 파일 역시 잘 저장 된 것을 보실 수 있습니다.

이미지

javascript 코드 예제
                                    🤔 @version, @timestamp 필드는 무엇인가?

Logstash에 데이터가 도착하면 자동으로 해당 필드들이 추가됩니다. 이는 elastic search로 데이터를 보낼 때 매우 유용하게 사용할 수 있습니다.

​

Next to

매우 기본적인 Logstash 사항이었고 다음은, Elastic search와 연동하는 방법을 알아봅시다.

​

👉 ElasticSearch 설정 및 실행

발생했던 오류들

  • Pemission denied
  • 언제? test 할 때 file로 로그를 저장하려고 할 때
  • 해결:
  • 각 유저 권한에 맞는 dir 선정, 권한 부여

​