본문 바로가기

Data/Data Engineering

[filebeat] 로그 파일 새로운 라인만 수집되게 하는법

반응형

본 게시글은 제가 바보같이 실수를 한 부분에 대해서 설명합니다.

일단 고수분들이 혹시나 게시글을 보실까봐 미리 얘기하자면, filebeat으로 수집되는 로그파일을 vim으로 수정했더니 이전에 보냈던 로그도 다같이 보내져서 왜인지 살펴보았더니 vim으로 새로운 라인을 추가하면안되고, echo 방식으로 추가해야지 추가한 라인만 보내졌음.

 

 

 

일단 filebeat에서 테스트 삼아 로그 파일을 수집되게끔 설정함. filebeat.yaml은 다음과 같이 설정.

- type은 특정 버전이후로는 logs가 지원되지않고 filestream으로 변경됨

- output은 elasticsearch로 설정

filebeat.inputs:
- type: filestream
  id: test-jaeyung
  enabled: true
  paths:
   - /home/ubuntu/filebeat/filebeat-8.11.1-linux-x86_64/jaeyung/*.log
  ignore_older: 168h
  clean_inacitve: 169h

 

해당 경로에 있던 로그들의 텍스트가 정상적으로 elasticsearch에 보내지는것을 확인.

 

하지만, 새로운 로그가 추가됐을때 로그가 정상적으로 보내지는지 확인하고싶었는데... 첫번째와 두번째 로그전송에서 동일한 내용이 보내지는것을 확인했다.

첫번째 로그 전송
두번째 로그전송

순간 얘가 로그 유실량을 고려해서 처음부터 다시 보내나했는데, 이렇게 할경우 지금 로그수집하는곳에서 매우 많은 리소스를 소비할것같았다.

 

그래서 어떻게하지하면서 filebeat의 inputs configuration을 살펴보았지만... 여전히 도움이 되진않았다.

https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html

 

Configure inputs | Filebeat Reference [8.11] | Elastic

To configure Filebeat manually (instead of using modules), you specify a list of inputs in the filebeat.inputs section of the filebeat.yml. Inputs specify how Filebeat locates and processes input data. The list is a YAML array, so each input begins with a

www.elastic.co

 

계속해서 찾아본 결과 아래와같은 내용을 발견할수있었고,

https://stackoverflow.com/questions/54110137/how-to-prevent-old-log-appending-from-filebeat-to-logstash

 

How to prevent old log appending from filebeat to logstash?

I am using filebeat to get logs from the remote server and shipping it to logstash so it's working fine. But when new logs being appending in the source log file so filebeat reads those logs from the

stackoverflow.com

 

결론은, vim이나 vi를 사용해서 파일 로그를 추가할경우에는 시스템상으로 해당파일이 새로생성된것으로 인식이되서 전체 텍스트 로그를 다시보낸다는것이였다.

 

따라서, 지금과같이 append된 로그만 보내고싶을때는 아래와같은 명령어로 append해줘야 append된 내용만 보내진다는 것이였다.

echo "update3" >> test.log

 

이렇게하니 정상적으로 append한 로그라인만 보내지는것을 확인했다.

반응형