별칭

별칭은 하나 이상의 인덱스 또는 데이터 스트림을 가리킵니다. 대부분의 Elasticsearch API는 데이터 스트림이나 인덱스 이름 대신 별칭을 사용할 수 있습니다.

별칭을 사용하면 다음과 같은 작업을 할 수 있습니다.

  • 여러 인덱스/데이터 스트림을 단일 이름으로 함께 쿼리
  • 애플리케이션이 사용하는 인덱스/데이터 스트림을 실시간으로 변경
  • 다운타임 없이 데이터 리인덱싱

별칭에는 두 가지 유형이 있습니다.

  • 데이터 스트림 별칭은 하나 이상의 데이터 스트림을 가리킵니다.
  • 인덱스 별칭은 하나 이상의 인덱스를 가리킵니다.

하나의 별칭이 데이터 스트림과 인덱스를 동시에 가리킬 수는 없습니다. 또한 데이터 스트림의 백업 인덱스를 인덱스 별칭에 추가할 수도 없습니다.

기존 데이터 스트림이나 인덱스를 별칭에 추가하려면 aliases APIadd 액션을 사용합니다. 별칭이 존재하지 않으면 요청이 별칭을 생성합니다.

				POST _aliases
					{
  "actions": [
    {
      "add": {
        "index": "logs-nginx.access-prod",
        "alias": "logs"
      }
    }
  ]
}
		

API의 indexindices 파라미터는 와일드카드(*)를 지원합니다. 데이터 스트림과 인덱스 모두에 일치하는 와일드카드 패턴은 오류를 반환합니다.

				POST _aliases
					{
  "actions": [
    {
      "add": {
        "index": "logs-*",
        "alias": "logs"
      }
    }
  ]
}
		

별칭을 제거하려면 aliases API의 remove 액션을 사용합니다.

				POST _aliases
					{
  "actions": [
    {
      "remove": {
        "index": "logs-nginx.access-prod",
        "alias": "logs"
      }
    }
  ]
}
		

aliases API를 사용하면 여러 액션을 하나의 원자적 작업으로 수행할 수 있습니다.

예를 들어 logs 별칭이 단일 데이터 스트림을 가리키고 있다고 가정합니다. 다음 요청은 별칭이 가리키는 스트림을 교체합니다. 이 교체 과정에서 logs 별칭은 다운타임이 없으며, 두 스트림을 동시에 가리키는 일도 없습니다.

				POST _aliases
					{
  "actions": [
    {
      "remove": {
        "index": "logs-nginx.access-prod",
        "alias": "logs"
      }
    },
    {
      "add": {
        "index": "logs-my_app-default",
        "alias": "logs"
      }
    }
  ]
}
		

여러 액션을 사용할 때 일부는 성공하고 일부는 실패하면 액션별 결과 목록이 반환됩니다.

앞의 예제와 비슷한 액션 목록이지만, 아직 존재하지 않는 별칭 log-non-existing을 사용하는 경우를 생각해 봅시다. 이 경우 remove 액션은 실패하고 add 액션은 성공합니다. 응답에는 요청된 모든 액션에 대한 결과를 담은 action_results 목록이 포함됩니다.

				POST _aliases
					{
  "actions": [
    {
      "remove": {
        "index": "index1",
        "alias": "logs-non-existing"
      }
    },
    {
      "add": {
        "index": "index2",
        "alias": "logs-non-existing"
      }
    }
  ]
}
		

API는 다음과 같은 결과를 반환합니다.

{
  "acknowledged": true,
  "errors": true,
  "action_results": [
    {
      "action": {
        "type": "remove",
        "indices": [ "index1" ],
        "aliases": [ "logs-non-existing" ],
      },
      "status": 404,
      "error": {
        "type": "aliases_not_found_exception",
        "reason": "aliases [logs-non-existing] missing",
        "resource.type": "aliases",
        "resource.id": "logs-non-existing"
      }
    },
    {
      "action": {
        "type": "add",
        "indices": [ "index2" ],
        "aliases": [ "logs-non-existing" ],
      },
      "status": 200
    }
  ]
}
		

액션 목록이 부분적으로만 성공하도록 허용하면 원하는 결과를 얻지 못할 수 있습니다. must_existtrue로 설정하는 편이 더 적절할 수 있으며, 이렇게 하면 액션 하나가 실패할 때 전체 액션 목록이 실패합니다.

