고(GO) 프로그래밍 언어로 작성된 경량 프로그램이기 때문에 로그 수집을 원하는 시스템에 큰 부담을 주지 않으며 로그스태시, 엘라스틱서치와 연계해 다양한 시스템의 이벤트를 수집할 수 있게 도와줌
비츠는 오픈소스 라이선스를 따르며 립비트라는 프레임워크를 제공하므로 사용자들이 직접 필요한 각 비트를 구현할 수 있음
비츠는 수집한 데이터를 엘라스틱으로 실어 나르기 위해 최전방에 위치한 소프으웨어로서, 엘라스틱에서 공식적으로 지원하는 파일비트(로그 파일 수집), 메트릭비트 (메트릭 수집), 패킷비트(네트워크 데이터 수집), 윈로그비트 (윈도우 이벤트 로그 수집), 오딧비트(감사 데이터 수집), 하트비트(가동 시간 모니터링 데이터 수집), 펑션비트(서버리스 데이터 수집)외에도 공동체에서 만든 카프카비트(카프카 토픽 데이터 수집), 엔진엑스비트(엔진엑스 상태 수집), MySQL비트(MySQL 상태 수집) 등 상당히 많은 비트가 존재
이와 더불어 비츠는 온프레미스와 가상 머신뿐만 아니라 컨테이너와 쿠버네티스 환경에서도 사용이 가능하므로 전체 인프라스트럭처의 관측성을 높이기 위한 토대로도 볼 수 있음
비츠는 설정이 간편하고 별도의 데이터 가공을 위한 프로그래밍 작업이 필요하지 않으므로 일단 원하는 비트를 확보했다면 빠르게 데이터 수집을 시작할 수 있으며, 특정 비트 내에서 모듈을 추가하는 방식으로 필요한 기능을 확장할 수 있음
7.1 비츠 소개
비츠는 가벼운 프로그램을 지향하기 때문에 하나의 목적만을 수행 (목적별로 다양한 비츠들이 존재)
데이터를 수집하는데 특화되어 있는데, 데이터를 수집하는 역할만을 보면 로그스태시와 유사해 보일 수 있으나 차이가 있음
로그스태시는 다양한 플로그인을 포함해 범용성이 높은 만큼 무겁게 움직임
비츠는 범용성을 포기하고 특정 목적만 수행하도록 가볍게 구성되어 애플리케이션의 성능에 영향을 미치지 않고 필요한 이벤트를 수집할 수 있음
그렇다고 이벤트 가공을 완전히 지원하지 않는 것도 아니므로 간단한 수집이라면 로그스태시보다 비츠를 쓰는 것이 성능상 유리
하지만 좀 더 전문적이고 범용적인 대량 이벤트 가공이 필요하다면 로그스태시가 더 적합함
비츠와 로그스태시는 공생 관계로 이해할 것
일반적으로 비츠에서 수집한 데이터는 엘라스틱서치로 바로 보내거나 로그스태시를 거쳐 엘라스틱서치로 보내짐
로그스태시를 거칠 경우 각 비트에서 발생된 다량의 이벤트들을 일괄적으로 가공하고 처리할 수 있음
굳이 데이터 발생량이 많지 않거나 복잡한 가공을 수행할 필요가 없다면 로그스태시를 거치지 않아도 무방함
성격에 따라 비츠 종류가 나뉘는데, 사용 방식은 비슷하나 설치 방법이나 용도가 조금씩 다름
하나의 비츠 사용 방법을 익히고 이해하게 되면 다른 비츠를 사용할 때 크게 어려움이 없음
세부적인 옵션이 조금 다를 뿐이지 큰 틀에서는 모든 비츠의 동작이 비슷하기 때문
7.3 파일비트
파일비트는 크게 세 가지 주요 구성요소로 이뤄져 있음
파일비트 구성 요소
구성요소
내용
입력 (input)
설정 파일에서 하베스터에 대한 입력 소스를 정함. 파일비트는 하나 혹은 여러 개의 입력을 가질 수 있음
하베스터 (harvester)
입력에 명시된 파일을 직접 수집하는 주체. 파일은 하나의 하베스터를 가지며, 하베스터는 파일을 한 줄씩 읽고 내보내는 역할을 함. 또한 파일을 열고 닫는 역할도 함. 하베스터가 실행되는 동안에는 파일 디스크럽터가 열려 있음.
스풀러(spooler)
하베스터가 수집한 이벤트를 엘라스틱서치나 로그스태시 같은 장소로 전달
파일비트는 기본적으로 파일에 적재되는 로그들을 가져오는 역할을 함
입력에서 대상 경로를 모니터링하다가 새로운 파일이 발견되면 하베스터를 생성해서 해당 데이터를 읽어 들임
7.3.3 파일비트 실행
원하는 로그 파일을 수집하기 위해 설정 파일을 수정해야 함
파일비트를 다운로드하고 압축을 풀면 filebeat.yml이라는 설정 파일이 있음
파일비트 설정 파일 작성 방식이 로그스태시와 비슷해 보이지만 플러그인을 통해 입력/필터/출력을 설정하는 로그스태시와 달리 파일비트는 복잡한 설정이 없음
# ============================== Filebeat inputs ===============================
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
# filestream is an input for collecting log messages from files.
- type: log
-
# Change to true to enable this input configuration.
enabled: true
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
hosts: ["localhost:9200"]
# =================================== Kibana ===================================
# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:
# Kibana Host
# Scheme and port can be left out and will be set to the default (http and 5601)
# In case you specify and additional path, the scheme is required: http://localhost:5601/path
# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
host: "localhost:5601"
인풋은 파일비트가 가져오는 입력이고, 아웃풋은 내보내는 출력이다.
파일비트 인풋 타입
인풋 타입
설명
log
가장 기본이 되는 타입으로, 파일시스템의 지정한 경로에서 로그 파일을 읽어 들임
container
도커 같은 컨테이너의 로그를 수집하기 위한 입력으로, 파일을 읽어 들인다는 점에서 log와 유사
s3
log 타입과 유사하나, 아마존 웹 서비스의 S3 버킷에 위치한 파일을 읽어 들임
kafka
다른 타입과는 다르게 파일을 읽어 들이는 대신 카프카의 토픽을 읽어 들임
아웃풋은 하베스터가 읽어들인 데이터를 전달할 곳으로 엘라스틱서치, 로그스태시, 카프카, 특정 파일, 콘솔 등 여러 형태의 아웃풋 중 하나를 지정할 수 있음
파일비트 아웃풋 타입
아웃풋 타입
설명
elasticsearch
가장 많이 사용되는 타입으로, 수집한 이벤트를 엘라스틱서치로 직접 인덱싱
logstash
다수의 비츠를 사용해 엘라스틱서치로 전송되는 인덱싱 리퀘스트의 양이 많거나, 비츠나 인제스트 노드 수준에서 처리하기 어려운 가공 작업이 필요할 때 별도의 로그스태시를 구축 한 후 수집한 이벤트를 전송. 다수의 인덱싱 요청이 로그스태시에서 단일 벌크 리퀘스트로 묶여 인덱싱 효율의 개선을 기대할 수 있음. 이때 전송한 이벤트는 로그스태시의 beats 인풋을 이용해 입력받을 수 있음
kafka
파일비트에서 1차적으로 수집한 이벤트를 카프카로 전송. 카프카는 좀 더 안정적인 수집 파이프라인을 구성할 때 신뢰할 만한 중간 저장소/큐이므로 수집 중 장애 발생 시 데이터 손실을 최소화하기 위한 방안으로 활용. 최종적으로 엘라스틱서치의 인덱싱을 원할 경우 이후 다시 파일비트의 카프카 인풋을 이용하거나 로그스태시의 카프카 인풋을 이용해 입력할 수 있음
console
수집한 이벤트를 시스템 콘솔에 출력. 일반적으로 수집이 정상적으로 이뤄지는지 입력 설정을 테스트하기 위한 목적으로 사용
마지막으로 setup.kibana를 지정하면 키바나 대시보드에서 파일비트 데이터를 확인할 수 있음
6.0 버전 이후부터 지원되며 비츠의 끝단(end point)을 키바나로 설정하면 끝
./filebeat setup -e
setup 옵션을 실행한다.
-e는 모니터에 오류나 로그를 보여주는 옵션이다.
7.3.4 파일비트 설정
파일비트를 설치한 config 폴더를 보면 filebeat.reference.yml 이라는 파일이 있다.
파일비트의 모든 설정에 대한 설명과 기본값이 적혀 있는 참조파일
버전에 맞춰 추가/삭제된 옵션이 모두 포함되어 있읜 설정 파일을 수정할 때 참고
7.3.4.1 유용한 설정
ignore_older는 새로운 파일 탐색 시 오래된 파일은 읽어 들이지 않고 무시하기 위한 설정
filebeat.inputs:
type : log
enalbed : true
paths: xxx
ignore_older: 24h
output.elasticsearch: ...
setup.kibana:
host: ...
- ignore_older는 인풋 타입이 log인 경우 사용할 수 있는 옵션으로 ignore_older 값은 10h(10시간), 10m(10분)처럼 타임스트링 형식으로 작성
- 예를 들어, ignore_older를 10h로 설정하면 최근 10시간 전의 로그만 수집하겠다는 의미
- ignore_older의 기본값은 0으로, 특별히 값을 명시하지 않으면 파일의 생성/수정 시간과 무관하게 모든 내용을 읽어 들임
- 다음은 특정 라인이나 파일을 추가/제외하흔 옵션이다
```text
filebeat.inputs:
- type : log
enalbed : true
paths: xxx
include_lines: ['^ERR', '^WARN']
exclude_lines: ['^DBG']
exclude_files: ['\.gz$']
...
include_lines는 특정 라인을 정규 표현식을 이용해 필터링하고 매칭된 라인만 비츠에서 수용
exclude_lines는 특정 라인을 정규식 표현식을 이용해 필터링하고 매칭된 라인은 비츠에서 수집하지 않음
exclude_files는 패턴에 일치하는 파일을 무시할때 사용
7.3.4.2 멀티라인 로그 처리
자바 오류는 스택 트레이스 정보를 담고 있기 때문에 실제로 하나의 오류를 멀티라인으로 표현
멀티라인을 하나의 라인처럼 처리하는 방법을 6.3.4절 '코덱'에서 자맊ㄴ 다웠는데 용어만 조금 다를 뿐 사용법은 비슷
filebeat.inputs:
- type : log
enalbed : true
paths: xxx
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after
...
인풋 타입이 log인 경우에 멀티라인을 처리할 수 있음
일반적으로 로그는 한 줄에 하나의 로그가 기록되며, 파일비트 또한 기본적으로 싱글라인 단위로 이벤트를 처리함
하지만 경우에 따라 하나의 로그가 여러 줄에 걸쳐 기록되는 경우가 있는데, 이때 multiline. tjfwjddmf dldydgkf tn dlTdma
multiline 설정에는 pattern, negate, match라는 세 가지 하위 옵션이 있으며, 이 세 가지 설정을 조합해 읽어 들인 줄이 로그의 끝인지, 아니면 다음 줄을 계속해서 읽어 들일지 결정할 수 있음
multiline.pattern은 정규식을 이용해 패턴을 지정. 패턴과 일치하는 라인이 나타나면 멀티라인으로 인식
라인의 첫 번째 문자가 공백이면 멀티라인 패턴으로 인식
multiline.negate는 true일때 패턴 일치 조건을 반전시킴
위 설정에서 negate를 true로 변경하면 첫 번째 문자가 공백이 아닐때 멀티라인으로 인식함
multiline.match는 멀티라인을 처리하는 방식으로 before와 after를 지정할 수 있음
위 설정은 매칭 패턴에 일치하는 공백으로 시작하는 라인을 공백으로 시작하지 않는 라인 뒤에 붙이는 방식으로 멀티라인 자바 로그를 하나의 로그로 처리할 수 있음
멀티라인 로그
aoo
koo
boo
boo
zoo
boo
멀티라인 처리를 위한 설정
filebeat.inputs:
- type : log
...
multiline.pattern: '^b'
multiline.negate: true or false
multiline.match: before or after
위 멀티라인 패턴은 라인의 첫 번째 문자가 'b'로 시작할 경우 패턴으로 인식
negate는 true나 false 중 하나를 사용할 수 있고, match는 before나 after 중 하나를 사용할 수 있음
비츠란
7.1 비츠 소개
7.3 파일비트
7.3.3 파일비트 실행
-e
는 모니터에 오류나 로그를 보여주는 옵션이다.7.3.4 파일비트 설정
7.3.4.1 유용한 설정
output.elasticsearch: ...
setup.kibana: host: ...
7.3.4.2 멀티라인 로그 처리