2024년 4월 1일 월요일

composable template forbids index auto creation

로그스태시의 동적 매핑을 사용하면 키워드 필드의 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에 문제가 있는 건가?

댓글 없음:

댓글 쓰기

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