12.5. 심각한 경고 문제 해결

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

하나 이상의 기본 shard와 해당 복제본이 노드에 할당되지 않습니다.

문제 해결

  1. Elasticsearch 클러스터 상태를 확인하고 클러스터 status가 빨간색인지 확인합니다.

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- health
  2. 클러스터에 참여한 노드를 나열합니다.

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_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 <elasticsearch_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 <elasticsearch_pod_name> -- es_util --query=_cat/recovery?active_only=true

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

  6. 보류 중인 작업이 있는지 확인합니다.

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- health |grep  number_of_pending_tasks
  7. 보류 중인 작업이 있는 경우 상태를 모니터링합니다.

    상태가 변경되고 클러스터가 복구 중임을 나타내는 경우 계속 대기합니다. 복구 시간은 클러스터의 크기와 기타 요인에 따라 다릅니다.

    그렇지 않으면 보류 중인 작업의 상태가 변경되지 않는 경우 복구가 중지되었음을 나타냅니다.

  8. 복구가 중단된 것처럼 보이는 경우 cluster.routing.allocation.enablenone으로 설정되어 있는지 확인합니다.

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cluster/settings?pretty
  9. cluster.routing.allocation.enablenone으로 설정되어 있으면 all로 설정합니다.

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_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 <elasticsearch_pod_name> -- es_util --query=_cat/indices?v
  11. 인덱스가 빨간색이면 다음 단계를 수행하여 지웁니다.

    1. 캐시를 지웁니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name>/_cache/clear?pretty
    2. 최대 할당 재시도 횟수를 늘립니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_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 <elasticsearch_pod_name> -- es_util --query=_search/scroll/_all -X DELETE
    4. 시간 제한을 늘립니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_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 <elasticsearch_pod_name> -- es_util --query=_cat/indices?v
    2. 빨간색 인덱스를 삭제합니다.

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

    1. Elasticsearch JVM 힙 사용량이 높은지 확인합니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_nodes/stats?pretty

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

    2. CPU 사용률이 높은지 확인합니다.

추가 리소스

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

하나 이상의 기본 shard의 복제본 shard는 노드에 할당되지 않습니다.

문제 해결

  1. ClusterLogging CR에서 nodeCount를 조정하여 노드 수를 늘립니다.

12.5.3. Elasticsearch 노드 디스크 Low Watermark Reached

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

문제 해결

  1. Elasticsearch가 배포된 노드를 식별합니다.

    oc -n openshift-logging get po -o wide
  2. unassigned shards가 있는지 확인합니다.

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_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. nodes.node_name.fs 필드를 확인하여 해당 노드에서 사용 가능한 디스크 공간을 확인합니다.

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

  5. 모든 노드의 디스크 공간을 늘리십시오.
  6. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가해 보십시오.
  7. 새 데이터 노드를 추가하는 데 문제가 있는 경우 전체 클러스터 중복 정책을 줄입니다.

    1. 현재 redundancyPolicy를 확인합니다.

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

      ClusterLogging CR을 사용하는 경우 다음을 입력합니다.

      oc -n openshift-logging get cl -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'
    2. 클러스터 redundancyPolicySingleRedundancy 보다 큰 경우 SingleRedundancy로 설정하고 이러한 변경 사항을 저장합니다.
  8. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 인덱스를 삭제합니다.

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

추가 리소스

12.5.4. Elasticsearch 노드 디스크 High Watermark Reached

Elasticsearch는 높은 워터마크에 도달한 노드에서 shard를 재배치하려고 합니다.

