12.5. 关键警报故障排除
12.5.1. Elasticsearch Cluster Health 是红色
至少一个主分片及其副本没有分配给节点。
故障排除
检查 Elasticsearch 集群健康状态,并验证集群的
status
是否为红色。oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- health
列出已加入集群的节点。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/nodes?v
列出 Elasticsearch Pod,并将它们与上一步中命令输出中的节点进行比较。
oc -n openshift-logging get pods -l component=elasticsearch
如果某些 Elasticsearch 节点没有加入集群,请执行以下步骤。
确认 Elasticsearch 已选定 control plane 节点。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/master?v
检查所选 control plane 节点的 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 <elasticsearch_pod_name> -- es_util --query=_cat/recovery?active_only=true
如果没有命令输出,恢复过程可能会因为待处理的任务而延迟或停止。
检查是否有待处理的任务。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- health |grep number_of_pending_tasks
如果有待处理的任务,请监控其状态。
如果它们的状态发生变化,并且表示集群正在恢复,请继续等待。恢复时间因集群大小和其它因素而异。
否则,如果待处理任务的状态没有改变,这表示恢复已停止。
如果恢复似乎已停止,请检查
cluster.routing.allocation.enable
是否设置为none
。oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cluster/settings?pretty
如果
cluster.routing.allocation.enable
设为none
,请将它设置为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"}}'
检查哪些索引仍然是红色的。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/indices?v
如果有任何索引仍然是红色的,请尝试通过执行以下步骤清除它们。
清除缓存。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name>/_cache/clear?pretty
增加最大分配重试数。
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}'
删除所有滚动项目。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_search/scroll/_all -X DELETE
增加超时时间。
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"}'
如果前面的步骤没有清除红色索引,请单独删除索引。
标识红色索引名称。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/indices?v
删除红色索引。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_red_index_name> -X DELETE
如果没有红色索引且集群状态为红色,请在数据节点上检查是否有连续重量处理负载。
检查 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 Heap 使用量。- 检查高 CPU 使用率。
其他资源
- 在 Elasticsearch 中搜索 "Free up or increase disk space",Fix a red or yellow cluster status。