검색

3.3. 로깅 경고 문제 해결

download PDF

다음 절차를 사용하여 클러스터의 로깅 경고 문제를 해결할 수 있습니다.

3.3.1. Elasticsearch 클러스터 상태가 빨간색

하나 이상의 기본 shard와 해당 복제본이 노드에 할당되지 않습니다. 다음 절차에 따라 이 경고 문제를 해결합니다.

작은 정보

이 문서의 일부 명령은 $ES_POD_NAME 쉘 변수를 사용하여 Elasticsearch Pod를 참조합니다. 이 문서에서 직접 명령을 복사하여 붙여넣려면 이 변수를 Elasticsearch 클러스터에 유효한 값으로 설정해야 합니다.

다음 명령을 실행하여 사용 가능한 Elasticsearch Pod를 나열할 수 있습니다.

$ oc -n openshift-logging get pods -l component=elasticsearch

나열된 Pod 중 하나를 선택하고 다음 명령을 실행하여 $ES_POD_NAME 변수를 설정합니다.

$ export ES_POD_NAME=<elasticsearch_pod_name>

이제 명령에 $ES_POD_NAME 변수를 사용할 수 있습니다.

프로세스

  1. Elasticsearch 클러스터 상태를 확인하고 다음 명령을 실행하여 클러스터 상태가 빨간색인지 확인합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- health
  2. 다음 명령을 실행하여 클러스터에 참여한 노드를 나열합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cat/nodes?v
  3. 다음 명령을 실행하여 Elasticsearch Pod를 나열하고 이전 단계의 명령 출력의 노드와 비교합니다.

    $ oc -n openshift-logging get pods -l component=elasticsearch
  4. 일부 Elasticsearch 노드가 클러스터에 참여하지 않은 경우 다음 단계를 수행합니다.

    1. 다음 명령을 실행하고 출력을 관찰하여 Elasticsearch에 선택한 마스터 노드가 있는지 확인합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=_cat/master?v
    2. 다음 명령을 실행하고 출력을 관찰하여 선택한 마스터 노드의 Pod 로그를 검토합니다.

      $ oc logs <elasticsearch_master_pod_name> -c elasticsearch -n openshift-logging
    3. 다음 명령을 실행하고 출력을 관찰하여 클러스터에 참여하지 않은 노드의 로그를 확인합니다.

      $ oc logs <elasticsearch_node_name> -c elasticsearch -n openshift-logging
  5. 모든 노드가 클러스터에 참여한 경우 다음 명령을 실행하고 출력을 관찰하여 클러스터가 복구 프로세스 중인지 확인합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cat/recovery?active_only=true

    명령 출력이 없는 경우 복구 프로세스가 보류 중인 작업에서 지연되거나 중단될 수 있습니다.

  6. 다음 명령을 실행하고 출력을 관찰하여 보류 중인 작업이 있는지 확인합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- health | grep number_of_pending_tasks
  7. 보류 중인 작업이 있는 경우 상태를 모니터링합니다. 상태가 변경되고 클러스터가 복구 중임을 나타내는 경우 계속 대기합니다. 복구 시간은 클러스터의 크기와 기타 요인에 따라 다릅니다. 그렇지 않으면 보류 중인 작업의 상태가 변경되지 않는 경우 복구가 중지되었음을 나타냅니다.
  8. 복구가 중단된 것처럼 보이면 다음 명령을 실행하고 출력을 관찰하여 cluster.routing.allocation.enable 값이 none 으로 설정되어 있는지 확인합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cluster/settings?pretty
  9. cluster.routing.allocation.enable 값이 none 으로 설정된 경우 다음 명령을 실행하여 all 로 설정합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cluster/settings?pretty \
      -X PUT -d '{"persistent": {"cluster.routing.allocation.enable":"all"}}'
  10. 다음 명령을 실행하고 출력을 관찰하여 인덱스가 빨간색인지 확인합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cat/indices?v
  11. 인덱스가 빨간색이면 다음 단계를 수행하여 지웁니다.

    1. 다음 명령을 실행하여 캐시를 지웁니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name>/_cache/clear?pretty
    2. 다음 명령을 실행하여 최대 할당 재시도 횟수를 늘립니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name>/_settings?pretty \
        -X PUT -d '{"index.allocation.max_retries":10}'
    3. 다음 명령을 실행하여 스크롤 항목을 모두 삭제합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=_search/scroll/_all -X DELETE
    4. 다음 명령을 실행하여 시간 초과를 늘립니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name>/_settings?pretty \
        -X PUT -d '{"index.unassigned.node_left.delayed_timeout":"10m"}'
  12. 이전 단계에서 빨간색 인덱스를 지우지 않으면 인덱스를 개별적으로 삭제합니다.

    1. 다음 명령을 실행하여 빨간색 인덱스 이름을 확인합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=_cat/indices?v
    2. 다음 명령을 실행하여 빨간색 인덱스를 삭제합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_red_index_name> -X DELETE
  13. 빨간색 인덱스가 없고 클러스터 상태가 빨간색이면 데이터 노드에서 지속적으로 처리 로드가 높은지 확인합니다.

    1. 다음 명령을 실행하여 Elasticsearch JVM 힙 사용량이 높은지 확인합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=_nodes/stats?pretty

      명령 출력에서 node_name.jvm.mem.heap_used_percent 필드를 검토하여 JVM 힙 사용량을 확인합니다.

    2. CPU 사용률이 높은지 확인합니다. CPU 활용에 대한 자세한 내용은 OpenShift Container Platform "모듈 대시보드 검토" 설명서를 참조하십시오.

