$ oc -n openshift-logging get pods -l component=elasticsearch
至少一个主分片及其副本未分配给节点。请使用以下步骤来排除此警报的故障。
本文档中的一些命令使用 您可以通过运行以下命令列出可用的Elasticsearch pod:
选择列出的pod之一,并通过运行以下命令设置
您现在可以在命令中使用 |
通过运行以下命令检查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的“查看监控仪表板”文档。
Elasticsearch不会将分片分配到达到低水位线的节点。
本文档中的一些命令使用 您可以通过运行以下命令列出可用的Elasticsearch pod:
选择列出的pod之一,并通过运行以下命令设置
您现在可以在命令中使用 |
通过运行以下命令识别部署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
Elasticsearch 尝试将分片从达到高水位线的节点迁移到磁盘使用率低的且未超过任何水位线阈值的节点。
要将分片分配到特定节点,必须释放该节点上的部分空间。如果无法增加磁盘空间,请尝试向集群添加新的数据节点,或降低集群总冗余策略。
本文档中的一些命令使用 您可以通过运行以下命令列出可用的Elasticsearch pod:
选择列出的pod之一,并通过运行以下命令设置
您现在可以在命令中使用 |
通过运行以下命令识别部署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
Elasticsearch 对每个同时满足以下两个条件的索引强制执行只读索引块
一个或多个分片已分配到该节点。
一个或多个磁盘超过了洪水阶段。
使用以下步骤来排查此警报。
本文档中的一些命令使用 您可以通过运行以下命令列出可用的Elasticsearch pod:
选择列出的pod之一,并通过运行以下命令设置
您现在可以在命令中使用 |
获取 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}'
Elasticsearch 节点 Java 虚拟机 (JVM) 堆内存使用率超过 75%。请考虑增加堆大小。
根据当前磁盘使用情况,预测 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
根据当前使用趋势,节点上预测的文件描述符数量不足。检查每个节点的max_file_descriptors
值,如 Elasticsearch 文件描述符文档中所述。