2021년 3월 29일 월요일

엘라스틱 Runtime field

흔히들 엘라스틱은 쓰기, 스플렁크는 읽기 스키마라고 하는데 이제 엘라스틱도 읽기 스키마를 지원한다. 스키마 구조를 디스크에 써야만 읽을 수 있으면 쓰기 스키마(전통적인 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와 별 차이 없어 보이지만 성능이든 뭐든 더 나으니까 따로 만들었겠지. 데이터 후처리나 인덱싱 성능 저하가 심할 때 사용하면 괜찮을 듯하다.

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스