컴포넌트 템플릿이나 인덱스 템플릿을 사용해 인덱스나 데이터 스트림이 생성될 때 별칭을 추가할 수도 있습니다.

				
					# Component template with index aliases
				PUT _component_template/my-aliases
					{
  "template": {
    "aliases": {
      "my-alias": {}
    }
  }
}
# Index template with index aliases
				PUT _index_template/my-index-template
					{
  "index_patterns": [
    "my-index-*"
  ],
  "composed_of": [
    "my-aliases",
    "my-mappings",
    "my-settings"
  ],
  "template": {
    "aliases": {
      "yet-another-alias": {}
    }
  }
}
		

create index API 요청에서 인덱스 별칭을 지정할 수도 있습니다.

				
					# PUT <my-index-{now/d}-000001>
				PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
					{
  "aliases": {
    "my-alias": {}
  }
}
		

클러스터의 별칭 목록을 가져오려면 인자 없이 get alias API를 사용합니다.

				GET _alias
		

특정 데이터 스트림이나 인덱스의 별칭을 보려면 _alias 앞에 해당 이름을 지정합니다.

				GET my-data-stream/_alias
		

별칭이 가리키는 데이터 스트림이나 인덱스를 보려면 _alias 뒤에 별칭을 지정합니다.

				GET _alias/logs
		

is_write_index를 사용해 별칭의 쓰기 인덱스 또는 쓰기 데이터 스트림을 지정할 수 있습니다. Elasticsearch는 해당 별칭에 대한 모든 쓰기 요청을 이 인덱스나 데이터 스트림으로 라우팅합니다.

				POST _aliases
					{
  "actions": [
    {
      "add": {
        "index": "logs-nginx.access-prod",
        "alias": "logs"
      }
    },
    {
      "add": {
        "index": "logs-my_app-default",
        "alias": "logs",
        "is_write_index": true
      }
    }
  ]
}
		

별칭이 여러 인덱스나 데이터 스트림을 가리키면서 is_write_index가 설정되어 있지 않으면 별칭은 쓰기 요청을 거부합니다. 인덱스 별칭이 인덱스 하나를 가리키고 is_write_index가 설정되어 있지 않으면 해당 인덱스가 자동으로 쓰기 인덱스 역할을 합니다. 데이터 스트림 별칭은 데이터 스트림 하나만 가리키더라도 쓰기 데이터 스트림을 자동으로 설정하지 않습니다.

Tip

추가 전용(append-only) 시계열 데이터를 저장할 때는 데이터 스트림 사용을 권장합니다. 기존 시계열 데이터를 업데이트하거나 삭제해야 한다면 데이터 스트림의 백업 인덱스에서 직접 업데이트 또는 삭제 작업을 수행할 수 있습니다. 동일한 _id로 여러 문서를 자주 전송하면서 마지막 쓰기가 이기는(last-write-wins) 동작을 기대한다면, 대신 쓰기 인덱스를 지정한 인덱스 별칭을 사용하는 것이 좋습니다. 데이터 스트림 없이 시계열 데이터 관리하기 튜토리얼을 참고하세요.

filter 옵션은 Query DSL을 사용해 별칭이 접근할 수 있는 문서를 제한합니다.

				POST _aliases
					{
  "actions": [
    {
      "add": {
        "index": "my-index-2099.05.06-000001",
        "alias": "my-alias",
        "filter": {
          "bool": {
            "filter": [
              {
                "range": {
                  "@timestamp": {
                    "gte": "now-1d/d",
                    "lt": "now/d"
                  }
                }
              },
              {
                "term": {
                  "user.id": "kimchy"
                }
              }
            ]
          }
        }
      }
    }
  ]
}
		
Note

필터는 Query DSL을 사용할 때만 적용되며, ID로 문서를 조회할 때는 적용되지 않습니다.

routing 옵션을 사용하면 별칭에 대한 요청을 특정 샤드로 라우팅할 수 있습니다. 이를 통해 샤드 캐시를 활용해 검색 속도를 높일 수 있습니다. 데이터 스트림 별칭은 라우팅 옵션을 지원하지 않습니다.

				POST _aliases
					{
  "actions": [
    {
      "add": {
        "index": "my-index-2099.05.06-000001",
        "alias": "my-alias",
        "routing": "1"
      }
    }
  ]
}
		

인덱싱과 검색에 서로 다른 라우팅 값을 지정하려면 index_routingsearch_routing을 사용합니다. 이 옵션들을 지정하면 각각의 작업에 대해 routing 값을 덮어씁니다.

				POST _aliases
					{
  "actions": [
    {
      "add": {
        "index": "my-index-2099.05.06-000001",
        "alias": "my-alias",
        "search_routing": "1",
        "index_routing": "2"
      }
    }
  ]
}
		

인덱스를 제거하려면 aliases API의 remove_index 액션을 사용합니다.

				POST _aliases
					{
  "actions": [
    {
      "remove_index": {
        "index": "my-index-2099.05.06-000001"
      }
    }
  ]
}