3.3. 로깅 경고 문제 해결
다음 절차를 사용하여 클러스터의 로깅 경고 문제를 해결할 수 있습니다.
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
변수를 사용할 수 있습니다.
프로세스
Elasticsearch 클러스터 상태를 확인하고 다음 명령을 실행하여 클러스터
상태가
빨간색인지 확인합니다.$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- health
다음 명령을 실행하여 클러스터에 참여한 노드를 나열합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cat/nodes?v
다음 명령을 실행하여 Elasticsearch Pod를 나열하고 이전 단계의 명령 출력의 노드와 비교합니다.
$ oc -n openshift-logging get pods -l component=elasticsearch
일부 Elasticsearch 노드가 클러스터에 참여하지 않은 경우 다음 단계를 수행합니다.
다음 명령을 실행하고 출력을 관찰하여 Elasticsearch에 선택한 마스터 노드가 있는지 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cat/master?v
다음 명령을 실행하고 출력을 관찰하여 선택한 마스터 노드의 Pod 로그를 검토합니다.
$ oc logs <elasticsearch_master_pod_name> -c elasticsearch -n openshift-logging
다음 명령을 실행하고 출력을 관찰하여 클러스터에 참여하지 않은 노드의 로그를 확인합니다.
$ oc logs <elasticsearch_node_name> -c elasticsearch -n openshift-logging
모든 노드가 클러스터에 참여한 경우 다음 명령을 실행하고 출력을 관찰하여 클러스터가 복구 프로세스 중인지 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cat/recovery?active_only=true
명령 출력이 없는 경우 복구 프로세스가 보류 중인 작업에서 지연되거나 중단될 수 있습니다.
다음 명령을 실행하고 출력을 관찰하여 보류 중인 작업이 있는지 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- health | grep number_of_pending_tasks
- 보류 중인 작업이 있는 경우 상태를 모니터링합니다. 상태가 변경되고 클러스터가 복구 중임을 나타내는 경우 계속 대기합니다. 복구 시간은 클러스터의 크기와 기타 요인에 따라 다릅니다. 그렇지 않으면 보류 중인 작업의 상태가 변경되지 않는 경우 복구가 중지되었음을 나타냅니다.
복구가 중단된 것처럼 보이면 다음 명령을 실행하고 출력을 관찰하여
cluster.routing.allocation.enable
값이none
으로 설정되어 있는지 확인합니다.$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cluster/settings?pretty
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"}}'
다음 명령을 실행하고 출력을 관찰하여 인덱스가 빨간색인지 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cat/indices?v
인덱스가 빨간색이면 다음 단계를 수행하여 지웁니다.
다음 명령을 실행하여 캐시를 지웁니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=<elasticsearch_index_name>/_cache/clear?pretty
다음 명령을 실행하여 최대 할당 재시도 횟수를 늘립니다.
$ 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}'
다음 명령을 실행하여 스크롤 항목을 모두 삭제합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_search/scroll/_all -X DELETE
다음 명령을 실행하여 시간 초과를 늘립니다.
$ 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"}'
이전 단계에서 빨간색 인덱스를 지우지 않으면 인덱스를 개별적으로 삭제합니다.
다음 명령을 실행하여 빨간색 인덱스 이름을 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cat/indices?v
다음 명령을 실행하여 빨간색 인덱스를 삭제합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=<elasticsearch_red_index_name> -X DELETE
빨간색 인덱스가 없고 클러스터 상태가 빨간색이면 데이터 노드에서 지속적으로 처리 로드가 높은지 확인합니다.
다음 명령을 실행하여 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 힙 사용량을 확인합니다.- 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
변수를 사용할 수 있습니다.
프로세스
다음 명령을 실행하여 Elasticsearch가 배포된 노드를 식별합니다.
$ oc -n openshift-logging get po -o wide
다음 명령을 실행하여 할당되지 않은 shard가 있는지 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cluster/health?pretty | grep unassigned_shards
할당되지 않은 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
명령 출력에서
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를 할당할 수 없습니다.
현재
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
값으로 설정하고 이 변경 사항을 저장합니다.이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.
다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
- 삭제할 수 있는 이전 인덱스를 확인합니다.
다음 명령을 실행하여 인덱스를 삭제합니다.
$ 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
변수를 사용할 수 있습니다.
프로세스
다음 명령을 실행하여 Elasticsearch가 배포된 노드를 식별합니다.
$ oc -n openshift-logging get po -o wide
각 노드의 디스크 공간을 확인합니다.
$ 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
클러스터가 재조정 중인지 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cluster/health?pretty | grep relocating_shards
명령 출력에 shard 재배치가 표시되면 높은 워터마크가 초과되었습니다. 높은 워터마크의 기본값은 90%입니다.
- 모든 노드의 디스크 공간을 늘립니다. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가하거나 총 클러스터 중복 정책을 줄입니다.
현재
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
값으로 설정하고 이 변경 사항을 저장합니다.이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.
다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
- 삭제할 수 있는 이전 인덱스를 확인합니다.
다음 명령을 실행하여 인덱스를 삭제합니다.
$ 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
변수를 사용할 수 있습니다.
프로세스
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
명령 출력에서
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
- 모든 노드의 디스크 공간을 늘립니다. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가하거나 총 클러스터 중복 정책을 줄입니다.
현재
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
값으로 설정하고 이 변경 사항을 저장합니다.이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.
다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
- 삭제할 수 있는 이전 인덱스를 확인합니다.
다음 명령을 실행하여 인덱스를 삭제합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=<elasticsearch_index_name> -X DELETE
디스크 공간을 계속 확보하고 모니터링합니다. 사용된 디스크 공간이 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시간 이내에 디스크 공간이 부족해질 것으로 예상됩니다. 다음 절차에 따라 이 경고 문제를 해결합니다.
프로세스
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
명령 출력에서
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
- 모든 노드의 디스크 공간을 늘립니다. 디스크 공간을 늘릴 수 없는 경우 클러스터에 새 데이터 노드를 추가하거나 총 클러스터 중복 정책을 줄입니다.
현재
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
값으로 설정하고 이 변경 사항을 저장합니다.이전 단계에서 문제가 해결되지 않으면 이전 인덱스를 삭제합니다.
다음 명령을 실행하여 Elasticsearch의 모든 인덱스의 상태를 확인합니다.
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
- 삭제할 수 있는 이전 인덱스를 확인합니다.
다음 명령을 실행하여 인덱스를 삭제합니다.
$ 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
값을 확인합니다.