filebeat 에서 inputs path 설정하기 with glob

ELK 2020. 10. 1. 18:02

  filebeat가 긁어올 path는 어떻게 설정하면 될까요? 버전 7.9.2를 기준으로 설명하겠습니다.

 


 filebeat의 설정 파일을 보면, inputs라는 것이 있습니다. 여기서 type과 enabled와 paths와 같은 것들을 설정할 수 있습니다. 당연하게도, enabled는 true로 셋팅해 주면 되겠네요. 그런데, 조심해야 할 것은, paths는 일반적인 regex가 아닌, glob 패턴을 쓴다는 것입니다.

 

 이는 7.9.x의 파일비트 공식 문서에도 나와 있습니다.

 

 그러면, glob base path로 설정해 보도록 하겠습니다. 자세한 것들은 이 문서나, man glob을 참고하세요.

 

 

 몇 가지를 봅시다. 먼저 **은, recursive 하게 매치가 된다는 의미입니다. 예를 들어서, 위의 /home/cho/jo_test/**는, 다음의 것들과 매치가 됩니다. /home/cho/jo_test/a, /home/cho/jo_test/b/a. 그러면, jo_test 밑에 있는 모든 경로에 대해 매치가 될 겁니다. 이것이 먹힌다면요.

 

 

 filebeat.reference.yml에 recursive_glob을 enable 하는 옵션이 있는데요. 이것을 true로 설정해 주시면 됩니다. 이것과 다르게 *.log가 있는데요. 이것은 또 다릅니다. 이것은 0개 이상의 문자를 의미합니다. 저는 확장자를 표시하는 .나, 경로를 표시하는 메타 문자인 /은 생략하지 않습니다.

 

 그러면, 제가 작성한 패턴은, jo_test 밑에 있으면서 .log로 끝나는 파일들을 모두 긁어 오겠다는 의미입니다.

 


 키바나로 잘 들어오는지 확인을 해 봅시다. log.file.path: *jo_test*라고 입력해 보겠습니다. 이것은 log.file.path가 jo_test라는 문자열을 포함하고 있다는 것을 의미합니다. 이 조건을 필터링으로 걸면, 수많은 로그들 중에서, jo_test가 패스에 포함되어 있는 것만 뽑아올 겁니다.

 

 

 필터링을 이렇게 설정하고, 결과들을 모두 보도록 하겠습니다.

 

 

 그러면, 놀랍게도 jo_test 밑에 있는 모든 log 파일에서 긁어온다는 것을 알 수 있습니다.

 

 

  jo_test 밑에 있는 bb 디렉토리에 있는 temp.log에 뭔가를 써도 긁어올까요? 이것 역시 jo_test의 밑에 있으므로, 적당히 잘 긁어옵니다. 실행 결과를 보도록 하겠습니다.

 

 

 잘 긁어왔음을 볼 수 있습니다.

 


 그런데, 우리는 여기서, cho의 홈 디렉터리 밑에 있는 jo_test_2에 있는 log 파일도 긁어오고 싶습니다. 어떻게 하면 좋을까요?

 

 간단합니다. paths 밑에 추가하기만 하면 됩니다. - /home/cho/jo_test_2/*.log 를 filebeat.yml에 추가하였습니다. 그리고 파일비트 서비스를 재시작 하겠습니다.

 

 

  그 다음에 jo_test_2 디렉토리에 있는 temp.log에 12345를 2번 찍어보도록 하겠습니다.

 

 

 그러면, jo_test_2 디렉터리에 있는 로그 파일에 뭔가를 쓰면, 썼다는 이벤트가 날라온다는 것을 볼 수 있습니다.