[Logstash] 로그스태시와 파일비트의 개요
📌 Topic
- 💡 로그스태시 파일비트 개요
- 💡 로그스태시 파이프라인
- 💡 로그스태시 플러그인
- 💡 파일 비트
⚡ 01. 로그스태시 파일비트 개요
데이터 수집(파일비트, 로그스태시) -> 인덱싱(엘라스틱서치) -> 시각화(키바나 로그스태시는 데이터의 전처리와 후처리를 담당한다
- 오픈 소스로써 서버 측 데이터를 처리하는 파이프 라인이다.
- 다양한 소스에서 동시에 데이터를 수집하여 반환 한다.
- 그 다음 자주 사용하는 Elasticsearch에게 전달 한다.
위에서는 Elasticsearch에게 데이터를 전달 한다고 하였지만, 실제 실무에서 사용이 되는 것을 보면 다양한 서비스에 이벤트 데이터를 전달할 수 있다.
⚡ 02. 로그스태시 파이프라인
로그스태시의 input, filter, output은 커스터마이징 하는 것이 까다롭다.
또한 파이프라인의 환경은 yaml 파일을 통해 수정한다.
- Input
- 데이터를 실제로 입력 받는 영역이다.
- Logstash로 데이터를 가져온다.
- Filter
- Logstash 파이프 라인의 중간 처리 장치.
- Output
- Filter를 통해 가공 되어진 데이터를 출력하는 영역이다.
✅ 02-1. 로그스태시의 입력(Input)
Filebeats, Rebbitmq, Redis, Salesforce
모든 소스, 사이즈 및 형태의 데이터를 수집한다
데이터는 여러 시스템에서 다양한 모습으로 산발적으로 보관된 경우가 많다. Logstash는 다양한 입력(Input)을 지원하여 여러 공통 소스로부터 로그 수집이 가능하다. 즉, 로그, 메트릭, 웹 애플리케이션, 데이터 저장소 및 다양한 AWS 서비스를 연속 스트리밍 형태로 간편하게 수집할 수 있다.
✅ 02-2. 로그스태시의 필터(Filter)
로그스태시의 필터는 이벤트를 분석하고 명명된 필드를 식별하여 이를 공통적으로 구조화된 형식으로 변환한다. 또한 Logstash는 형식이나 복잡성에 상관 없이 데이터를 동적으로 변환하고 준비 해둔다.
✅ 02-3. 로그스태시의 출력(Output)
Logstash는 원하는 곳으로 데이터를 라우팅(Routing) 할 수 있는 다양한 출력을 지원한다. 때문에 여러 저장소로 데이터를 다운스트림 하는 유연성도 확보할 수 있다.
✅ 02-4. 로그스태시의 파이프라인 구조
💡 02-4-1. Input
input {
file { # plugin
codec => json
path => "c:/logs/*.log"
}
}
💡 02-4-2. filter
filter {
geoip { # plugin
database => "./GeoLite2-City.mmdb"
source => "ip"
}
}
💡 02-4-3. output
ouput {
stdout { # plugin
codec => dots {}
}
elasticsearch { # plugin
index => "apache_elastic_example"
template => "./apache_template.json"
template_name => "apache_elastic_example"
template_overwrite => true
}
}
- 위에서 보다시피 대표적으로 input -> filter -> output 순으로 진행이 된다.
⚡ 03. 로그스태시의 플러그인
✅ 03-1. 로그스태시의 플러그인 리스트
위 사진을 보면 input, filter, output에 해당하는 플러그인 리스트들을 나열 하였다.
필요한 경우 해당 링크를 참고하여 적용하자.
✅ 03-2. 로그스태시 플러그인 분석
로그스태시 플러그인
Input
- Files
- Syslog
- SQL Queries
- HTTP request
- Elasticsearch
- Beats
- Metrics systems
- And More..
Filter
- log 파싱
- 데이터 확장
- 태그 추가
- And More..
Output
- Elasticsearch
- Data 보관소 (ex : Amazon S3)
- Alterting & Monitoring system
- And more..
🔥 03-3. input
Logstash로 데이터 수집
- file : tail -0F와 매우 비슷하게 시스템의 파일에서 읽음
- syslog : syslog 메시지 및 구문 분석을 위해 잘 알려진 514번 포트를 수신
- redis : redis 채널과 redis 목록을 사용하여 redis 서버에서 데이터를 읽음
- beat : filebeat에서 보낸 이벤트를 처리
🔥 03-4. filter
Logstash 파이프 라인의 중간 처리 장치
- grok : 임의의 텍스트를 구성하여 구조화되지 않은 로그 데이터 구문을 분석
- mutate : 이벤트 필드에서 일반적인 변환 수행, 이벤트 데이터의 수정 및 제거
- drop : 이벤트를 완전히 삭제
- clone : 이벤트를 복사
- geoip : IP 주소의 지리적 위치에 대한 정보 추가
🔥 03-5. output
최종 단계로 이벤트는 여러 출력 사용 가능
- elasticsearch : Elasticsearch에 데이터 저장
- file : 디스크 파일 형태로 저장
- graphite : Graphite에 데이터 전송, 통계 저장 및 그래프 표현을 위한 오픈 소스
- statsd : statsd에 이벤트 데이터 전송
🔥 03-6. codec
인코딩 방식
- json : JSON 형식의 데이터를 인코딩하거나 디코딩
- multiline : 자바 stack tract와 같은 여러 줄 이벤트 단일 이벤트로 병합
✅ 03-7. input: file plugin
# foo.conf
input {
file { # ⚡ plugin
path => "C:/logstash-2.3.1/logstash-tutorial-dataset"
start_position => "beginning"
ignore_older => 0
}
}
output {
stdout {}
file {
path => "C:/output.txt"
}
}
- path : 경로
- start_position : 시작 위치
✅ 03-8. input: beats plugin
input {
beats { # ⚡ plugin
port => 5044 # logstash port
host => "0.0.0.0"
}
}
여러개의 filebeat로부터 데이터를 수집하여 로그스태시로 전달
- port : 로그스태시 포트
- host : 외부 접근 허용 범위
✅ 03-9. filter: grok plugin
# 원하는 형식(pattern)
client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043
input {
file {
path => "/var/log/http.log" # 해당 경로에서 파일 읽는다
}
}
filter {
grok { # ⚡ plugin
match => {
"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
}
}
}
- match : 정규표현식처럼 패턴을 줘서 가공 처리 가능
✅ 03-10. filter: geoip
input {
file {
path => "D:/sample.log"
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => "%{COMMONAPACHELOG}"
}
}
geoip { # ⚡ plugin
source => "[apache2][access][remote_ip]"
target => "[apache2][access][geoip]"
}
}
- source : 어떤 데이터를 IP로 보낼지 지정
- target : geoip라는 공간에 저장
✅ 03-11. output: elasticsearch
output {
elasticsearch { # ⚡ plugin
hosts => localhost
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
- hosts : 엘라스틱서치 서버가 어디에 있는지 정의 가능
- manage_template : 기본적인 매핑 지원(true/false)
- index : 사용자가 원하는 형태의 인덱스 이름이 있다면 그 형태를 지정
⚡ 04. 파일 비트
경량 로그 데이터 수집기
- 일반적인 형식의 로그 데이터 수집, 파싱, 시각화를 단일 명령어로 사용 가능.
- 가능한 내부 모듈
- Apache
- Nginx
- System
- MySQL
- And More..
- Elasticsearch의 Ingest Node 파이프라인과 Kibana 대시보드 자동 생성
댓글남기기