로그스태시의 동적 매핑을 사용하면 키워드 필드의 ignore_above 값이 256으로 고정된다.
{ "test": { "aliases": {}, "mappings": { "properties": { "message": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } }}
결과적으로 길이를 초과하는 데이터는 키워드 필드에 저장되지 않기 때문에 집계 작업 시 왜곡 발생.
인덱스 템플릿을 만들어서 정적 매핑을 적용해보자. 그런데 ignore_above 수정 옵션이 안 보이네?
만들어진 템플릿 내역을 살펴보자. ignore_above 옵션이 아예 없다. 정적 매핑일 때는 원래 사용되지 않는 옵션인가? 길이 제한이 없다는 뜻?
GET _index_template/test
{ "index_templates": [ { "name": "test", "index_template": { "index_patterns": [ "test*" ], "template": { "mappings": { "properties": { "message": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } }, "allow_auto_create": false } } ]}
왠지 될 것 같은 부푼 기대를 안고 다시 테스트. 어림 없쥬
[2024-04-01T16:17:53,753][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}{ "message" => "abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz\r"}{ "message" => "abcdefghijklmnopqrstuvwxyz\r"}[2024-04-01T16:17:53,983][WARN ][logstash.outputs.elasticsearch][main][cb7112c4be65177af0c217a3a208d8b35fab773320b508b4c53a66a83af5889d] Could not index event to Elasticsearch. {:status=>404, :action=>["index", {:_id=>nil, :_index=>"test", :routing=>nil}, {"message"=>"abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz\r"}], :response=>{"index"=>{"status"=>404, "error"=>{"type"=>"index_not_found_exception", "reason"=>"no such index [composable template [test*] forbids index auto creation]", "index_uuid"=>"_na_", "index"=>"composable template [test*] forbids index auto creation"}}}}[2024-04-01T16:17:53,985][WARN ][logstash.outputs.elasticsearch][main][cb7112c4be65177af0c217a3a208d8b35fab773320b508b4c53a66a83af5889d] Could not index event to Elasticsearch. {:status=>404, :action=>["index", {:_id=>nil, :_index=>"test", :routing=>nil}, {"message"=>"abcdefghijklmnopqrstuvwxyz\r"}], :response=>{"index"=>{"status"=>404, "error"=>{"type"=>"index_not_found_exception", "reason"=>"no such index [composable template [test*] forbids index auto creation]", "index_uuid"=>"_na_", "index"=>"composable template [test*] forbids index auto creation"}}}}
버전 7에서 잘 되던 게 왜 버전 8에서는 안 될까? 아무래도 allow_auto_create 옵션이 수상하다. 변경.
PUT _index_template/test{ "index_patterns": ["test*"], "template": { "mappings": { "properties": { "message": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } }, "allow_auto_create": true}
{ "index_templates": [ { "name": "test", "index_template": { "index_patterns": [ "test*" ], "template": { "mappings": { "properties": { "message": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } }, "allow_auto_create": true } } ]}
이제 됨.
참고로 키바나 UI 말고 REST API로 생성하면 allow_auto_create 옵션이 적용되지 않는다.
PUT _index_template/test{ "index_patterns": ["test*"], "template": { "mappings": { "properties": { "message": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } }}
{ "index_templates": [ { "name": "test", "index_template": { "index_patterns": [ "test*" ], "template": { "mappings": { "properties": { "message": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } } } } ]}
해당 옵션 없이 적용했으니 당연한 결과인가? 아니면 키바나 UI에 문제가 있는 건가?
댓글 없음:
댓글 쓰기