데이터 스트림 설정
원본 보기데이터 스트림 설정
Elastic Stack과 Elastic Cloud Serverless에서 데이터 스트림을 설정하는 과정은 각각의 API를 사용한다는 점에서 유사합니다.
Fleet, Elastic Agent 또는 Logstash를 사용한다면 이 튜토리얼을 건너뛰세요. 이들 모두 데이터 스트림을 대신 설정해 줍니다.
Fleet과 Elastic Agent에 대해서는 Fleet용 Elastic Agent 데이터 스트림을 참조하세요. Logstash에 대해서는 elasticsearch output 플러그인의 데이터 스트림 설정을 참조하세요.
데이터 스트림을 설정하려면 다음 단계를 따르세요:
인덱스 별칭을 데이터 스트림으로 변환할 수도 있습니다.
수명 주기 관리는 선택 사항이지만 권장됩니다. 옵션을 비교하려면 데이터 수명 주기를 참조하세요.
이 튜토리얼에서는 인덱스 수명 주기 관리(ILM)를 사용해 데이터 스트림의 백킹 인덱스 관리를 자동화합니다. ILM에는 인덱스 수명 주기 정책이 필요합니다.
ILM을 사용하면 성능 요구 사항과 보존 요건에 따라 인덱스를 데이터 티어 간에 자동으로 전환할 수 있습니다. 이를 통해 하드웨어 비용과 성능의 균형을 맞출 수 있습니다. Serverless에서는 성능 최적화가 자동으로 이루어지므로 ILM을 사용할 수 없습니다. 대신 데이터 관리 옵션으로 데이터 스트림 수명 주기를 사용할 수 있습니다.
Kibana에서 인덱스 수명 주기 정책을 생성하려면:
- 탐색 메뉴 또는 전역 검색 필드를 사용해 Index Lifecycle Policies 관리 페이지로 이동합니다.
- Create policy를 클릭합니다.
create lifecycle policy API를 사용할 수도 있습니다.
PUT _ilm/policy/my-lifecycle-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "50gb"
}
}
},
"warm": {
"min_age": "30d",
"actions": {
"shrink": {
"number_of_shards": 1
},
"forcemerge": {
"max_num_segments": 1
}
}
},
"cold": {
"min_age": "60d",
"actions": {
"searchable_snapshot": {
"snapshot_repository": "found-snapshots"
}
}
},
"frozen": {
"min_age": "90d",
"actions": {
"searchable_snapshot": {
"snapshot_repository": "found-snapshots"
}
}
},
"delete": {
"min_age": "735d",
"actions": {
"delete": {}
}
}
}
}
}
데이터 스트림에는 일치하는 인덱스 템플릿이 필요합니다. 대부분의 경우 하나 이상의 컴포넌트 템플릿을 조합해 이 인덱스 템플릿을 구성합니다. 일반적으로 매핑과 인덱스 설정에 각각 별도의 컴포넌트 템플릿을 사용합니다. 이렇게 하면 여러 인덱스 템플릿에서 컴포넌트 템플릿을 재사용할 수 있습니다.
컴포넌트 템플릿을 생성할 때 다음을 포함하세요:
@timestamp필드에 대한date또는date_nanos매핑. 매핑을 지정하지 않으면 Elasticsearch는@timestamp를 기본 옵션의date필드로 매핑합니다.index.lifecycle.name인덱스 설정에 지정한 수명 주기 정책.
필드를 매핑할 때 Elastic Common Schema(ECS)를 사용하세요. ECS 필드는 여러 Elastic Stack 기능과 기본적으로 통합됩니다.
필드를 어떻게 매핑할지 모르겠다면 런타임 필드를 사용해 검색 시점에 비정형 콘텐츠에서 필드를 추출하세요. 예를 들어 로그 메시지를 wildcard 필드에 색인한 뒤, 검색 중에 이 필드에서 IP 주소와 기타 데이터를 추출할 수 있습니다.
Kibana에서 컴포넌트 템플릿을 생성하려면:
- 탐색 메뉴 또는 전역 검색 필드를 사용해 Index Management 페이지로 이동합니다.
- Index Templates 탭에서 Create component template을 클릭합니다.
API를 사용해 컴포넌트 템플릿을 생성하세요:
- Elastic Stack 배포에서는 create component template API를 사용합니다.
- Elastic Cloud Serverless에서는 create component template API를 사용합니다.
매핑용 컴포넌트 템플릿을 생성하려면 다음 요청을 사용하세요:
PUT _component_template/my-mappings
{
"template": {
"mappings": {
"properties": {
"@timestamp": {
"type": "date",
"format": "date_optional_time||epoch_millis"
},
"message": {
"type": "wildcard"
}
}
}
},
"_meta": {
"description": "Mappings for @timestamp and message fields",
"my-custom-meta-field": "More arbitrary metadata"
}
}
인덱스 설정용 컴포넌트 템플릿을 생성하려면 다음 요청을 사용하세요:
PUT _component_template/my-settings
{
"template": {
"settings": {
"index.lifecycle.name": "my-lifecycle-policy"
}
},
"_meta": {
"description": "Settings for ILM",
"my-custom-meta-field": "More arbitrary metadata"
}
}
컴포넌트 템플릿을 사용해 인덱스 템플릿을 생성하세요. 다음을 지정합니다:
- 데이터 스트림 이름과 일치하는 하나 이상의 인덱스 패턴. 데이터 스트림 명명 규칙 사용을 권장합니다.
- 해당 템플릿이 데이터 스트림을 활성화한다는 설정.
- 매핑과 인덱스 설정이 담긴 컴포넌트 템플릿.
- 내장 템플릿과의 충돌을 피하기 위해
200보다 높은 우선순위. 인덱스 패턴 충돌 방지를 참조하세요.
Kibana에서 인덱스 템플릿을 생성하려면:
- 탐색 메뉴 또는 전역 검색 필드를 사용해 Index Management 페이지로 이동합니다.
- Index Templates 탭에서 Create template을 클릭합니다.
API를 사용해 인덱스 템플릿을 생성하세요:
- Elastic Stack 배포에서는 create an index template API를 사용합니다.
- Elastic Cloud Serverless에서는 create an index template API를 사용합니다.
데이터 스트림을 활성화하려면 data_stream 객체를 포함하세요:
PUT _index_template/my-index-template
{
"index_patterns": ["my-data-stream*"],
"data_stream": { },
"composed_of": [ "my-mappings", "my-settings" ],
"priority": 500,
"_meta": {
"description": "Template for my time series data",
"my-custom-meta-field": "More arbitrary metadata"
}
}
Kibana의 Streams UI에서 클래식 스트림을 직접 생성할 수도 있습니다. 아래에 설명한 여러 단계의 API 기반 방식보다 간단한 대안입니다.
색인 요청은 데이터 스트림에 문서를 추가합니다. 이러한 요청은 op_type을 create로 지정해야 합니다. 문서에는 @timestamp 필드가 포함되어야 합니다.
데이터 스트림을 자동으로 생성하려면 스트림 이름을 대상으로 하는 색인 요청을 보내세요. 이 이름은 인덱스 템플릿의 인덱스 패턴 중 하나와 일치해야 합니다.
PUT my-data-stream/_bulk
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:21:15.000Z", "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736" }
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:25:42.000Z", "message": "192.0.2.255 - - [06/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" }
POST my-data-stream/_doc
{
"@timestamp": "2099-05-06T16:21:15.000Z",
"message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}
API를 사용해 데이터 스트림을 수동으로 생성할 수도 있습니다:
- Elastic Stack 배포에서는 create a data stream API를 사용합니다.
- Elastic Cloud Serverless에서는 create a data stream API를 사용합니다.
PUT _data_stream/my-data-stream
생성한 뒤에는 Index Management 화면에서 이 데이터 스트림과 다른 데이터 스트림을 확인하고 관리할 수 있습니다. 자세한 내용은 데이터 스트림 관리를 참조하세요.
인덱스 권한을 사용해 데이터 스트림에 대한 접근을 제어하세요. 데이터 스트림에 권한을 부여하면 해당 백킹 인덱스에도 동일한 권한이 부여됩니다.
예시는 데이터 스트림 권한을 참조하세요.
Elasticsearch 7.9 이전에는 일반적으로 쓰기 인덱스가 있는 인덱스 별칭을 사용해 시계열 데이터를 관리했습니다. 데이터 스트림은 이 기능을 대체하며, 유지 관리 부담이 적고 데이터 티어와 자동으로 통합됩니다.
API를 사용해 쓰기 인덱스가 있는 인덱스 별칭을 같은 이름의 데이터 스트림으로 변환할 수 있습니다:
- Elastic Stack 배포에서는 convert an index alias to a data stream API를 사용합니다.
- Elastic Cloud Serverless에서는 convert an index alias to a data stream API를 사용합니다.
변환하는 동안 별칭의 인덱스는 스트림의 숨겨진 백킹 인덱스가 됩니다. 별칭의 쓰기 인덱스는 스트림의 쓰기 인덱스가 됩니다. 스트림에는 여전히 데이터 스트림이 활성화된 일치하는 인덱스 템플릿이 필요합니다.
POST _data_stream/_migrate/my-time-series-data
Kibana UI(시각적 개요) 또는 API(원시 JSON)를 사용해 각 데이터 스트림의 메타데이터를 확인할 수 있습니다.
Kibana에서 데이터 스트림 정보를 확인하려면:
- 탐색 메뉴 또는 전역 검색 필드를 사용해 Index Management 페이지로 이동합니다.
- Data Streams 탭에서 데이터 스트림 이름을 클릭합니다.
Streams 페이지에서도 데이터 스트림의 세부 정보를 볼 수 있습니다. Streams 페이지는 Kibana에서 데이터를 관리하는 중앙 인터페이스를 제공합니다. 스트림을 선택하면 세부 정보를 볼 수 있습니다.
API를 사용해 이 정보를 확인할 수도 있습니다:
- Elastic Stack 배포에서는 get data stream API를 사용합니다.
- Elastic Cloud Serverless에서는 get data streams API를 사용합니다.
GET _data_stream/my-data-stream
Kibana UI 또는 API를 통해 데이터 스트림과 그 백킹 인덱스를 삭제할 수 있습니다. 이 작업을 완료하려면 해당 데이터 스트림에 대한 delete_index 보안 권한이 필요합니다.
Kibana에서 데이터 스트림과 그 백킹 인덱스를 삭제하려면:
- 탐색 메뉴 또는 전역 검색 필드를 사용해 Index Management 페이지로 이동합니다.
- Data Streams 화면에서 휴지통 아이콘을 클릭합니다. 이 아이콘은 해당 데이터 스트림에 대한
delete_index보안 권한이 있는 경우에만 표시됩니다.
API를 사용해 데이터 스트림을 삭제할 수도 있습니다:
- Elastic Stack 배포에서는 delete data streams API를 사용합니다.
- Elastic Cloud Serverless에서는 delete data streams API를 사용합니다.
DELETE _data_stream/my-data-stream