2편에서 Parsing한 데이터의 정확성 및 다양한 데이터로 확장 방법 소개
1) Access log 요청 마친 시간으로 Parsing 시간을(@timestamp) 변경
2) geoip plugin 적용하여 clientip 지도에 출력
3) useragent plugin 적용
1. Parsing된 timestamp, @timestamp 확인
JSON에서는 Timezone 확인이 불가하니 Kibana를 통해 확인 필요
kibana 설정으로 인해 한국시간(UTC+9)으로 자동 변경됨
timestamp : 클라이언트 요청을 마친 시간(붉은색)
@timestamp : parsing된 시간(UTC+0), JSON에서는 한국 시간(UTC+9)으로 변환 안됨(파란색) → Kibana에서 정상 표기됨
즉, access log 시간과 parsing 시간이 다름
2. timestamp 과 @timestamp 일치
date filter 사용하여 timestamp의 타겟을 @timestamp로 변경
... 생략
filter {
grok { match => { "message" => [ "%{IPORHOST:[clientip]} - - \[%{HTTPDATE:[timestamp]}\] \"%{WORD:[method]} %{DATA:[request]} HTTP/%{NUMBER:[http_version]}\" %{NUMBER:[response]} (?:%{NUMBER:[bytes]}|-)( \"%{DATA:[referrer]}\")( \"%{DATA:[agent]}\")" ] } }
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss +0900" ]
target => "@timestamp"
}
... 생략
timestamp의 형식이 다른경우 아래 "더보기" 참고
timestamp의 형식이 다른경우 아래 URL에서 형식에 맞춰 변경 필요함
https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html
예시) 2020-02-20 12:44:33 인 경우의 match 내용
date {
match => ["day", "yyyy-MM-dd HH:mm:ss"]
target => "@timestamp"
}
3. geoip filter 적용
[중요] geoip 적용하기전에 template에 geo_type 변경후 geoip 적용
[참고] Kibana Index Template 수정 방법(for. geo_ip) (https://dragon1.tistory.com/85)
아래 가이드는 미적용상태에서 진행
1) geoip에 clientip 정보 적용
... 생략
filter {
grok { match => { "message" => [ "%{IPORHOST:[clientip]} - - \[%{HTTPDATE:[timestamp]}\] \"%{WORD:[method]} %{DATA:[request]} HTTP/%{NUMBER:[http_version]}\" %{NUMBER:[response]} (?:%{NUMBER:[bytes]}|-)( \"%{DATA:[referrer]}\")( \"%{DATA:[agent]}\")" ] } }
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss +0900" ]
target => "@timestamp"
}
geoip {
source => "clientip"
}
... 생략
하지만 JSON 에는 정상적용이 되었으나, kibana에는 표기 안됨
2) geoip 필드 type 확인
location필드가 geo_point 타입이 아님
기본 조건('logstash-인덱스명' 사용, 하나의 필드 적용)에서 벗어나면 geo_point 타입의 자동 적용이 안됨 수동으로 Mapping 해야함
3) 수동 매핑
일반적으로 template에 적용하여 새롭게 생성되는 모든 인덱스에 매핑 시킴
[참고] Kibana Index Template 수정 방법(for. geo_ip)
4. Useragent filter 적용
1) useragent filter 설정
... 생략
filter {
grok { match => { "message" => [ "%{IPORHOST:[clientip]} - - \[%{HTTPDATE:[timestamp]}\] \"%{WORD:[method]} %{DATA:[request]} HTTP/%{NUMBER:[http_version]}\" %{NUMBER:[response]} (?:%{NUMBER:[bytes]}|-)( \"%{DATA:[referrer]}\")( \"%{DATA:[agent]}\")" ] } }
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss +0900" ]
target => "@timestamp"
}
geoip {
source => "clientip"
}
useragent {
source => "agent"
target => "agents"
}
... 생략
5. 끝
'ELK stack > 02.Logstash' 카테고리의 다른 글
[Filter Plugins] CSV → Logstash → ES 저장 방법 (0) | 2020.03.03 |
---|---|
logstash Grok Pattern 적용(Apache Access log) - 기본편(2) (0) | 2020.02.13 |
logstash Grok Pattern 적용(Apache Access log) - 기본편(1) (0) | 2020.02.12 |