로그, 이벤트 및 메트릭과 같은 지속적으로 생성되는 시계열 데이터를 수집하는 경우,
문서의 수가 급격하게 증가하고 이전 문서를 업데이트할 필요가 없는 경우가 있을 때가 있습니다.
데이터 스트림은 타임스탬프 필드가 있는지 확인하고 시계열 데이터에 가장 적합한 설정을 시행합니다.
내부적으로 여러 backing 인덱스로 구성되는데, 검색 요청은 모든 backing 인덱스에 라우팅 되는 반면에 인덱싱 요청은 최신 쓰기 인덱스로 라우팅됩니다.
ISM 정책을 사용하면 인덱스 롤오버 또는 삭제를 자동으로 처리할 수 있습니다.
:: 인덱스 템플릿 만들기
데이터 스트림을 생성하려면 먼저 인덱스 세트를 데이터 스트림으로 구성하는 인덱스 템플릿을 생성해야 합니다.
data_stream 객체는 일반적인 인덱스 템플릿이 아닌 데이터 스트림으로 나타냅니다. 인덱스 패턴은 데이터 스트림의 이름과 매칭 됩니다.
PUT _index_template/logs-template
{
"index_patterns": [
"my-data-stream",
"logs-*"
],
"data_stream": {},
"priority": 100
}
// 이 경우에 각각의 수집된 문서는 @timestamp 필드가 있어야합니다. 또한 data_stream 객체의 속성으로 커스텀 timestamp 필드를 정의할 수 있습니다.
// 일반 인덱스 템플릿과 마찬가지로 인덱스 mappings와 다른 settings도 추가할 수 있습니다.
PUT _index_template/logs-template-nginx
{
"index_patterns": "logs-nginx",
"data_stream": {
"timestamp_field": {
"name": "request_time"
}
},
"priority": 200,
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
}
// logs-nginx 인덱스는 logs-template 및 logs-template-nginx 템플릿 모두와 일치합니다. 동점인 경우 OpenSearch는 priority 값이 더 높은 인덱스 템플릿을 선택합니다.
:: 데이터 스트림 생성
인덱스 템플릿을 생성한 후 데이터 스트림을 생성할 수 있습니다. 데이터 스트림 API를 사용하여 데이터 스트림을 명시적으로 생성할 수 있습니다. 데이터 스트림 API는 첫 번째 backing 인덱스를 초기화 합니다.
PUT _data_stream/logs-redis
PUT _data_stream/logs-nginx
// 데이터 스트림을 생성하지 않고 직접 데이터 수집을 시작할 수도 있습니다.
// data-stream 객체와 일치하는 인덱스 템플릿이 있기 때문에 OpenSearch는 자동으로 데이터 스트림을 생성합니다.
POST logs-staging/_doc
{
"message": "login attempt failed",
"@timestamp": "2013-03-01T00:00:00"
}
// 특정 데이터 스트림에 대한 정보를 보려면 아래 명령어를 입력합니다.
GET _data_stream/logs-nginx
// 응답 예시
{
"data_streams" : [
{
"name" : "logs-nginx",
"timestamp_field" : {
"name" : "request_time"
},
"indices" : [
{
"index_name" : ".ds-logs-nginx-000001",
"index_uuid" : "-VhmuhrQQ6ipYCmBhn6vLw"
}
],
"generation" : 1,
"status" : "GREEN",
"template" : "logs-template-nginx"
}
]
}
// 타임스탬프 필드의 이름, backing 인덱스 목록 및 데이터 스트림을 생성하는데 사용된 템플릿을 볼 수 있습니다.
// 또한 모든 backing 인덱스의 가장 낮은 상태를 나타내는 데이터 스트림의 상태를 볼 수 있습니다.
// 더 많은 정보를 보려면 _stats를 엔드포인트에 추가합니다.
GET _data_stream/logs-nginx/_stats
// 응답 예시
{
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"data_stream_count" : 1,
"backing_indices" : 1,
"total_store_size_bytes" : 208,
"data_streams" : [
{
"data_stream" : "logs-nginx",
"backing_indices" : 1,
"store_size_bytes" : 208,
"maximum_timestamp" : 0
}
]
}
:: 데이터 스트림으로 데이터 수집
일반 인덱스 또는 인덱스 별칭을 검색하는 것처럼 데이터 스트림을 검색할 수 있습니다.
검색 작업은 모든 지원 인덱스 (스트림에 있는 모든 데이터)에 적용됩니다.
GET logs-redis/_search
{
"query": {
"match": {
"message": "login"
}
}
}
// 응답 예시
{
"took" : 514,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.2876821,
"hits" : [
{
"_index" : ".ds-logs-redis-000001",
"_type" : "_doc",
"_id" : "-rhVmXoBL6BAVWH3mMpC",
"_score" : 0.2876821,
"_source" : {
"message" : "login attempt",
"@timestamp" : "2013-03-01T00:00:00"
}
}
]
}
}
:: 데이터 스트림 롤오버
롤오버 작업은 데이터 스트림의 새 쓰기 인덱스가 되는 새로운 backing 인덱스를 만듭니다.
데이터 스트림에서 수동 롤오버 작업을 수행하려면 다음을 수행합니다.
POST logs-redis/_rollover
// 응답 예시
{
"acknowledged" : true,
"shards_acknowledged" : true,
"old_index" : ".ds-logs-redis-000001",
"new_index" : ".ds-logs-redis-000002",
"rolled_over" : true,
"dry_run" : false,
"conditions" : { }
}
이제 logs-redis 데이터 스트림에서 GET요청(검색) 작업을 수행하면 생성 ID가 1에서 2로 증가하는 것을 볼 수 있습니다.
ISM 정책( Index State Management (ISM) policy )을 설정하여 데이터 스트림에 대한 롤오버 프로세스를 자동화할 수 있습니다. ISM 정책은 생성 시 backing 인덱스에 적용됩니다.
정책을 데이터 스트림에 연결하면 해당 데이터 스트림의 향후 backing 인덱스에만 영향을 줍니다.
ISM 정책이 backing 인덱스로 부터 이 정보를 유추하기 때문에 rollover_alias 설정을 제공할 필요도 없습니다.
:: OpenSearch 대시보드에서 데이터 스트림 관리
OpenSearch 대시보드에서 데이터 스트림을 관리하기 위해 OpenSearch Dashboards → Index Management → Indices or Policy managed indices를 선택합니다.
하나 또는 더 많은 데이터 스트림을 선택할 수 있고, ISM 정책에 적용할 수 있습니다. 또한 이 정책을 각각의 backing 인덱스에 적용할 수 있습니다.
:: 데이터 스트림 삭제
제 작업은 먼저 데이터 스트림의 백업 인덱스를 삭제한 다음 데이터 스트림 자체를 삭제해야 합니다.
데이터 스트림과 모든 숨겨진 backing 인덱스를 삭제하려면 아래 명령어를 실행합니다.
DELETE _data_stream/<name_of_data_stream>
와일드 카드를 사용하여 둘 이상의 데이터 스트림을 삭제할 수도 있습니다.
ISM 정책을 사용하여 데이터 스트림에서 데이터를 삭제하는 것이 좋습니다.
또한 보안 플러그인을 사용하여 데이터 스트림 이름에 대한 세분화된 권한을 사용할 수도 있고, 비동기 검색과 SQL 및 PPL을 사용하여 데이터 스트림을 직접 쿼리할 수도 있습니다.
'OpenSearch (ElasticSearch)' 카테고리의 다른 글
[8] 집계 - 메트릭 집계 (0) | 2022.03.10 |
---|---|
[7] 인덱스 템플릿 (0) | 2022.03.02 |
[5] 인덱스 별칭 (aliases) (0) | 2022.02.22 |
[4] 인덱스 데이터 (0) | 2022.02.18 |
[3] 인덱스 생성과 설정 예제 (0) | 2022.02.17 |