본문 바로가기

elasticsearch

filebeat 관련 요약 및 정리 ( elasticsearch 사이트 번역 정도)

반응형

Filebeat 를 봐야 할 일이 생겨서 문서 확인 및 요약하기 위함. 


현재 6.0 을 쓰고 있어서 6.0 기준으로 살펴 볼려고 하며 역시 공식 사이트 번역 정도임 (  https://www.elastic.co/guide/en/beats/filebeat/6.0/index.html )



파일비트 시작하기

기본 파일 위치 : /etc/filebeat/filebeat.yml ( docker 는 /usr/share/filebeat/filebeat.yml )
filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*

Golang Glob 패턴을 지원한다고 함.

하위 디렉토리까지 가져오기 위해선 /var/log/*/*.log


logstash output 을 사용하기 위해서는 logstash 에 beat input plugin 설치를 해야 함


일반적인 로그 포멧을 지원해 주기 위해서 모듈을 제공

Nginx, Apache2, Mysql 등등의 모듈을 제공


파일비트 설정하고 실행하기

* 디렉토리 구조 ( 사이트 들어가서 보는게 좋을 듯 https://www.elastic.co/guide/en/beats/filebeat/6.0/directory-layout.html )

기본적인 구조는 path.home 밑에 bin, data, logs 가 위치하는 구조이고, 실행할 때 path.config, path.data, path.logs 인자를 주어 변경 가능

기본 위치가 있고 자세한 건 위 링크에 들어가서 보는게 좋을 듯.


* 커맨드 라인 실행 옵션

위에 설명한 디렉토리 구조 ( --path.config 등등) 외에 여러개가 있으며 이것도 사이트 ( https://www.elastic.co/guide/en/beats/filebeat/6.0/command-line-options.html ) 에서 필요할 때마다 참고 하는게 좋을 듯. 하나 test command 가 있어서 설정 테스트를 해 볼 수 있다는걸 숙지. 


* 도커로 실행하기

이미지 다운로드 후 ( docker pull docker.elastic.co/beats/filebeat:6.0.
아래처럼 실행
docker run \
  -v ~/filebeat.yml:/usr/share/filebeat/filebeat.yml \
  docker.elastic.co/beats/filebeat:6.0.1


이미지를 입맞에 맞게 변경하기 위해선 아래와 같이 하면 됨

FROM docker.elastic.co/beats/filebeat:6.0.1
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown filebeat /usr/share/filebeat/filebeat.yml
USER filebeat


파일 비트는 어떻게 동작하는가?

* harvester

하나의 파일의 내용을 읽는 애로써 하나의 파일을 읽어서 내용을 출력함.

파일을 열고 닫는것 까지 처리를 하고 있으며, 하비스터가 실행 되고 있으면 file descriptor 가 남아 있다는 의미임. 하비스터가 살아 있는데 파일이 지워져도 계속 잡고 있기 때문에 디스크 문제가 있을 수 있음 close_inactive 에 도달할 때 까지 파일을 열고 있음

파일 close 에 대한 설정은 close_* 옵션으로 설정 할 수 있음

* prospector

하비스터를 관리하고 읽어야 할 모든 소스를 찾는 역할을 하며, 자신만의 Go routine 을 가지고 실행함.

log, stdin 타입만 지원하며, 프로스펙터당 2개 이상의 type 선언이 가능하다.


로그스태시처럼 어디까지 읽었는지 position 을 별도로 디스크에 저장함.

파일비트는 데이터 유실 없이 at-leat-once 전달을 하는데 각 이벤트에 대한 상태를 별도로 가지고 있기 때문


모듈, 자세한 설정등은 필요할 때 사이트에서 봐야 할 듯


기타

filebeat -e 로 디버깅 가능 ( foreground 로 실행하여 output이 console 에 찍힘 )


자주 묻는 질문

* 네트워크 볼륨에 있는 파일은 읽을 수 없습니까? -> 네. (읽지 못한다고 생각하세요.)

* 너무 많은 오픈 파일 핸들러

filebeat는 파일의 마지막 (엔터 2번? ) 에 도달할 때까지 파일을 열고 있다.

너무 많은 파일을 하비스터가 열고 있으면 문제가 될 수 있다. 일반적인 환경에서는 활성화 되어 있는 파일의 업데이트 횟수가 적은 편인데 close_inactive 설정에 따라 파일을 닫을 수 있다.

close_* 관련 옵션 설정을 좀 봐야 할 듯 하며, 특히 file rotation 에 필요 할 듯

* 너무 큰 Registry file

파일이 큰 경우 clean_removed, clean_inative 옵션을 활용할 것

* Inode 재사용으로 인해 lines 가 생략되는 문제?

clean_removed, ignore_older, clean_inactive 설정을 활용할 것

* 파일비트가 너무 많은 CPU 를 사용하는 문제

scan_frequency 설정을 조절해야 하며, 1s보다 적게 설정하면 더 많이 디스크 스캔 할 것이다.

* 파일비트가 마지막 라인은 불러오지 않는다.

파일피트는 이벤트의 마지막을을 newline 문자로 이용하는데 마지막 라인 후에 newline 문자가 필요하다. 그렇지 않으면 파일비트는 파일의 마지막 라인을 읽지 않을 것이다. ( 마지막엔 엔터 두번 쳐라. )

* 지워진 파일을 너무 오랜 시간동안 열고 있다.

close_timeout 을 5m 으로 설정 할 수 있으며, 이는 EOF 인지 아닌지 5분마다 확인한다. 이로 인해 파일비트가 eof 에 도달하기 전에 파일이 지원지면 데이터 유실이 있을 수 있다.

* bandwidth 를 제한할 필요가 있다?

os 설정을 수정하라.


반응형