티스토리 뷰

반응형

data engineering할 때, 로그를 시간 순서대로 읽어들일 때, 하나의 로그에 여러 필요한 필드들이 모여있지 않은 경우가 많다.

따라서 앞에서 찍힌 값을 뒤에서 사용하는 부분, 그리고 엑셀에서 +로 하단 필드를 이전 값을 앞,뒤 값으로 동일하게 채우는 그런 기능을 Backfill 또는 forwardFill 이라고 한다.

Elasticsearch에서는 앞에 값을 사용하여 뒤에 값을 계산해서 넣는 duration시간 계산을 하는 경우도, 이와 같이  backfill 기능으로 비슷하기에 aggregate plugin을 제공하고 있다.

https://www.elastic.co/guide/en/logstash/current/plugins-filters-aggregate.html

 

Aggregate filter plugin | Logstash Reference [8.7] | Elastic

this option works fine only if tasks come one after the other. It means : all task1 events, then all task2 events, etc…​

www.elastic.co

 

하지만, 내 경우는 duration도 아니고, 값이 AAAAOOOOAOOAOAOAO이런식으로 unique하게 반복되는 task_id가 존재하지도 않았다. 따라서 %{host}%{file} 와 같이 변수가 바뀌지 않는 static 값 같은 것을 찾아서, 고정으로 사용해버리고, timeout을 제일 짧게 1로 설정하였다.

#이전 값을 변수로 불러와서 사용하는 부분
#값이 2개면 그냥 두줄 써야함 code 블럭에 동시에 넣으면 안됨

aggregate {
	task_id => "%{host}%{file}"
	code => "event.set('navLatitude', map['navLatitude'])"
}
aggregate {
	task_id => "%{host}%{file}"
	code => "event.set('navLongitude', map['navLongitude'])"
}

#현재 값을 내장변수로 저장하는 부분
aggregate {
	task_id => "%{host}%{file}"
	code => "map['navLatitude'] = event.get('navLatitude')"
}
aggregate {
	task_id => "%{host}%{file}"
	code => "map['navLongitude'] = event.get('navLongitude');"
	push_previous_map_as_event => true
	timeout => 1
}
반응형

'elastic' 카테고리의 다른 글

elasticsearch.yml add more  (0) 2023.04.23
Elastic stack  (0) 2023.04.12
elastic geo_point type의 field 만들기  (0) 2023.04.03
인덱싱 중에...  (0) 2023.03.17
logstash grok filter kvpattern  (0) 2023.03.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함