OpenSearch 의 역사
OpenSearch 는 실시간 어플리케이션 모니터링, 로그 분석 및 웹 사이트 검색에 유용한 오픈 소스이다. 데이터 수집, 보안, 검색, 집계, 확인, 분석 등이 쉽게 가능하다. 기존의 Elasticsearch / Kibana 가 라이센스를 변경하면서 오픈 소스로서의 업데이트를 중단하자, AWS 가 마지막 오픈 소스 버전(Elasticsearch 7.10.2 및 Kibana 7.10.2) 을 Apache License, Version 2.0(ALv2) 하에서 릴리스하여 관리/업데이트 하는 중이다. Elasticsearch / Kibana 는 OpenSearch / OpenSearch Dashboard 라는 이름으로 변경되었으며, 기존의 Apache Lucene 검색 라이브러리도 동일하게 사용한다.
OpenSearch 도메인 생성
도메인 생성시, 인스턴스 유형, 인스턴스 수, 스토리지 할당 등을 지정할 수 있다.
- Multi-AZ 를 사용하는 경우 전용 프라이머리 노드가 활성화 되어 있으며, 프로덕션 도메인의 경우 3개의 노드를 권장한다. (가동 중지를 막기 위해 3개의 노드를 구성한다.)
- 데이터 노드의 개수도 3의 배수를 권장한다. (전용 프라이머리 노드와 인스턴스 패밀리를 동일하게 묶는 것 추천)
기타 나머지 부분들은 설정 항목마다 잘 설명되어 있다.
OpenSearch 의 장애
흔히 OpenSearch 에서의 장애라 함은, 클러스터 상태에 빨간 불이 켜지거나, 쓰기에 빨간 불이 켜지는 것을 말한다. 주로 JVM 메모리가 부족하거나 공간이 부족해진 경우가 대부분이 었는데, EBS 볼륨을 늘리거나, 오래된 index 들을 삭제하면서 버텨왔다. 하지만 index 도 특정기간 이상 보관해야 하기 때문에 지울 수 없게 됐고, 트래픽도 극에 달하니 다른 방법을 모색해야 했다.
Warning : VM 메모리 압력이 80%를 초과했습니다. 30분 동안 92%를 초과하면 클러스터에 대한 모든 쓰기 작업이 차단됩니다. 클러스터 안정성을 최적화하려면 클러스터에 대한 트래픽을 줄이거나 도메인을 확장하세요. 자세한 내용은 https://docs.aws.amazon.com/opensearch-service/latest/developerguide/monitoring-events.html#monitoring-events-high-jvm을(를) 참조하세요.
UltraWarm 활용
OpenSearch 에서는 오래된 데이터의 분리 보관을 위해 UltraWarm / Cold Storage 라는 대안을 제공한다. (이 대안은 읽기 전용이므로 Warm Index 에 쓰기를 시도하면 에러가 발생한다.)
- 데이터 노드 (hot) : 읽기 속도가 빠르지만 고비용
- UltraWarm : 읽기 속도는 보통이나, 데이터 노드보다 90% 저렴 (스토리지 + S3 캐싱)
- Cold Storage : 읽기 속도는 느리나, UltraWarm보다 더 저렴 (S3 사용)
실제 warm index 검색 속도는 특별히 느리다는 체감을 하지는 못했다.
실제 빈번하게 이루어지는 데이터 조회 기간은 대부분 한달 이내였기 때문에, 넉넉하게 2달전 데이터들은 모두 별도 보관하려고 한다. (참고로 현재 데이터 보관 정책은 기본적인 데이터는 1년, 로그인 관련 데이터는 2년, 계정관련 데이터는 5년 보관이다.)
기본적으로 매달 새로운 index (server1_dev_2401, ...) 를 만들고 index_pattern (server1_dev_*, ...) 으로 조회하고 있었다.
server1_dev_2401
server1_dev_2402
server1_dev_2403
...
server1_prod_2401
server1_prod_2402
server1_prod_2403
...
아래는 63일 뒤에 Ultrawarm 스토리지로 이동하며, 365일 뒤에 인덱스를 삭제하는 스크립트이다.
새로 생성되는 Index 들도 ism_template 에 매칭된다면 해당 정책이 적용된다.
1. 클러스터에서 UltraWarm / Cold Storage 활성화 체크
2. OpenSearch Dashboard 에서 Index State Management (ISM) 정책 생성
{
"policy": {
"description": "Move indices to warm storage after 60 days and delete after 1 year",
"default_state": "hot",
"states": [
{
"name": "hot",
"actions": [],
"transitions": [
{
"state_name": "warm",
"conditions": {
"min_index_age": "63d"
}
}
]
},
{
"name": "warm",
"actions": [
{
"warm_migration": {}
}
],
"transitions": [
{
"state_name": "delete",
"conditions": {
"min_index_age": "365d"
}
}
]
},
{
"name": "delete",
"actions": [
{
"delete": {}
}
],
"transitions": []
}
],
"ism_template": [
{
"index_patterns": ["server1_*", "server2_*"],
"priority": 100
}
]
}
}
3. 정책 적용할 index 선택 및 적용 / 확인
4. 모니터링
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.