3.3.2. Elasticsearch 클러스터 상태가 노란색임

하나 이상의 기본 shard의 복제본 shard는 노드에 할당되지 않습니다. ClusterLogging 사용자 정의 리소스(CR)에서 nodeCount 값을 조정하여 노드 수를 늘립니다.

3.3.3. Elasticsearch 노드 디스크 낮은 워터마크 도달

Elasticsearch는 낮은 워터마크에 도달하는 노드에 shard를 할당하지 않습니다.

작은 정보

이 문서의 일부 명령은 $ES_POD_NAME 쉘 변수를 사용하여 Elasticsearch Pod를 참조합니다. 이 문서에서 직접 명령을 복사하여 붙여넣려면 이 변수를 Elasticsearch 클러스터에 유효한 값으로 설정해야 합니다.

다음 명령을 실행하여 사용 가능한 Elasticsearch Pod를 나열할 수 있습니다.

$ oc -n openshift-logging get pods -l component=elasticsearch

나열된 Pod 중 하나를 선택하고 다음 명령을 실행하여 $ES_POD_NAME 변수를 설정합니다.

$ export ES_POD_NAME=<elasticsearch_pod_name>

이제 명령에 $ES_POD_NAME 변수를 사용할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 Elasticsearch가 배포된 노드를 식별합니다.

    $ oc -n openshift-logging get po -o wide
  2. 다음 명령을 실행하여 할당되지 않은 shard가 있는지 확인합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cluster/health?pretty | grep unassigned_shards
  3. 할당되지 않은 shard가 있는 경우 다음 명령을 실행하여 각 노드에서 디스크 공간을 확인합니다.

    $ for pod in `oc -n openshift-logging get po -l component=elasticsearch -o jsonpath='{.items[*].metadata.name}'`; \
      do echo $pod; oc -n openshift-logging exec -c elasticsearch $pod \
      -- df -h /elasticsearch/persistent; done
  4. 명령 출력에서 Use 열을 확인하여 해당 노드에서 사용된 디스크 백분율을 확인합니다.

    출력 예

    elasticsearch-cdm-kcrsda6l-1-586cc95d4f-h8zq8
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme1n1     19G  522M   19G   3% /elasticsearch/persistent
    elasticsearch-cdm-kcrsda6l-2-5b548fc7b-cwwk7
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme2n1     19G  522M   19G   3% /elasticsearch/persistent
    elasticsearch-cdm-kcrsda6l-3-5dfc884d99-59tjw
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme3n1     19G  528M   19G   3% /elasticsearch/persistent

    사용된 디스크 백분율이 85%를 초과하는 경우 노드가 낮은 워터마크를 초과하여 더 이상 이 노드에 shard를 할당할 수 없습니다.

  5. 현재 redundancyPolicy 를 확인하려면 다음 명령을 실행합니다.

    $ oc -n openshift-logging get es elasticsearch \
      -o jsonpath='{.spec.redundancyPolicy}'

    클러스터에서 ClusterLogging 리소스를 사용하는 경우 다음 명령을 실행합니다.

    $ oc -n openshift-logging get cl \
      -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'

    클러스터 redundancyPolicy 값이 SingleRedundancy 값보다 크면 SingleRedundancy 값으로 설정하고 이 변경 사항을 저장합니다.

  6. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. 다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 다음 명령을 실행하여 인덱스를 삭제합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name> -X DELETE

3.3.4. 높은 워터마크에 도달한 Elasticsearch 노드 디스크

