16.5. 关键警报故障排除
16.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。
16.5.2. Elasticsearch Cluster Health 为黄色
至少一个主分片的副本分片没有分配给节点。
故障排除
-
通过调整
ClusterLogging
CR 中的nodeCount
来增加节点数。
其他资源
- 集群日志记录自定义资源(CR)
- 为日志存储配置持久性存储
- 在 Elasticsearch 中搜索 "Free up or increase disk space",Fix a red or yellow cluster status。
16.5.3. 已达到 Elasticsearch 节点磁盘低水位线
Elasticsearch 不将分片分配给达到低水位线的节点。
故障排除
识别要在其上部署 Elasticsearch 的节点。
oc -n openshift-logging get po -o wide
检查是否有
未分配的分片
。oc exec -n openshift-logging -c elasticsearch <elasticsearch_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
检查
nodes.node_name.fs
字段,以确定该节点上的可用磁盘空间。如果使用的磁盘百分比超过 85%,则节点已超过低水位线,并且分片无法再分配给此节点。
- 尝试增加所有节点上的磁盘空间。
- 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
如果添加新数据节点有问题,请减少集群冗余策略总数。
检查当前的
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}'
-
如果集群
redundancyPolicy
大于SingleRedundancy
,将其设置为SingleRedundancy
并保存这个更改。
如果前面的步骤没有解决这个问题,请删除旧的索引。
检查 Elasticsearch 上所有索引的状态。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
- 确定可以删除的旧索引。
删除索引。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE
其他资源
-
在 About the Cluster Logging custom resource 的 "Sample
ClusterLogging
custom resource (CR)" 中搜索 "redundancyPolicy"
16.5.4. 已达到 Elasticsearch 节点磁盘高水位线
Elasticsearch 会尝试从已达到高水位线的节点中重新定位分片。
故障排除
识别要在其上部署 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 <elasticsearch_pod_name> -- es_util --query=_cluster/health?pretty | grep relocating_shards
如果命令输出显示重新定位分片,则代表超过了高水位线(High Watermark)。High Watermark 的默认值为 90%。
分片重新定位到磁盘使用率较低且未超过任何水位线阈值的节点。
- 若要将分片分配到特定节点,请释放一些空间。
- 尝试增加所有节点上的磁盘空间。
- 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
如果添加新数据节点有问题,请减少集群冗余策略总数。
检查当前的
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}'
-
如果集群
redundancyPolicy
大于SingleRedundancy
,将其设置为SingleRedundancy
并保存这个更改。
如果前面的步骤没有解决这个问题,请删除旧的索引。
检查 Elasticsearch 上所有索引的状态。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
- 确定可以删除的旧索引。
删除索引。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE
其他资源
-
在 About the Cluster Logging custom resource 的 "Sample
ClusterLogging
custom resource (CR)" 中搜索 "redundancyPolicy"
16.5.5. 已达到 Elasticsearch 节点磁盘的洪水水位线
Elasticsearch 在每个具有这两个条件的索引中强制使用只读索引块:
- 为节点分配一个或多个分片。
- 一个个或多个磁盘超过 flood stage。
故障排除
检查 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
字段,以确定该节点上的可用磁盘空间。- 如果使用的磁盘百分比超过 95%,这表明该节点已跨过洪水水位线。对于在此特定节点上分配的分片,写入被阻止。
- 尝试增加所有节点上的磁盘空间。
- 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
如果添加新数据节点有问题,请减少集群冗余策略总数。
检查当前的
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}'
-
如果集群
redundancyPolicy
大于SingleRedundancy
,将其设置为SingleRedundancy
并保存这个更改。
如果前面的步骤没有解决这个问题,请删除旧的索引。
检查 Elasticsearch 上所有索引的状态。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
- 确定可以删除的旧索引。
删除索引。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE
继续释放和监控磁盘空间,直到使用的磁盘空间下降到 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}'
其他资源
-
在 About the Cluster Logging custom resource 的 "Sample
ClusterLogging
custom resource (CR)" 中搜索 "redundancyPolicy"
16.5.6. Elasticsearch JVM 堆使用率是高
使用的 Elasticsearch 节点 JVM Heap 内存超过 75%。
故障排除
考虑增大堆大小。
16.5.7. 聚合日志记录系统 CPU 为高
节点上的系统 CPU 使用率高。
故障排除
检查集群节点的 CPU。考虑向节点分配更多 CPU 资源。
16.5.8. Elasticsearch 进程 CPU 为高
节点上的 Elasticsearch 进程 CPU 使用率很高。
故障排除
检查集群节点的 CPU。考虑向节点分配更多 CPU 资源。
16.5.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
-
在命令输出中,检查
nodes.node_name.fs
字段以确定该节点上的可用磁盘空间。 - 尝试增加所有节点上的磁盘空间。
- 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
如果添加新数据节点有问题,请减少集群冗余策略总数。
检查当前的
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}'
-
如果集群
redundancyPolicy
大于SingleRedundancy
,将其设置为SingleRedundancy
并保存这个更改。
如果前面的步骤没有解决这个问题,请删除旧的索引。
检查 Elasticsearch 上所有索引的状态。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
- 确定可以删除的旧索引。
删除索引。
oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE
其他资源
-
在 About the Cluster Logging custom resource 的 "Sample
ClusterLogging
custom resource (CR)" 中搜索 "redundancyPolicy" - 在关于 Elasticsearch 警报规则中搜索 "Elasticsearch DiskSpaceRunningLow"。
- 在 Elasticsearch 中搜索 "Free up or increase disk space",Fix a red or yellow cluster status。
16.5.10. Elasticsearch FileDescriptor 使用为高
根据当前的使用趋势,预计节点上的文件描述符数量不足。
故障排除
检查并根据需要为每个节点配置 max_file_descriptors
的值,如 Elasticsearch 文件描述符主题中所述。
其他资源
- 在关于 Elasticsearch 警报规则中搜索 "Elasticsearch HighFileDescriptorUsage"。
- 在 OpenShift Logging 仪表板中搜索 "File Descriptors In Use"。