Index templates
출처: 문서
본문
인덱스 템플릿
인덱스 템플릿은 이름이 템플릿의 인덱스 패턴 중 하나와 일치하는 모든 새 인덱스에 매핑, 설정, 별칭을 적용해요. 템플릿은 인덱스가 생성되는 시점에만 적용돼요. 즉, 템플릿을 변경해도 이미 존재하는 인덱스에는 아무런 영향이 없어요.
로그 별칭이 가리키는 일별 인덱스나 데이터 스트림의 백킹 인덱스처럼 새 인덱스가 저절로 생겨나고 일관되게 구성해야 할 때 템플릿을 사용하세요. 다른 방법인 Create Index 요청마다 설정과 매핑을 지정하는 방식은 OpenSearch가 대신 생성해 주는 인덱스에는 적용되지 않아요.
인덱스 템플릿 생성하기
다음 요청은 daily_logs라는 이름의 템플릿을 만들고, logs-2020-01-*에 일치하는 모든 새 인덱스에 적용하며, 그 인덱스들을 my_logs 별칭에 추가해요:
PUT _index_template/daily_logs
{
"index_patterns": [
"logs-2020-01-*"
],
"template": {
"aliases": {
"my_logs": {}
},
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"timestamp": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"value": {
"type": "double"
}
}
}
}
}
{% include copy-curl.html %}
이제 logs-2020-01-01을 생성하면 템플릿의 별칭, 설정, 매핑을 갖춘 인덱스가 만들어지고, 패턴에 일치하는 다른 모든 인덱스도 마찬가지예요:
PUT logs-2020-01-01
{% include copy-curl.html %}
만들어진 구성을 보려면 다음 요청을 보내세요:
GET logs-2020-01-01
{% include copy-curl.html %}
인덱스 패턴에는 다음 문자를 포함할 수 없어요: :, ", +, /, \, |, ?, #, >, <.
Create Index 요청에서 지정한 설정과 매핑은 일치하는 템플릿의 것을 덮어써요. {: .note}
템플릿 간 충돌 해결하기
인덱스 이름이 둘 이상의 템플릿과 일치하면 OpenSearch는 priority가 가장 높은 템플릿을 적용하고 나머지는 무시해요. 템플릿끼리 병합되지는 않아요. priority가 없는 템플릿에는 가장 낮은 우선순위인 0이 할당돼요.
패턴이 겹치는 템플릿에는 서로 다른 우선순위를 부여하세요. 같은 우선순위에서 기존 템플릿과 패턴이 겹치는 템플릿은 400으로 거부돼요. OpenSearch가 어느 쪽을 적용해야 할지 판단할 수 없기 때문이에요.
{: .note}
예를 들어 logs-2020-01-02라는 이름의 인덱스는 다음 두 템플릿 모두와 일치하는데, 두 템플릿은 number_of_shards 값이 서로 달라요:
PUT _index_template/template-01
{
"index_patterns": ["logs*"],
"priority": 5,
"template": {
"settings": {
"number_of_shards": 2,
"number_of_replicas": 2
}
}
}
{% include copy-curl.html %}
PUT _index_template/template-02
{
"index_patterns": ["logs-2020-01-*"],
"priority": 10,
"template": {
"settings": {
"number_of_shards": 3
}
}
}
{% include copy-curl.html %}
template-02의 우선순위가 더 높기 때문에 이 인덱스는 프라이머리 샤드 3개와 기본값인 레플리카 1개를 갖게 돼요. template-01로부터 number_of_replicas를 상속받지는 않아요.
인덱스를 생성하기 전에 어떤 이름에 어떤 템플릿이 적용되는지 확인하려면 Simulate Index Template을 사용하세요.
컴포넌트 템플릿으로 구성 재사용하기
컴포넌트 템플릿은 여러 인덱스 템플릿이 공유하는 별칭, 설정, 매핑을 담고 있어요. 모든 템플릿에 같은 매핑 블록을 반복해서 넣는 대신(이렇게 하면 클러스터 상태가 불어나고, 변경할 때마다 모든 복사본을 수정해야 해요) 컴포넌트 템플릿으로 한 번 정의해서 참조하세요.
다음 요청들은 두 개의 컴포넌트 템플릿을 정의해요:
PUT _component_template/component_template_1
{
"template": {
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
}
}
}
}
}
{% include copy-curl.html %}
PUT _component_template/component_template_2
{
"template": {
"mappings": {
"properties": {
"ip_address": {
"type": "ip"
}
}
}
}
}
{% include copy-curl.html %}
컴포넌트 템플릿들을 composed_of에 나열해서 인덱스 템플릿을 만드세요. OpenSearch는 나열한 순서대로 컴포넌트 템플릿을 적용하고, 템플릿 자체의 template 블록에 있는 내용은 가장 마지막에 적용해요. 그래서 인덱스 템플릿의 값이 우선해요:
PUT _index_template/daily_logs
{
"index_patterns": ["logs-2020-01-*"],
"priority": 200,
"composed_of": [
"component_template_1",
"component_template_2"
],
"template": {
"aliases": {
"my_logs": {}
},
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"timestamp": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"value": {
"type": "double"
}
}
}
},
"version": 3,
"_meta": {
"description": "using component templates"
}
}
{% include copy-curl.html %}
이 템플릿으로 생성한 인덱스에는 컴포넌트 템플릿에서 온 @timestamp와 ip_address 필드와 함께, 인덱스 템플릿에서 온 timestamp와 value 필드가 들어가요.
컴포넌트 템플릿은 인덱스 템플릿이 composed_of에 나열해 둔 경우에만 효과가 있어요. 컴포넌트 템플릿을 새로 만든다고 해서 이미 존재하는 인덱스 템플릿에 자동으로 연결되지는 않아요. composed_of 목록에 직접 추가해야 해요. 컴포넌트 템플릿을 업데이트하면 이미 참조하고 있는 모든 인덱스 템플릿에 반영되긴 하지만, 업데이트 이후에 생성된 인덱스에만 적용돼요. 이미 존재하는 인덱스는 생성될 때의 구성을 그대로 유지해요.
템플릿 조회와 삭제
다음 표는 자주 쓰이는 템플릿 요청을 정리한 거예요.
| 작업 | 요청 |
|---|---|
| 모든 템플릿 목록 조회 | GET _cat/templates 또는 GET _index_template |
| 개별 템플릿 조회 | GET _index_template/daily_logs |
| 패턴에 일치하는 템플릿 조회 | GET _index_template/daily* |
| 템플릿 존재 여부 확인 | HEAD _index_template/daily_logs |
| 템플릿 삭제 | DELETE _index_template/daily_logs |
모든 템플릿 작업과 파라미터에 대해서는 Index template APIs를 참고하세요.
OpenSearch Dashboards의 인덱스 템플릿
Index Management 페이지로 이동하려면 상단 메뉴에서 Management > Index Management로 가세요. Templates를 선택하면 클러스터의 인덱스 템플릿 목록이 나타나고, 그러면 내비게이션에 Component templates도 나타나요.
다음 이미지는 Templates 페이지예요.

