템플릿
원본 보기템플릿
템플릿은 Elasticsearch가 인덱스나 데이터 스트림을 생성할 때 설정, 매핑, 기타 구성을 적용하는 메커니즘입니다.
템플릿은 인덱스나 데이터 스트림을 생성하기 전에 구성합니다. 수동으로든 문서 색인을 통해서든 인덱스가 생성되면, 일치하는 템플릿이 적용할 설정, 매핑, 기타 구성을 결정합니다. 데이터 스트림과 함께 사용하는 경우, 템플릿은 각 백업 인덱스가 생성될 때 어떻게 구성될지도 정의합니다.
템플릿에는 두 가지 유형이 있습니다.
인덱스 템플릿은 인덱스나 데이터 스트림을 생성할 때 적용되는 주요 구성 객체입니다.
index_patterns를 사용해 인덱스 이름을 매칭하고priority값으로 충돌을 해결합니다. 인덱스 템플릿은 설정, 매핑, 별칭을 직접 정의할 수 있으며, 재사용 가능한 구성 블록을 제공하는 컴포넌트 템플릿 목록을 참조할 수도 있습니다. 또한 데이터 스트림을 생성할지 일반 인덱스를 생성할지 지정할 수 있습니다.컴포넌트 템플릿은 설정, 매핑, 별칭을 정의하는 재사용 가능한 구성 요소입니다. 컴포넌트 템플릿은 직접 적용되지 않으며, 반드시 인덱스 템플릿에서 참조되어야 합니다.
인덱스 템플릿과 그것이 참조하는 컴포넌트 템플릿을 합쳐 컴포저블 템플릿이라고 부릅니다.
컴포저블 템플릿 구성에 대한 자세한 설명과 예제는 Elastic 블로그 Index templating in Elasticsearch: How to use composable templates를 참고하세요.
템플릿 사용에는 다음 조건이 적용됩니다.
- 컴포저블 인덱스 템플릿은 Elasticsearch 7.8에서 사용 중단된 레거시 템플릿보다 우선합니다. 특정 인덱스에 일치하는 컴포저블 템플릿이 없으면 레거시 템플릿이 일치해 적용될 수도 있습니다.
- 인덱스가 명시적인 설정과 함께 생성되고 동시에 인덱스 템플릿에도 일치하는 경우, create index 요청의 설정이 인덱스 템플릿 및 그 컴포넌트 템플릿에 지정된 설정보다 우선합니다.
- 인덱스 템플릿 자체에 지정된 설정은 해당 컴포넌트 템플릿의 설정보다 우선합니다.
- 인덱스 템플릿의
composed_of필드에 여러 컴포넌트 템플릿을 지정하면 지정한 순서대로 병합되며, 따라서 뒤에 오는 컴포넌트 템플릿이 앞의 컴포넌트 템플릿을 덮어씁니다. - 새 데이터 스트림이나 인덱스가 둘 이상의 인덱스 템플릿에 일치하면 우선순위가 가장 높은 인덱스 템플릿이 사용됩니다.
- 인덱스 템플릿을 만들 때는 Elasticsearch 기본 제공 인덱스 템플릿과 이름 패턴이 충돌하지 않도록 주의하세요.
인덱스 템플릿은 인덱스가 생성될 때 인덱스를 구성하는 데 사용됩니다. 인덱스 템플릿에 지정된 매핑, 설정, 별칭은 생성되는 각 인덱스에 상속됩니다. 이들은 인덱스 템플릿을 구성하는 컴포넌트 템플릿에서 지정할 수도 있습니다.
인덱스 템플릿은 Kibana에서 또는 Elasticsearch API를 사용해 생성하고 관리할 수 있습니다.
Elasticsearch 보안 기능을 사용하는 경우 다음 보안 권한이 필요합니다.
- 인덱스 템플릿을 관리하려면
manage_index_templates클러스터 권한이 필요합니다.
이 권한을 추가하려면 Stack Management > Security > Roles로 이동하거나 Create or update roles API를 사용하세요.
인덱스 템플릿을 생성하려면 다음 단계를 수행하세요.
내비게이션 메뉴 또는 전역 검색 필드를 사용해 Index Management 페이지로 이동합니다.
Index Templates 탭에서 Create template을 선택합니다.

