3.3. ログアラートのトラブルシューティング
次の手順を使用して、クラスター上のログアラートのトラブルシューティングを行うことができます。
3.3.1. Elasticsearch クラスターの健全性ステータスが赤になっている
1 つ以上のプライマリーシャードとそのレプリカがノードに割り当てられません。このアラートのトラブルシューティングを行うには、次の手順を使用します。
このドキュメントの一部のコマンドは、$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 クラスターの健全性をチェックし、クラスターの
status
の色が赤であることを確認します。$ 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 使用率の詳細は、Red Hat OpenShift Service on AWS ドキュメントの「モニタリングダッシュボードの確認」を参照してください。
3.3.2. Elasticsearch クラスターの正常性が黄色である
1 つ以上のプライマリーシャードのレプリカシャードがノードに割り当てられません。ClusterLogging
カスタムリソース (CR) の nodeCount
値を調整して、ノード数を増やします。
3.3.3. Elasticsearch ノードのディスクの最低水準点に達した
Elasticsearch は、最低水準点に達するノードにシャードを割り当てません。
このドキュメントの一部のコマンドは、$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
次のコマンドを実行して、未割り当てのシャードがあるかどうかを確認します。
$ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \ -- es_util --query=_cluster/health?pretty | grep unassigned_shards
未割り当てのシャードがある場合は、次のコマンドを実行して、各ノードのディスク容量を確認します。
$ 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% を超える場合は、ノードは低基準値を超えており、シャードがこのノードに割り当てられなくなります。
現在の
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 は、高基準値に達したノードから、基準値のしきい値制限を超えていないディスク使用量の低いノードにシャードを再配置しようとします。
シャードを特定のノードに割り当てるには、そのノード上のスペースを解放する必要があります。ディスク容量を増やすことができない場合は、新しいデータノードをクラスターに追加するか、クラスターの合計冗長性ポリシーを減らしてみてください。
このドキュメントの一部のコマンドは、$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
コマンド出力にシャードの再配置が示されている場合は、最高水準点を超えています。最高水準点のデフォルト値は 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 は、両条件が含まれるすべてのインデックスに対して読み取り専用のインデックスブロックを強制的に適用します。
- 1 つ以上のシャードがノードに割り当てられます。
- 1 つ以上のディスクが いっぱいの段階 を超えています。
このアラートのトラブルシューティングを行うには、次の手順を使用します。
このドキュメントの一部のコマンドは、$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 ノードの Java 仮想マシン (JVM) ヒープメモリーの使用量が 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 ファイル記述子 のドキュメントの説明に従って、各ノードの max_file_descriptors
の値を確認します。