Elasticsearch 액세스 문제 해결
Offering: GitLab Self-Managed, GitLab Dedicated
Elasticsearch 액세스로 작업할 때 다음 문제가 발생할 수 있습니다. Rails 콘솔 세션 시작을 참조하세요. 사용 가능한 모든 속성을 나열하려면: 출력에는 elasticsearch_indexing, elasticsearch_url, elasticsearch_replicas, elasticsearch_pause_indexing 등 Elasticsearch 통합에서 사용 가능한 모든 설정이 포함됩니다.
Elasticsearch 액세스로 작업할 때 다음 문제가 발생할 수 있습니다.
Rails 콘솔에서 구성 설정#
Rails 콘솔 세션 시작을 참조하세요.
속성 나열#
사용 가능한 모든 속성을 나열하려면:
- Rails 콘솔을 엽니다 (
sudo gitlab-rails console). - 다음 명령을 실행합니다:
ApplicationSetting.last.attributes
출력에는 elasticsearch_indexing, elasticsearch_url, elasticsearch_replicas, elasticsearch_pause_indexing 등 Elasticsearch 통합에서 사용 가능한 모든 설정이 포함됩니다.
속성 설정#
Elasticsearch 통합 설정을 설정하려면 다음과 같은 명령을 실행합니다:
ApplicationSetting.last.update(elasticsearch_url: '<your ES URL and port>')
#or
ApplicationSetting.last.update(elasticsearch_indexing: false)
속성 가져오기#
Elasticsearch 통합 또는 Rails 콘솔에서 설정이 설정되었는지 확인하려면 다음과 같은 명령을 실행합니다:
Gitlab::CurrentSettings.elasticsearch_url
#or
Gitlab::CurrentSettings.elasticsearch_indexing
비밀번호 변경#
Elasticsearch 비밀번호를 변경하려면 다음 명령을 실행합니다:
es_url = Gitlab::CurrentSettings.current_application_settings
# 현재 Elasticsearch URL 확인
es_url.elasticsearch_url
# Elasticsearch URL 설정
es_url.elasticsearch_url = "http://<username>:<password>@your.es.host:<port>"
# 변경 사항 저장
es_url.save!
로그 보기#
Elasticsearch 통합 문제를 파악하는 데 가장 유용한 도구 중 하나는 로그입니다. 이 통합과 관련된 가장 관련성 높은 로그는 다음과 같습니다:
sidekiq.log- 모든 인덱싱은 Sidekiq에서 이루어지므로 Elasticsearch 통합에 관련된 로그 대부분이 이 파일에 있습니다.elasticsearch.log- 검색, 인덱싱 또는 마이그레이션에 대한 진단 정보를 포함할 수 있는 Elasticsearch에 특화된 추가 로그가 이 파일로 전송됩니다.
일반적인 함정과 극복 방법은 다음과 같습니다.
GitLab 인스턴스가 Elasticsearch를 사용하는지 확인#
GitLab 인스턴스가 Elasticsearch를 사용하는지 확인하려면:
-
검색을 수행할 때 검색 결과 페이지의 오른쪽 상단에 고급 검색이 활성화됨이 표시되는지 확인합니다.
-
관리자 영역의 설정 > 검색 아래에서 고급 검색 설정이 선택되어 있는지 확인합니다.
필요한 경우 Rails 콘솔에서도 동일한 설정을 가져올 수 있습니다:
::Gitlab::CurrentSettings.elasticsearch_search? # 검색이 Elasticsearch를 사용하는지 여부 ::Gitlab::CurrentSettings.elasticsearch_indexing? # 콘텐츠가 Elasticsearch에 인덱싱되는지 여부 ::Gitlab::CurrentSettings.elasticsearch_limit_indexing? # Elasticsearch가 특정 프로젝트/네임스페이스로만 제한되는지 여부 -
Rails 콘솔에 액세스하여 다음 명령을 실행하여 검색이 Elasticsearch를 사용하는지 확인합니다:
u = User.find_by_email('email_of_user_doing_search') s = SearchService.new(u, {:search => 'search_term'}) pp s.search_objects.class마지막 명령의 출력이 핵심입니다. 표시되는 경우:
ActiveRecord::Relation이면 Elasticsearch를 사용하지 않는 것입니다.Kaminari::PaginatableArray이면 Elasticsearch를 사용하는 것입니다.
-
Elasticsearch가 특정 네임스페이스로 제한되어 있고 특정 프로젝트 또는 네임스페이스에 Elasticsearch가 사용되는지 알아야 하는 경우 Rails 콘솔을 사용할 수 있습니다:
::Gitlab::CurrentSettings.search_using_elasticsearch?(scope: Namespace.find_by_full_path("/my-namespace")) ::Gitlab::CurrentSettings.search_using_elasticsearch?(scope: Project.find_by_full_path("/my-namespace/my-project"))
오류: User: anonymous is not authorized to perform: es:ESHttpGet#
AWS OpenSearch 또는 Elasticsearch에서 도메인 수준 액세스 정책을 사용할 때 AWS 역할이 올바른 GitLab 노드에 할당되지 않은 것입니다. GitLab Rails 및 Sidekiq 노드는 검색 클러스터와 통신할 권한이 필요합니다.
User: anonymous is not authorized to perform: es:ESHttpGet because no resource-based policy allows the es:ESHttpGet
action
이 문제를 해결하려면 AWS 역할이 올바른 GitLab 노드에 할당되어 있는지 확인합니다.
유효한 지역이 지정되지 않음#
고급 검색에서 AWS 인증을 사용할 때 지정하는 지역이 유효해야 합니다.
오류: no permissions for [indices:data/write/bulk]#
IAM 역할 또는 AWS OpenSearch 대시보드를 사용하여 생성된 역할로 세분화된 액세스 제어를 사용할 때 다음 오류가 발생할 수 있습니다:
{
"error": {
"root_cause": [
{
"type": "security_exception",
"reason": "no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::xxx:role/INSERT_ROLE_NAME_HERE, backend_roles=[arn:aws:iam::xxx:role/INSERT_ROLE_NAME_HERE], requestedTenant=null]"
}
],
"type": "security_exception",
"reason": "no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::xxx:role/INSERT_ROLE_NAME_HERE, backend_roles=[arn:aws:iam::xxx:role/INSERT_ROLE_NAME_HERE], requestedTenant=null]"
},
"status": 403
}
이 문제를 해결하려면 AWS OpenSearch 대시보드에서 역할을 사용자에게 매핑해야 합니다.
AWS OpenSearch Service에서 추가 마스터 사용자 생성#
도메인을 생성할 때 마스터 사용자를 설정할 수 있습니다. 이 사용자를 통해 추가 마스터 사용자를 생성할 수 있습니다. 자세한 내용은 AWS 설명서를 참조하세요.
권한을 가진 사용자와 역할을 생성하고 사용자를 역할에 매핑하려면 OpenSearch 설명서를 참조하세요. 역할에 다음 권한을 포함해야 합니다:
{
"cluster_permissions": [
"cluster_composite_ops",
"cluster_monitor"
],
"index_permissions": [
{
"index_patterns": [
"gitlab*"
],
"allowed_actions": [
"data_access",
"manage_aliases",
"search",
"create_index",
"delete",
"manage"
]
},
{
"index_patterns": [
"*"
],
"allowed_actions": [
"indices:admin/aliases/get",
"indices:monitor/stats"
]
}
]
}
열린 TCP 연결 누적#
GitLab 17.11 이상에서는 GitLab 프로세스에서 외부 서비스로의 열린 TCP 연결 증가를 알아차릴 수 있습니다. 이 연결은 시간이 지남에 따라 누적되고 제대로 닫히지 않습니다.
이 문제는 GitLab에서 연결 풀링을 위해 Faraday 어댑터가 net_http에서 typhoeus로 전환된 것과 관련이 있습니다.
자세한 내용은 이슈 550805를 참조하세요.
이 문제를 해결하려면
elasticsearch_client_adapter를 net_http로 설정합니다.
