beats
2022.06.21 - [ELK stack] - [ELK] 1. Elastic Stack
[ELK] 1. Elastic Stack
필자는 파이썬(python, numpy, pandas, matplotlib, plotly)을 활용한 데이터 전처리, 피처 엔지니어링, 모델링을 진행한 경험이 다수 있지만, 서비스 단계에서 사용하는 데이터 파이프라인은 경험해보지 못
wnstjrdl.tistory.com
filebeat
전 포스팅에서 아파치 웹 로그 데이터를 받았기 때문에, 그것을 활용하기 위해 여러 beats 중 filebeat를 사용하겠습니다.
2022.06.29 - [ELK stack] - [ELK] 8. Logstash 실행 및 filter 설정
[ELK] 8. Logstash 실행 및 filter 설정
Logstash 커맨더 라인으로 logstash 실행 Mac, Unix & Linux Windows 파이프라인 구성 logstash 실행을 위한 2가지 방법 (with configurations) -e : Set configurations in command line -f : If configurati..
wnstjrdl.tistory.com
버전에 맞는 filebeat를 다운로드하였다고 가정하겠습니다. filebeat를 사용하기 전 filebeat.yml 설정 몇 가지를 해야 합니다.
filebeat inputs
type : log
enabled : true
paths : {사용할 아파치 로그 데이터 path}
elasticsearch outputs
host : {외부ip주소} (ex. '34.64.211.132:9200' )
username : {유저네임}
password : {패스워드}
logstash outputs
host : {logstash 호스트 주소} (ex. ['localhost:5044'] )
filebeat 실행
실행 - ./filbeat
실행 후 elasticsearch에서 확인 - GET _cat/indices
데이터 확인 : GET {파일 이름}/_search
데이터 개수 : GET {파일 이름}/_count
filebeat -> logstash -> elasticsearch
주의점 1 - beats는 agent 필드도 저장해서 보내는데 그것은 자신의 localhost 정보인데, filter에서 useragent에 agent 필드가 중복이 되기 때문에 grok 하기 전에 beat의 agent 필드를 지워야 합니다.
주의점 2 - filebeat은 지금까지 읽었던 파일은 읽지 않기 때문에 data 디렉터리 삭제해야 합니다. 방법 : rm -fr data
1. 데이터 출력이 많을 때 stdout 보여주면 너무 많은 데이터를 보여주기 때문에 dots으로 output을 확인합니다. (default - rubydebug | json, dots 등등)
2. 필요 없는 필드 삭제
- @timestamp가 있기 때문에 기존 timestamp 삭제
- log host가 아닌 elasticsearch가 찍어준 단순 host라서 삭제
- @version 삭제
- agent로 파싱 해줬기 때문에 삭제 -> message는 원본 데이터 성격이기 때문에 그냥 두기
3. elasticsearch의 인덱스 명 바꾸기 -> @timestamp 년월일을 보고 해당 형식에 맞게 저장됨.
input {
beats {
port => 5044 # beat -> logstash(filebeat.yml의 logstash output 호스트 번호 확인)
}
}
filter {
mutate {
remove_field => ["agent"] ----- 주의점
}
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
geoip {
source => "clientip"
}
useragent {
source => "agent"
target => "useragent"
}
mutate {
convert => {
"bytes" => "integer"
}
}
date {
match => {"timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
mutate { -------- 2
remove_field => ["timestamp", "host", "@version", "agent"]
}
}
output {
stdout { -------- 1
codec => "dots"
}
elasticsearch {
index => "apachelog-%{+yyyy.MM.dd}" --- 3
hosts => [{ip주소:9200}]
user => "elastic"
password => "cjswnstjr"
}
}
beat -> logstash
stdout으로 .(dots)로 표시
logstash -> elasticsearch
GET _cat/indices
GET _cat/indices/apachelog-* - 설정한 날짜 별로 저장
데이터 확인
GET apachelog-*/_search를 할 경우 value값이 제대로 나오지 않습니다. (성능을 위한 샘플링) -> 10000
GET apachelog-*/_count를 하면 알 수 있습니다.
또는 터미널 데이터 path에서 데이터 개수 확인 가능 - wc -l weblog-sample.log
마무리
이번 포스팅은 filebeat - logstash - elasticsearch로 이어지는 파이프라인에 대해 알아보았습니다. 설치에 관한 내용은 포스팅에 포함되지 않으니 공식 홈페이지에서 다운로드하면 되겠습니다.
다음 포스팅은 위 과정을 통해 elasticsearch로 받은 아파치 로그 데이터에 인덱스 재색인에 관한 포스팅을 진행하겠습니다. 감사합니다.
'ELK stack' 카테고리의 다른 글
[ELK] 11. elasticsearch 인덱스 재색인 (2) - 인덱스 템플릿과 스크립트 사용 (0) | 2022.07.03 |
---|---|
[ELK] 10. elasticsearch 인덱스 재색인 (1) - 필드 매핑 개선 (0) | 2022.07.01 |
[ELK] 8. Logstash 실행 및 filter 설정 (0) | 2022.06.29 |
[ELK] 7. elasticsearch 인덱스 매핑과 데이터 타입(2) - 날짜, 객체, 위치 정보 (0) | 2022.06.28 |
[ELK] 6. elasticsearch 인덱스 매핑과 데이터 타입(1) - 문자열, 숫자 (0) | 2022.06.28 |
댓글