문제 해결

  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 <elasticsearch_pod_name> -- es_util --query=_cluster/health?pretty | grep relocating_shards

    명령 출력에 shard 재배치가 표시되면 High QCOWmark가 초과된 것입니다. High QCOWmark의 기본값은 90%입니다.

    shard는 워터마크 임계값 제한을 넘지 않은 디스크 사용량이 낮은 노드로 재배치됩니다.

  4. 특정 노드에 shard를 할당하려면 일부 공간을 확보합니다.
  5. 모든 노드의 디스크 공간을 늘리십시오.
  6. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가해 보십시오.
  7. 새 데이터 노드를 추가하는 데 문제가 있는 경우 전체 클러스터 중복 정책을 줄입니다.

    1. 현재 redundancyPolicy를 확인합니다.

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

      ClusterLogging CR을 사용하는 경우 다음을 입력합니다.

      oc -n openshift-logging get cl -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'
    2. 클러스터 redundancyPolicySingleRedundancy 보다 큰 경우 SingleRedundancy로 설정하고 이러한 변경 사항을 저장합니다.
  8. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 인덱스를 삭제합니다.

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

추가 리소스

12.5.5. Elasticsearch 노드 디스크 Flood Watermark Reached

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

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

문제 해결

  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

    nodes.node_name.fs 필드를 확인하여 해당 노드에서 사용 가능한 디스크 공간을 확인합니다.

  2. 사용된 디스크 백분율이 95%를 초과하면 노드가 플러드 워터마크를 초과했음을 나타냅니다. 이 특정 노드에 할당된 shard에 대해 쓰기가 차단됩니다.
  3. 모든 노드의 디스크 공간을 늘리십시오.
  4. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가해 보십시오.
  5. 새 데이터 노드를 추가하는 데 문제가 있는 경우 전체 클러스터 중복 정책을 줄입니다.

    1. 현재 redundancyPolicy를 확인합니다.

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

      ClusterLogging CR을 사용하는 경우 다음을 입력합니다.

      oc -n openshift-logging get cl -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'
    2. 클러스터 redundancyPolicySingleRedundancy 보다 큰 경우 SingleRedundancy로 설정하고 이러한 변경 사항을 저장합니다.
  6. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 인덱스를 삭제합니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE
  7. 사용된 디스크 공간이 90% 미만으로 줄어들 때까지 디스크 공간을 계속 확보하고 모니터링합니다. 그런 다음 이 특정 노드에 대한 쓰기 차단을 해제합니다.

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

추가 리소스

12.5.6. Elasticsearch JVM 힙 사용량이 높음

사용된 Elasticsearch 노드 JVM 힙 메모리는 75% 이상입니다.

문제 해결

힙 크기를 늘리는 것이 좋습니다.

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

노드의 시스템 CPU 사용량이 높습니다.

문제 해결

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

12.5.8. Elasticsearch 프로세스 CPU가 높음

노드의 Elasticsearch 프로세스 CPU 사용량이 높습니다.

문제 해결

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

12.5.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. 명령 출력에서 nodes.node_name.fs 필드를 확인하여 해당 노드의 사용 가능한 디스크 공간을 확인합니다.
  3. 모든 노드의 디스크 공간을 늘리십시오.
  4. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가해 보십시오.
  5. 새 데이터 노드를 추가하는 데 문제가 있는 경우 전체 클러스터 중복 정책을 줄입니다.

    1. 현재 redundancyPolicy를 확인합니다.

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

      ClusterLogging CR을 사용하는 경우 다음을 입력합니다.

      oc -n openshift-logging get cl -o jsonpath='{.items[*].spec.logStore.elasticsearch.redundancyPolicy}'
    2. 클러스터 redundancyPolicySingleRedundancy 보다 큰 경우 SingleRedundancy로 설정하고 이러한 변경 사항을 저장합니다.
  6. 이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.

    1. Elasticsearch의 모든 인덱스의 상태를 확인합니다.

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 삭제할 수 있는 이전 인덱스를 확인합니다.
    3. 인덱스를 삭제합니다.

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

추가 리소스

12.5.10. Elasticsearch FileDescriptor 사용량이 높음

현재 사용 추세를 기준으로 노드의 예상 파일 설명자 수가 충분하지 않습니다.

문제 해결

Elasticsearch 파일 설명자 항목에 설명된 대로 필요에 따라 각 노드의 max_file_descriptors 값을 확인하고 필요한 경우 구성합니다.

추가 리소스