Elasticsearch는 워터마크 임계값 제한을 초과하지 않은 디스크 사용량이 낮은 노드로 높은 워터마크에 도달한 노드에서 shard를 재배치하려고 합니다.

특정 노드에 shard를 할당하려면 해당 노드에서 일부 공간을 확보해야 합니다. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가하거나 총 클러스터 중복 정책을 줄입니다.

작은 정보

이 문서의 일부 명령은 $ES_POD_NAME 쉘 변수를 사용하여 Elasticsearch Pod를 참조합니다. 이 문서에서 직접 명령을 복사하여 붙여넣려면 이 변수를 Elasticsearch 클러스터에 유효한 값으로 설정해야 합니다.

다음 명령을 실행하여 사용 가능한 Elasticsearch Pod를 나열할 수 있습니다.

$ oc -n openshift-logging get pods -l component=elasticsearch

나열된 Pod 중 하나를 선택하고 다음 명령을 실행하여 $ES_POD_NAME 변수를 설정합니다.

$ export ES_POD_NAME=<elasticsearch_pod_name>

이제 명령에 $ES_POD_NAME 변수를 사용할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 Elasticsearch가 배포된 노드를 식별합니다.

    $ oc -n openshift-logging get po -o wide
  2. 각 노드의 디스크 공간을 확인합니다.

    $ for pod in `oc -n openshift-logging get po -l component=elasticsearch -o jsonpath='{.items[*].metadata.name}'`; \
      do echo $pod; oc -n openshift-logging exec -c elasticsearch $pod \
      -- df -h /elasticsearch/persistent; done
  3. 클러스터가 재조정 중인지 확인합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cluster/health?pretty | grep relocating_shards

    명령 출력에 shard 재배치가 표시되면 높은 워터마크가 초과되었습니다. 높은 워터마크의 기본값은 90%입니다.

  4. 모든 노드의 디스크 공간을 늘립니다. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가하거나 총 클러스터 중복 정책을 줄입니다.
  5. 현재 redundancyPolicy 를 확인하려면 다음 명령을 실행합니다.

    $ oc -n openshift-logging get es elasticsearch \
      -o jsonpath='{.spec.redundancyPolicy}'

    클러스터에서 ClusterLogging 리소스를 사용하는 경우 다음 명령을 실행합니다.

    $ oc -n openshift-logging get cl \
      -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'

    클러스터 redundancyPolicy 값이 SingleRedundancy 값보다 크면 SingleRedundancy 값으로 설정하고 이 변경 사항을 저장합니다.

  6. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. 다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 다음 명령을 실행하여 인덱스를 삭제합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name> -X DELETE

3.3.5. Elasticsearch 노드 디스크 플러드 워터마크에 도달했습니다

Elasticsearch는 이러한 두 조건을 모두 충족하는 모든 인덱스에 읽기 전용 인덱스 블록을 적용합니다.

  • 하나 이상의 shard가 노드에 할당됩니다.
  • 하나 이상의 디스크가 플러드 단계를 초과합니다.

다음 절차에 따라 이 경고 문제를 해결합니다.

작은 정보

이 문서의 일부 명령은 $ES_POD_NAME 쉘 변수를 사용하여 Elasticsearch Pod를 참조합니다. 이 문서에서 직접 명령을 복사하여 붙여넣려면 이 변수를 Elasticsearch 클러스터에 유효한 값으로 설정해야 합니다.

다음 명령을 실행하여 사용 가능한 Elasticsearch Pod를 나열할 수 있습니다.

$ oc -n openshift-logging get pods -l component=elasticsearch

나열된 Pod 중 하나를 선택하고 다음 명령을 실행하여 $ES_POD_NAME 변수를 설정합니다.

$ export ES_POD_NAME=<elasticsearch_pod_name>

이제 명령에 $ES_POD_NAME 변수를 사용할 수 있습니다.

