엔터프라이즈 검색
Enterprise, Enterprise Advanced 플랜에서 사용할 수 있습니다.
Mattermost 데이터베이스 검색은 RAM 32GB, CPU 4개인 서버에서 게시물이 약 200만 건에 이르면 성능 저하가 나타나기 시작합니다. Mattermost 서버의 게시물이 250만 건을 넘을 것으로 예상된다면, 최적의 검색 성능을 위해 게시물 300만 건에 도달하기 전에 Elasticsearch 또는 AWS OpenSearch Service를 활성화할 것을 권장합니다. 두 도구 모두 성능이 뛰어나며 엔터프라이즈 규모의 워크로드를 처리할 수 있습니다. 둘 중 어느 것을 선택할지는 다음 요소에 따라 달라집니다.
- 라이선스와 비용: 독점 라이선스를 피하거나 비용 효율적인 솔루션을 택하려는 조직에는 AWS OpenSearch가 더 적합할 수 있습니다.
- 기능 요구 사항: 강력한 기능을 별도 작업 없이 바로 사용하고자 하는 조직은 Elasticsearch의 독점 기능(예: 고급 분석, 보안 제품군)을 선호할 수 있습니다.
- 인프라 정합성: AWS OpenSearch는 AWS 중심 환경과 잘 맞고, Elasticsearch는 더 폭넓은 연동을 제공합니다.
Elasticsearch
Elasticsearch는 이미 자리를 잡고 널리 사용되는 검색 엔진으로, 방대한 생태계와 커뮤니티 지원을 갖추고 있습니다. 클러스터 지원을 통해 검색 성능을 최적화하고 전용 인덱싱과 사용량 기반 리소스 할당을 제공하여 엔터프라이즈 규모 배포에서 빠르고 예측 가능한 검색 결과를 제공합니다.
Mattermost 구현체는 Elasticsearch를 분산형 RESTful 검색 엔진으로 사용하여 클러스터 환경에서 매우 효율적인 데이터베이스 검색을 지원합니다. Elasticsearch 서버를 위한 Mattermost 설정과 구성에 대해 자세히 알아보세요.
AWS OpenSearch Service
AWS OpenSearch Service는 AWS 고객에게 Elasticsearch v7.10.x 이후의 공식 경로입니다. AWS 클라우드에서 OpenSearch 클러스터를 손쉽게 배포·운영·확장할 수 있게 해 주는 완전 관리형 서비스로, 데이터를 실시간으로 검색·분석·시각화하는 간단하고 비용 효율적인 방법을 제공합니다.
AWS OpenSearch Service는 Elasticsearch의 커뮤니티 주도 포크인 오픈 소스 OpenSearch 프로젝트를 기반으로 합니다. OpenSearch 서버를 위한 Mattermost 설정과 구성에 대해 자세히 알아보세요.
지원 경로
사용 중인 버전에 따라 엔터프라이즈 검색의 지원 경로를 아래에서 확인하세요.
Elasticsearch v9
Elasticsearch v9는 Mattermost v11.7부터 지원됩니다. 최신 기능과 보안 업데이트를 위해 Elasticsearch v9로 업그레이드할 것을 권장합니다. 업그레이드 세부 사항은 Elasticsearch 업그레이드 문서를 참고하고, Elasticsearch를 사용하도록 Mattermost 배포를 구성하는 방법은 Elasticsearch 서버 설정 문서를 참고하세요.
Elasticsearch v8
Elasticsearch v8은 Mattermost v9.11부터 지원됩니다. 최신 기능과 보안 업데이트를 위해 Elasticsearch v9로 업그레이드할 것을 권장합니다. 업그레이드 세부 사항은 Elasticsearch 업그레이드 문서를 참고하고, Elasticsearch를 사용하도록 Mattermost 배포를 구성하는 방법은 Elasticsearch 서버 설정 문서를 참고하세요.
Elasticsearch v7.17은 Mattermost v11.7부터 더 이상 지원되지 않습니다. 여전히 Elasticsearch v7을 사용 중이라면 Elasticsearch v8 또는 v9로 업그레이드해야 합니다.
AWS OpenSearch Service
AWS OpenSearch Service는 AWS 고객에게 Elasticsearch v7.10.x 이후의 공식 경로로, 데이터를 실시간으로 검색·분석·시각화하는 간단하고 비용 효율적인 방법을 제공합니다. 본질적으로 Elasticsearch v7.10.x의 연장선이지만 AWS가 오픈 소스로 유지·관리합니다. 장기 지원, 활발한 개발, AWS 클라이언트·라이브러리·관리형 서비스와의 호환성을 제공합니다.
AWS OpenSearch로 업그레이드하는 방법은 이 페이지의 AWS Elasticsearch v7.10.x 섹션을 참고하고, AWS OpenSearch를 사용하도록 Mattermost 배포를 구성하는 방법은 AWS OpenSearch 서버 설정 문서를 참고하세요.
AWS Elasticsearch v7.10.x
AWS 관리형 서비스에서 Elasticsearch v7.10.x를 사용하고 있다면, 백엔드 인프라를 바꾸지 않고서는 v8이나 v9 클라이언트 같은 최신 Elasticsearch 클라이언트를 사용할 수 없습니다. AWS Elasticsearch v7.10.x를 사용 중이라면 향후 호환성을 위해 AWS OpenSearch로 업그레이드해야 합니다.
Elasticsearch v7.10.x에서 OpenSearch로의 마이그레이션 경로는 작업을 최소화할 수 있도록 간단하게 설계되었습니다.
- OpenSearch에서 "compatibility mode"를 비활성화합니다.
- Mattermost 서버를 업그레이드합니다.
- Mattermost
ElasticsearchSettings.Backend설정 값을elasticsearch에서opensearch로 수동으로 또는 mmctl을 사용해 변경합니다. 이 값은 시스템 콘솔에서 변경할 수 없습니다. 추가 세부 사항은 Mattermost 검색 백엔드 유형 설정 문서를 참고하세요. - Mattermost 서버를 재시작합니다.
자주 묻는 질문(FAQ)
Elasticsearch나 AWS OpenSearch를 꼭 사용해야 하나요?
아닙니다. 엔터프라이즈 검색 엔진은 클러스터 환경에서 매우 효율적인 데이터베이스 검색을 수행하기 위해 대규모 Enterprise 배포를 대상으로 설계되었습니다. 기본 Mattermost 데이터베이스 검색은 데이터베이스 서버 사양에 따라 다르지만 게시물이 약 250만 건에 이르면 성능 저하가 나타나기 시작합니다. Mattermost 서버의 게시물이 250만 건을 넘을 것으로 예상된다면 최적의 검색 성능을 위해 Elasticsearch나 AWS OpenSearch 사용을 권장합니다.
Elasticsearch나 OpenSearch를 Mattermost 서버와 같은 머신에 설치해야 하나요?
아닙니다. Elasticsearch나 AWS OpenSearch는 Mattermost 서버와 분리된 전용 머신에 설치할 것을 강력히 권장합니다.
어떤 종류의 인덱스가 생성되나요?
Mattermost는 사용자, 채널, 게시물 세 가지 유형의 인덱스를 생성합니다. 사용자와 채널은 각각 인덱스가 하나씩 있습니다. 게시물은 날짜별로 집계되어 여러 인덱스에 나뉘어 저장됩니다.
검색 인덱싱 작업을 일시 중지할 수 있나요?
가능합니다. Mattermost v6.7부터 검색 인덱싱 작업은 재개할 수 있습니다. 검색 인덱싱 작업이 실행 중일 때 서버를 중지하면 작업이 대기 상태가 됩니다. 서버가 재시작되면 작업이 재개됩니다. 시스템 관리자는 시스템 콘솔에서 인덱싱 작업을 취소할 수 있습니다.
인덱스 롤오버 정책을 정의할 수 있나요?
AggregatePostsAfterDays 설정은 기준값을 정의합니다. 이 값 이전의 모든 게시물은 다시 인덱싱되어 더 크고 새로운 인덱스로 집계됩니다. 기본값은 365일입니다.
Elasticsearch로 제공되는 새로운 검색 기능이 있나요?
현재의 Elasticsearch 구현은 데이터베이스 검색에서 사용할 수 있는 검색 기능과 동일한 수준입니다. Mattermost 팀은 파일 이름·내용 검색, 날짜 필터, 연산자와 수식어로 Elasticsearch 기능 범위를 넓히는 작업을 진행하고 있습니다.
파일이 Elasticsearch나 OpenSearch에 저장되나요?
아닙니다. 파일과 첨부 파일은 저장되지 않습니다.
Elasticsearch 서버의 시스템 상태는 어떻게 모니터링하나요?
다음 Prometheus 익스포터를 사용해 Elasticsearch의 다양한 지표를 모니터링할 수 있습니다: justwatchcom/elasticsearch_exporter.
Elasticsearch 성능 모니터링에 관한 글도 참고할 수 있습니다. Mattermost의 성능 모니터링 시스템이 사용하는 Prometheus를 대상으로 쓴 글은 아니지만, 여러 가지 팁과 모범 사례를 담고 있습니다.
Elasticsearch나 OpenSearch로 어떤 형태의 데이터가 전송되나요?
Mattermost는 엔터티를 인덱싱하고 조회할 때 JSON 메시지를 사용하는 REST API를 통해 Elasticsearch 또는 OpenSearch와 통신합니다.
Elasticsearch나 OpenSearch로 데이터가 얼마나, 언제 전송되나요?
메시지가 게시되거나 채널이 생성될 때마다, 또는 사용자에게 변경이 있을 때마다(이름 변경처럼 속성이 바뀌거나 채널에 참여·이탈하는 경우) 해당 이벤트와 연관된 데이터가 Elasticsearch 또는 OpenSearch로 전송됩니다.
Elasticsearch나 OpenSearch를 통한 검색이 활성화되어 있으면 검색할 때마다 쿼리가 생성됩니다. 자동 완성이 활성화되어 있으면 메시지 작성이나 사용자 검색과 연관된 사용자·채널 자동 완성마다 쿼리가 생성됩니다.
검색 작업이 실패했는지 어떻게 알 수 있나요?
Mattermost는 System Console > Environment > Elasticsearch(시스템 콘솔 > 환경 > Elasticsearch)에서 각 Elasticsearch 또는 OpenSearch 인덱싱 작업의 상태를 제공합니다. 여기서 작업의 성공·실패 여부와 오류 세부 정보를 확인할 수 있습니다.
실패는 서버 로그로 반환됩니다. 오류 로그는 Failed job 문자열로 시작하며 job_id 키/값 쌍을 포함합니다. 검색 작업 실패는 워커 이름 EnterpriseElasticsearchAggregator와 EnterpriseElasticsearchIndexer로 식별됩니다. 필요하다면 이러한 실패를 프로그램으로 조회해 적절한 시스템에 알리는 스크립트를 만들 수도 있습니다.
엔터프라이즈 검색 연결 문제는 어떻게 진단하나요?
Mattermost v11부터 Support Packet 생성 시 구성된 Elasticsearch 또는 AWS OpenSearch 서버와의 연결을 자동으로 테스트하고 연결 오류가 있으면 Support Packet에 포함합니다. 이를 통해 서버 버전, 설치된 플러그인, 연결 실패 시의 구체적인 오류 세부 정보 등 유용한 진단 정보를 얻을 수 있습니다.
엔터프라이즈 검색 연결 테스트 결과는 Support Packet에 나타나며, 네트워크 연결 문제, 인증 실패, 서버 가용성 문제 같은 구성 문제를 식별하는 데 도움이 됩니다. 연결 오류가 있으면 문제 해결에 도움이 되도록 구체적인 오류 메시지와 함께 명확히 기록됩니다.
Mattermost는 Elasticsearch 또는 OpenSearch 장애를 어떻게 처리하나요?
Mattermost v11.7부터 서버에는 Elasticsearch와 OpenSearch 연결에 대한 자동 상태 모니터가 포함됩니다. 상태 모니터는 주기적으로 상태 점검을 수행하고 연결 수명 주기를 자동으로 관리합니다.
- 상태 점검: 서버는 60초마다 검색 엔진 클러스터의 상태를 점검합니다. 상태 점검이 3회 연속 실패하면 엔진이 중지되고 검색은 데이터베이스로 폴백합니다.
- 첫 실패 시 빠른 폴백: 첫 번째 상태 점검이 실패하는 즉시 엔진은 비정상으로 표시되고 검색 요청은 데이터베이스로 라우팅됩니다. 연속 실패 임계값에 도달하기 전에 일어나므로 사용자가 겪는 지장이 최소화됩니다.
- 자동 재시도: 검색 엔진을 사용할 수 없을 때 서버는 지수 백오프로 연결을 재시도합니다. 15초에서 시작해 시도 간격을 두 배로 늘리며 최대 5분까지 증가합니다.
- 자동 복구: 검색 엔진을 다시 사용할 수 있게 되면 서버가 자동으로 재연결하여 검색 쿼리에 다시 사용합니다. 수동 개입이나 서버 재시작은 필요하지 않습니다.
- 구성 변경: Elasticsearch 또는 OpenSearch 설정이나 라이선스가 변경되면 즉시 상태 모니터가 연결 상태를 다시 평가합니다.
- 모니터링:
mattermost_search_engine_statusPrometheus 지표가 검색 엔진의 상태를 보고합니다(1= 정상 또는 미구성,0= 구성되었으나 사용 불가). 이 지표를 사용해 검색 엔진 장애에 대한 알림을 설정하세요. 자세한 내용은 성능 모니터링 지표를 참고하세요.
장애가 발생하는 동안 다음과 같은 로그 메시지를 볼 수 있습니다.
| 수준 | 로그 메시지 | 의미 |
|---|---|---|
| Error | Search engine health check failed repeatedly; stopping engine | 실패 임계값에 도달하여 엔진이 중지되었습니다. 검색은 데이터베이스로 폴백합니다. |
| Warn | Search engine health check failed | 개별 상태 점검이 실패했습니다. consecutive_failures 횟수를 포함합니다. |
| Warn | Search engine health check failed: it is now marked as unhealthy | 정상이던 엔진이 상태 점검에 실패해 비정상으로 표시되었습니다. 검색 요청은 즉시 데이터베이스로 폴백합니다. |
| Warn | Search engine watcher: Start() failed, will retry | 재연결 시도가 실패했습니다. 다음 재시도까지의 시간을 나타내는 next_backoff 필드를 포함합니다. |
| Info | Search engine health check succeeded: it is now marked as healthy | 비정상 상태였던 엔진이 상태 점검을 통과해 다시 검색 요청을 처리합니다. |
| Info | Search engine watcher: engine started successfully | 엔진이 복구되어 다시 활성화되었습니다. |
| Info | Search engine watcher: engine disabled, parking | 구성에서 검색 엔진이 비활성화되어 상태 모니터가 유휴 상태입니다. |
검색 인덱스가 완료되지 않습니다. 어떻게 해야 하나요?
검색 인덱싱 작업이 일시 중지되었다면 Elasticsearch 또는 OpenSearch 서버가 재시작되었을 가능성이 큽니다. 해당 서버를 재시작한 경우에는 작업이 완료되도록 Mattermost도 함께 재시작해야 합니다. Mattermost 서버를 재시작해도 문제가 해결되지 않으면 Mattermost 구독 고객은 Mattermost 지원에 문의해 도움을 받을 수 있습니다.
매번 먼저 퍼지한 다음 대량 인덱싱을 해야 하나요?
그렇습니다. 오래된 데이터를 제거(퍼지)할 때마다 이어서 대량 인덱싱 작업을 수행해 새 데이터를 다시 채워야 합니다. 인덱스를 퍼지(삭제)하면 Elasticsearch에서 기존 데이터가 제거됩니다. 퍼지 후 인덱스를 새 데이터로 다시 채우려면 대량 인덱싱 작업을 수행해 인덱스를 효율적으로 재구축합니다. 대량 API는 여러 문서를 한 번의 요청으로 인덱싱·삭제·업데이트할 수 있어 문서를 하나씩 처리하는 것보다 빠르고 효율적입니다.
Mattermost 서비스 계정에 필요한 권한
"최소 권한" 환경에서는 Elasticsearch 또는 AWS OpenSearch 서비스 계정의 접근 범위를 제한하기 위해 서비스 계정 권한을 더 좁혀야 할 수 있습니다.
다음 JSON은 Mattermost가 Elasticsearch 또는 AWS OpenSearch와 올바르게 동작하도록 허용하는 "최소 권한" 권한 집합의 예시입니다.
{
"cluster_permissions": [
"cluster:monitor/*",
"indices:admin/template/put",
"indices:data/write/bulk"
],
"index_permissions": [
{
"index_patterns": [
"\<IndexPrefix\>*"
],
"allowed_actions": [
"indices:admin/get",
"indices:admin/create",
"indices:admin/delete",
"indices:admin/mapping/put",
"indices:admin/mappings/fields/get*",
"indices:data/read*",
"indices:data/write*"
]
}
]
}
위 설정을 더 단순하고 유연하며 견고하게 바꾼 변형은 다음과 같습니다.
{
"cluster_permissions": [
"cluster:monitor/*",
"indices:admin/template/put",
"indices:data/write/bulk"
],
"index_permissions": [
{
"index_patterns": [
"\<IndexPrefix\>*"
],
"allowed_actions": [
"indices:*"
]
}
]
}