InfoGrab Docs

Elasticsearch 액세스 문제 해결

요약

Elasticsearch 액세스로 작업할 때 다음 문제가 발생할 수 있습니다. Rails 콘솔 세션 시작을 참조하세요. 사용 가능한 모든 속성을 나열하려면: 출력에는 elasticsearch_indexing, elasticsearch_url, elasticsearch_replicas, elasticsearch_pause_indexing 등 Elasticsearch 통합에서 사용 가능한 모든 설정이 포함됩니다.

Elasticsearch 액세스로 작업할 때 다음 문제가 발생할 수 있습니다.

Rails 콘솔에서 구성 설정#

Rails 콘솔 세션 시작을 참조하세요.

속성 나열#

사용 가능한 모든 속성을 나열하려면:

  1. Rails 콘솔을 엽니다 (sudo gitlab-rails console).
  2. 다음 명령을 실행합니다:
ApplicationSetting.last.attributes

출력에는 elasticsearch_indexing, elasticsearch_url, elasticsearch_replicas, elasticsearch_pause_indexingElasticsearch 통합에서 사용 가능한 모든 설정이 포함됩니다.

속성 설정#

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 통합 문제를 파악하는 데 가장 유용한 도구 중 하나는 로그입니다. 이 통합과 관련된 가장 관련성 높은 로그는 다음과 같습니다:

  1. sidekiq.log - 모든 인덱싱은 Sidekiq에서 이루어지므로 Elasticsearch 통합에 관련된 로그 대부분이 이 파일에 있습니다.
  2. 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_adapternet_http로 설정합니다.

Elasticsearch 액세스 문제 해결

Tier: Premium, Ultimate
Offering: GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

Elasticsearch 액세스로 작업할 때 다음 문제가 발생할 수 있습니다. Rails 콘솔 세션 시작을 참조하세요. 사용 가능한 모든 속성을 나열하려면: 출력에는 elasticsearch_indexing, elasticsearch_url, elasticsearch_replicas, elasticsearch_pause_indexing 등 Elasticsearch 통합에서 사용 가능한 모든 설정이 포함됩니다.

Elasticsearch 액세스로 작업할 때 다음 문제가 발생할 수 있습니다.

Rails 콘솔에서 구성 설정#

Rails 콘솔 세션 시작을 참조하세요.

속성 나열#

사용 가능한 모든 속성을 나열하려면:

  1. Rails 콘솔을 엽니다 (sudo gitlab-rails console).
  2. 다음 명령을 실행합니다:
ApplicationSetting.last.attributes

출력에는 elasticsearch_indexing, elasticsearch_url, elasticsearch_replicas, elasticsearch_pause_indexingElasticsearch 통합에서 사용 가능한 모든 설정이 포함됩니다.

속성 설정#

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 통합 문제를 파악하는 데 가장 유용한 도구 중 하나는 로그입니다. 이 통합과 관련된 가장 관련성 높은 로그는 다음과 같습니다:

  1. sidekiq.log - 모든 인덱싱은 Sidekiq에서 이루어지므로 Elasticsearch 통합에 관련된 로그 대부분이 이 파일에 있습니다.
  2. 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_adapternet_http로 설정합니다.