흔히들 엘라스틱은 쓰기, 스플렁크는 읽기 스키마라고 하는데 이제 엘라스틱도 읽기 스키마를 지원한다. 스키마 구조를 디스크에 써야만 읽을 수 있으면 쓰기 스키마(전통적인 RDB 방식), 디스크에 쓰지 않고도 읽을 수 있으면 읽기 스키마.
스플렁크 문서를 보면 search-time field, index-time field란 용어가 자주 나오는데, srarch-time field에 해당하는 것이 엘라스틱의 런타임 필드. 사례를 보자. 다음은 timestamp만을 추출하는 필터 설정.
filter { mutate { remove_field => [ "path", "host", "@timestamp", "@version" ] } grok { match => { "message" => "^(?<timestamp>.{15})" } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] remove_field => "timestamp" }}
{ "message" => "Jan 11 09:12:28 Sensor login: Accepted password for ikmshehe from ::ffff:192.168.191.174 port 56083 ssh2\r", "@timestamp" => 2021-01-11T00:12:28.000Z}
데이터 분석에 사용할 수 있는 필드는 timestamp와 message뿐. 이 상태에서 필드를 추가하고 싶다면 기존 필터 설정을 바꾼 후, 데이터를 다시 인덱싱해야 한다. 아니면 Scripted field를 사용하거나.
이때 런타임 필드를 사용할 수 있다
다음은 런타임 필드 추가 매핑 설정. Scripted field와 마찬가지로 Painless Script를 지원하며, grok과 dissect 필터를 사용할 수 있다.
추가된 process 런타임 필드.
삭제도 가능.
결과만 놓고 보면 Scripted field와 별 차이 없어 보이지만 성능이든 뭐든 더 나으니까 따로 만들었겠지. 데이터 후처리나 인덱싱 성능 저하가 심할 때 사용하면 괜찮을 듯하다.
관련 글
댓글 없음:
댓글 쓰기