프로세스

  1. Elasticsearch 노드의 디스크 공간을 가져옵니다.

    $ for pod in `oc -n openshift-logging get po -l component=elasticsearch -o jsonpath='{.items[*].metadata.name}'`; \
      do echo $pod; oc -n openshift-logging exec -c elasticsearch $pod \
      -- df -h /elasticsearch/persistent; done
  2. 명령 출력에서 Avail 열을 확인하여 해당 노드에서 사용 가능한 디스크 공간을 확인합니다.

    출력 예

    elasticsearch-cdm-kcrsda6l-1-586cc95d4f-h8zq8
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme1n1     19G  522M   19G   3% /elasticsearch/persistent
    elasticsearch-cdm-kcrsda6l-2-5b548fc7b-cwwk7
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme2n1     19G  522M   19G   3% /elasticsearch/persistent
    elasticsearch-cdm-kcrsda6l-3-5dfc884d99-59tjw
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme3n1     19G  528M   19G   3% /elasticsearch/persistent

  3. 모든 노드의 디스크 공간을 늘립니다. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가하거나 총 클러스터 중복 정책을 줄입니다.
  4. 현재 redundancyPolicy 를 확인하려면 다음 명령을 실행합니다.

    $ oc -n openshift-logging get es elasticsearch \
      -o jsonpath='{.spec.redundancyPolicy}'

    클러스터에서 ClusterLogging 리소스를 사용하는 경우 다음 명령을 실행합니다.

    $ oc -n openshift-logging get cl \
      -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'

    클러스터 redundancyPolicy 값이 SingleRedundancy 값보다 크면 SingleRedundancy 값으로 설정하고 이 변경 사항을 저장합니다.

  5. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. 다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 다음 명령을 실행하여 인덱스를 삭제합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name> -X DELETE
  6. 디스크 공간을 계속 확보하고 모니터링합니다. 사용된 디스크 공간이 90% 미만으로 떨어지면 다음 명령을 실행하여 이 노드에 쓰기 차단을 해제합니다.

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_all/_settings?pretty \
      -X PUT -d '{"index.blocks.read_only_allow_delete": null}'

3.3.6. Elasticsearch JVM 힙 사용량이 높음

사용된 Elasticsearch 노드 JVM(Java 가상 머신) 힙 메모리는 75% 이상입니다. 힙 크기를 늘리는 것이 좋습니다.

3.3.7. 집계된 로깅 시스템 CPU가 높음

노드의 시스템 CPU 사용량이 높습니다. 클러스터 노드의 CPU를 확인합니다. 더 많은 CPU 리소스를 노드에 할당하는 것이 좋습니다.

3.3.8. Elasticsearch 프로세스 CPU가 높음

노드의 Elasticsearch 프로세스 CPU 사용량이 높습니다. 클러스터 노드의 CPU를 확인합니다. 더 많은 CPU 리소스를 노드에 할당하는 것이 좋습니다.

3.3.9. Elasticsearch 디스크 공간이 부족합니다.

Elasticsearch는 현재 디스크 사용량에 따라 향후 6시간 이내에 디스크 공간이 부족해질 것으로 예상됩니다. 다음 절차에 따라 이 경고 문제를 해결합니다.

프로세스

  1. Elasticsearch 노드의 디스크 공간을 가져옵니다.

    $ for pod in `oc -n openshift-logging get po -l component=elasticsearch -o jsonpath='{.items[*].metadata.name}'`; \
      do echo $pod; oc -n openshift-logging exec -c elasticsearch $pod \
      -- df -h /elasticsearch/persistent; done
  2. 명령 출력에서 Avail 열을 확인하여 해당 노드에서 사용 가능한 디스크 공간을 확인합니다.

    출력 예

    elasticsearch-cdm-kcrsda6l-1-586cc95d4f-h8zq8
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme1n1     19G  522M   19G   3% /elasticsearch/persistent
    elasticsearch-cdm-kcrsda6l-2-5b548fc7b-cwwk7
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme2n1     19G  522M   19G   3% /elasticsearch/persistent
    elasticsearch-cdm-kcrsda6l-3-5dfc884d99-59tjw
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/nvme3n1     19G  528M   19G   3% /elasticsearch/persistent

  3. 모든 노드의 디스크 공간을 늘립니다. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가하거나 총 클러스터 중복 정책을 줄입니다.
  4. 현재 redundancyPolicy 를 확인하려면 다음 명령을 실행합니다.

    $ oc -n openshift-logging get es elasticsearch -o jsonpath='{.spec.redundancyPolicy}'

    클러스터에서 ClusterLogging 리소스를 사용하는 경우 다음 명령을 실행합니다.

    $ oc -n openshift-logging get cl \
      -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'

    클러스터 redundancyPolicy 값이 SingleRedundancy 값보다 크면 SingleRedundancy 값으로 설정하고 이 변경 사항을 저장합니다.

  5. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. 다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 다음 명령을 실행하여 인덱스를 삭제합니다.

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name> -X DELETE

3.3.10. Elasticsearch FileDescriptor 사용량이 높음

현재 사용 추세를 기준으로 노드의 예상 파일 설명자 수가 충분하지 않습니다. Elasticsearch File Descriptors 문서에 설명된 대로 각 노드의 max_file_descriptors 값을 확인합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.