인덱스 템플릿 생성하기
-
Index Management에서 Templates를 선택한 다음 Create template을 선택하세요.
-
Template settings에서 다음을 수행하세요:
- Template name에 이름을 입력하세요.
- Template type을 선택하세요. 템플릿이 data stream을 받쳐주는 용도라면 Data streams를 선택하고, Time field에 타임스탬프 필드 이름을 입력하세요. 데이터 스트림 템플릿에는 타임스탬프 필드가 필요해요.
- Index patterns에 템플릿이 일치시킬 패턴을 쉼표로 구분해서 입력하세요.
- Priority에 템플릿 우선순위를 입력하세요. 기본값은 가장 낮은 우선순위인
0이에요. 인덱스 이름이 둘 이상의 템플릿과 일치할 때 OpenSearch가 이 우선순위를 사용해요. - 여기서 바로 구성을 정의하려면 Simple template을, 기존 컴포넌트 템플릿으로 템플릿을 구성하려면 Component template을 선택하세요. 자세한 내용은 컴포넌트 템플릿으로 템플릿 만들기를 참고하세요.
-
Template definition에서 다음을 수행하세요:
- Index alias에서 각 새 인덱스를 추가할 별칭을 선택하거나 입력하세요.
- Index settings에 프라이머리 샤드 수, 레플리카 수, 리프레시 간격을 입력하세요. 기본 리프레시 간격은
1s예요. 다른 설정을 JSON으로 지정하려면 Advanced settings를 펼치세요. - Index mapping에서 문서의 필드를 정의하세요. 필드를 하나씩 추가하려면 Visual editor를, 기존 매핑을 붙여넣으려면 JSON editor를 선택하세요.
-
Create template을 선택하세요.
비주얼 에디터에서 필드를 정의하려면 Add new field를 선택하고, Field name에 이름을 입력한 다음 Field type에서 타입을 선택하세요. 오브젝트를 정의하려면 Add new object를 선택하고 이름을 지은 다음 object 타입을 선택하고, Actions에서 {::nomarkdown}
{:/} (plus) 아이콘을 선택해서 그 안에 필드를 추가하세요.
인덱스 템플릿 편집하기
- Index Management에서 Templates를 선택하세요.
- Template name 열에서 템플릿을 선택하세요.
- Configuration 탭에서 템플릿 설정과 정의를 변경하세요.
- 저장하기 전에 결과를 확인하려면 Preview template을 선택하고 구성을 살펴본 다음 Close를 선택하세요.
- Save를 선택하세요.
템플릿을 편집해도 그 템플릿으로 생성된 인덱스는 변경되지 않아요.
인덱스 템플릿 삭제하기
- Index Management에서 Templates를 선택하세요.
- 템플릿이 있는 행에서 {::nomarkdown}
{:/} (trashcan) 아이콘을 선택하세요. - 확인 대화상자에
delete를 입력한 다음 Delete를 선택하세요.
템플릿으로 인덱스 생성하기
인덱스 이름이 템플릿의 인덱스 패턴 중 하나와 일치하면 그 인덱스는 템플릿을 상속받아요:
- Index Management에서 Indexes를 선택한 다음 Create Index를 선택하세요.
- Index name에 템플릿의 인덱스 패턴 중 하나와 일치하는 이름을 입력하세요. 예를 들어 패턴이
flight-data-*인 템플릿은flight-data-1이라는 이름의 인덱스에 적용돼요. - 필요하면 별칭, 설정, 매핑 값을 바꿔서 템플릿의 값을 덮어쓸 수 있어요. 포커스가 Index name 상자를 벗어나는 즉시 템플릿 값이 폼에 채워지고, 여러분이 바꾼 값은 그대로 유지돼요.
- Create를 선택하세요.
컴포넌트 템플릿 생성하기
- Index Management에서 Templates > Component templates를 선택한 다음 Create component template을 선택하세요.
- Name에 이름을 입력하고, 필요하면 이 컴포넌트 템플릿이 무엇을 구성하는지, 언제 사용하는지에 대한 설명도 입력하세요.
- 컴포넌트 템플릿이 정의하게 할 Index alias, Index settings, Index mapping 패널 각각에서 Use configuration을 선택한 다음 값을 입력하세요. 세 패널 모두 선택 사항이라서, 컴포넌트 템플릿은 구성 하나만 정의할 수도 있고 인덱스 전체를 정의할 수도 있어요.
- Create component template을 선택하세요.
컴포넌트 템플릿으로 템플릿 만들기
인덱스 템플릿 생성하기의 단계를 따르고, Template settings에서 방식으로 Component templates를 선택하세요. 그다음 다음을 수행하세요:
- Component template 패널에서 Associate component template을 선택하세요.
- 포함할 컴포넌트 템플릿을 선택한 다음