Logistics 페이지에서:
템플릿 이름을 지정합니다.
라이프사이클 정책으로 관리할 인덱스와 일치하는 패턴을 지정합니다. 예를 들어
my-index-*와 같이 지정합니다. Elasticsearch 기본 제공 인덱스 템플릿과 이름 패턴이 충돌하지 않도록 주의하세요.지속적으로 생성되는 추가 전용(append-only) 데이터를 저장한다면, 더 효율적인 저장을 위해 인덱스 대신 데이터 스트림을 생성하도록 선택할 수 있습니다.
Note데이터 스트림 옵션을 활성화하면 Data retention을 설정하는 옵션도 함께 나타납니다. 데이터 보존은 인덱스 라이프사이클 관리의 대안인 데이터 스트림 라이프사이클을 사용하는 경우에만 적용됩니다. 자세한 내용은 데이터 스트림 라이프사이클을 참고하세요.
다음을 포함해 원하는 다른 옵션을 구성합니다.
- 생성되는 인덱스에 사용할 인덱스 모드.
- 템플릿 우선순위, 버전, 메타데이터.
action.auto_create_index클러스터 설정을 덮어쓸지 여부.
이 옵션들에 대한 자세한 내용은 create or update index template API 문서를 참고하세요.
Component templates 페이지에서는 검색 및 필터 도구를 사용해 인덱스 템플릿에 포함할 컴포넌트 템플릿을 선택할 수 있습니다. 인덱스 템플릿은 컴포넌트 템플릿에 정의된 설정(S), 매핑(M), 별칭(A)을 상속받아 인덱스가 생성될 때 적용합니다.
Index settings 페이지에서는 인덱스 설정을 인덱스 템플릿에 직접 정의할 수 있습니다. 컴포넌트 템플릿과 함께 사용하는 경우, 이 페이지에 정의된 매핑이 연결된 컴포넌트 템플릿의 충돌하는 정의를 덮어씁니다.
선택 사항: Mappings 페이지에서 문서가 Elasticsearch에 색인될 때 사용되는 필드와 데이터 타입을 사용자 지정합니다. 컴포넌트 템플릿과 함께 사용하는 경우, 이 매핑이 연결된 컴포넌트 템플릿의 충돌하는 정의를 덮어씁니다. 자세한 내용은 매핑을 참고하세요.
선택 사항: Aliases 페이지에서 생성되는 각 인덱스에 대한 별칭을 지정합니다. 예를 들어
my-index라는 별칭을 정의할 수 있습니다.{ "my-index": {} }단, ILM을 구성할 때는 이 설정이 필요하지 않습니다. ILM은 대신
index.lifecycle.rollover_alias설정을 사용해 롤링 인덱스에 접근합니다.Review 페이지에서 선택 사항을 확인한 뒤 Create template을 선택합니다. 선택한 옵션은 물론, 생성될 인덱스 템플릿의 형식과 연관된 API 요청도 확인할 수 있습니다.
새로 생성된 인덱스 템플릿은 지정한 패턴과 일치하는 이름의 모든 신규 인덱스에 사용되며, 이 인덱스들에는 지정한 ILM 정책이 적용됩니다.
새로 만든 템플릿을 테스트하려면 예를 들어 my-index-000001과 my-index-000002라는 두 개의 새 인덱스를 생성할 수 있습니다.
다음 문서를 색인해 새 인덱스를 생성합니다.
POST /my-index-000001/_doc{ "@timestamp": "2019-05-18T15:57:27.541Z", "ip": "225.44.217.191", "extension": "jpg", "response": "200", "geo": { "coordinates": { "lat": 38.53146222, "lon": -121.7864906 } }, "url": "https://media-for-the-masses.theacademyofperformingartsandscience.org/uploads/charles-fullerton.jpg" }POST /my-index-000002/_doc{ "@timestamp": "2019-05-20T03:44:20.844Z", "ip": "198.247.165.49", "extension": "php", "response": "200", "geo": { "coordinates": { "lat": 37.13189556, "lon": -76.4929875 } }, "memory": 241720, "url": "https://theacademyofperformingartsandscience.org/people/type:astronauts/name:laurel-b-clark/profile" }get index API를 사용해 새 인덱스의 구성을 확인합니다. 이 인덱스들은 앞서 만든 인덱스 템플릿을 사용해 구성되었습니다.
GET /my-index-000001,my-index-000002
클러스터에 인덱스 템플릿을 추가하려면 create or update index template API를 사용하세요.
다음 요청은 컴포넌트 템플릿 예제에 나온 두 개의 컴포넌트 템플릿으로 구성된 인덱스 템플릿을 생성합니다.
PUT _index_template/template_1
{
"index_patterns": ["te*", "bar*"],
"template": {
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": true
},
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss Z yyyy"
}
}
},
"aliases": {
"mydata": { }
}
},
"priority": 501,
"composed_of": ["component_template1", "runtime_component_template"],
"version": 3,
"_meta": {
"description": "my custom"
}
}
- Elasticsearch 기본 제공 인덱스 템플릿과 충돌하지 않는 패턴을 선택하세요.
인덱스 템플릿을 구성할 때 다음 기능이 유용할 수 있습니다.
- 인덱스 템플릿을 실제로 사용하기 전에 그 효과를 테스트할 수 있습니다. 자세한 내용은 다중 컴포넌트 템플릿 시뮬레이션을 참고하세요.
- 아직 존재하지 않는 컴포넌트 템플릿에 대해 인덱스 템플릿을 만들 수 있습니다. 이때 인덱스 템플릿에서
ignore_missing_component_templates구성 옵션을 사용하면 없는 컴포넌트 템플릿을 무시할 수 있습니다. 자세한 내용은 누락된 컴포넌트 템플릿 무시하기를 참고하세요.
Elasticsearch에는 다음 인덱스 패턴에 대해 각각 우선순위가 100인 기본 제공 인덱스 템플릿이 있습니다.
.kibana-reporting*logs-*-*metrics-*-*synthetics-*-*profiling-*security_solution-*-*$.logs$.logs.*logs.otellogs.otel.*logs.ecslogs.ecs.*
Elastic Agent는 이 템플릿들을 사용해 데이터 스트림을 생성합니다. Fleet 통합에서 만든 인덱스 템플릿은 비슷하게 겹치는 인덱스 패턴을 사용하며 우선순위가 최대 200입니다.
Fleet 또는 Elastic Agent를 사용한다면, 이 템플릿들을 덮어쓰지 않도록 인덱스 템플릿에 100보다 낮은 우선순위를 지정하세요. 그렇지 않은 경우, 템플릿이 실수로 적용되는 것을 방지하려면 다음 중 하나 이상을 수행하세요.
- 모든 기본 제공 인덱스 및 컴포넌트 템플릿을 비활성화하려면 cluster update settings API를 사용해
stack.templates.enabled를false로 설정합니다. 다만 이 방법은 권장되지 않으므로 자세한 내용은 설정 문서를 참고하세요. - 겹치지 않는 인덱스 패턴을 사용합니다.
- 패턴이 겹치는 템플릿에는
500보다 높은priority를 지정합니다. 예를 들어 Fleet이나 Elastic Agent를 사용하지 않으면서logs-*인덱스 패턴에 대한 템플릿을 만들고 싶다면 템플릿에 우선순위501을 지정하세요. 이렇게 하면logs-*-*에 대한 기본 제공 템플릿 대신 사용자의 템플릿이 적용됩니다. - 기본 제공 및 Fleet 관리 인덱스 템플릿과 이름이 충돌하지 않도록, 직접 만드는 인덱스 템플릿 이름에
@를 사용하지 마세요. - Elastic Stack 9.1 버전부터 Fleet은 특정 기능을 위해
fleet-synced-integrations*라는 이름의 인덱스를 사용합니다. 기본 제공 인덱스와의 충돌을 피하려면 이 이름을 사용하지 마세요.
컴포넌트 템플릿은 매핑, 설정, 별칭을 정의하는 재사용 가능한 구성 요소입니다. 컴포넌트 템플릿은 인덱스에 직접 적용되지 않고, 인덱스 템플릿에서 참조되어 인덱스의 최종 구성을 결정할 때 사용됩니다.
컴포넌트 템플릿은 Kibana에서 또는 Elasticsearch API를 사용해 생성하고 관리할 수 있습니다.
Kibana의 Index management 페이지에서 컴포넌트 템플릿을 생성, 편집, 복제, 삭제할 수 있습니다. Component Templates 탭으로 이동하세요.
- 세부 정보를 보고 작업을 수행하려면 템플릿 이름을 클릭하세요.
- 새 컴포넌트 템플릿을 만들려면 Create component template 마법사를 사용하세요.
component template API를 사용해 컴포넌트 템플릿을 생성하고 관리할 수 있습니다. 다음 요청은 앞선 인덱스 템플릿 예제에서 사용된 두 개의 컴포넌트 템플릿을 생성합니다.
PUT _component_template/component_template1
{
"template": {
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
}
}
}
}
}
PUT _component_template/runtime_component_template
{
"template": {
"mappings": {
"runtime": {
"day_of_week": {
"type": "keyword",
"script": {
"source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))"
}
}
}
}
}
}
- 이 컴포넌트 템플릿은 새 인덱스가 템플릿에 일치할 때 매핑에
day_of_week라는 런타임 필드를 추가합니다.