12.5. 关键警报故障排除


12.5.1. Elasticsearch Cluster Health 是红色

至少一个主分片及其副本没有分配给节点。

故障排除

  1. 检查 Elasticsearch 集群健康状态,并验证集群的 status 是否为红色。

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- health
  2. 列出已加入集群的节点。

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/nodes?v
  3. 列出 Elasticsearch Pod,并将它们与上一步中命令输出中的节点进行比较。

    oc -n openshift-logging get pods -l component=elasticsearch
  4. 如果某些 Elasticsearch 节点没有加入集群,请执行以下步骤。

    1. 确认 Elasticsearch 已选定 control plane 节点。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/master?v
    2. 检查所选 control plane 节点的 pod 日志问题。

      oc logs <elasticsearch_master_pod_name> -c elasticsearch -n openshift-logging
    3. 检查尚未加入集群的节点日志。

      oc logs <elasticsearch_node_name> -c elasticsearch -n openshift-logging
  5. 如果所有节点都加入集群,请执行以下步骤,检查集群是否正在进行恢复。

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/recovery?active_only=true

    如果没有命令输出,恢复过程可能会因为待处理的任务而延迟或停止。

  6. 检查是否有待处理的任务。

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- health |grep  number_of_pending_tasks
  7. 如果有待处理的任务,请监控其状态。

    如果它们的状态发生变化,并且表示集群正在恢复,请继续等待。恢复时间因集群大小和其它因素而异。

    否则,如果待处理任务的状态没有改变,这表示恢复已停止。

  8. 如果恢复似乎已停止,请检查 cluster.routing.allocation.enable 是否设置为 none

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cluster/settings?pretty
  9. 如果 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"}}'
  10. 检查哪些索引仍然是红色的。

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/indices?v
  11. 如果有任何索引仍然是红色的,请尝试通过执行以下步骤清除它们。

    1. 清除缓存。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name>/_cache/clear?pretty
    2. 增加最大分配重试数。

      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}'
    3. 删除所有滚动项目。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_search/scroll/_all -X DELETE
    4. 增加超时时间。

      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"}'
  12. 如果前面的步骤没有清除红色索引,请单独删除索引。

    1. 标识红色索引名称。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/indices?v
    2. 删除红色索引。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_red_index_name> -X DELETE
  13. 如果没有红色索引且集群状态为红色,请在数据节点上检查是否有连续重量处理负载。

    1. 检查 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 使用量。

    2. 检查高 CPU 使用率。

其他资源

12.5.2. Elasticsearch Cluster Health 为黄色

至少一个主分片的副本分片没有分配给节点。

故障排除

  1. 通过调整 ClusterLogging CR 中的 nodeCount 来增加节点数。

其他资源

12.5.3. 已达到 Elasticsearch 节点磁盘低水位线

Elasticsearch 不将分片分配给达到低水位线的节点。

故障排除

  1. 识别要在其上部署 Elasticsearch 的节点。

    oc -n openshift-logging get po -o wide
  2. 检查是否有未分配的分片

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cluster/health?pretty | grep unassigned_shards
  3. 如果存在未分配的分片,请检查每个节点上的磁盘空间。

    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
  4. 检查 nodes.node_name.fs 字段,以确定该节点上的可用磁盘空间。

    如果使用的磁盘百分比超过 85%,则节点已超过低水位线,并且分片无法再分配给此节点。

  5. 尝试增加所有节点上的磁盘空间。
  6. 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
  7. 如果添加新数据节点有问题,请减少集群冗余策略总数。

    1. 检查当前的 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}'
    2. 如果集群 redundancyPolicy 大于 SingleRedundancy,将其设置为 SingleRedundancy 并保存这个更改。
  8. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 检查 Elasticsearch 上所有索引的状态。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 确定可以删除的旧索引。
    3. 删除索引。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE

其他资源

12.5.4. 已达到 Elasticsearch 节点磁盘高水位线

Elasticsearch 会尝试从已达到高水位线的节点中重新定位分片。

故障排除

  1. 识别要在其上部署 Elasticsearch 的节点。

    oc -n openshift-logging get po -o wide
  2. 检查每个节点上的磁盘空间。

    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
  3. 检查集群是否重新平衡。

    oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cluster/health?pretty | grep relocating_shards

    如果命令输出显示重新定位分片,则代表超过了高水位线(High Watermark)。High Watermark 的默认值为 90%。

    分片重新定位到磁盘使用率较低且未超过任何水位线阈值的节点。

  4. 若要将分片分配到特定节点,请释放一些空间。
  5. 尝试增加所有节点上的磁盘空间。
  6. 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
  7. 如果添加新数据节点有问题,请减少集群冗余策略总数。

    1. 检查当前的 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}'
    2. 如果集群 redundancyPolicy 大于 SingleRedundancy,将其设置为 SingleRedundancy 并保存这个更改。
  8. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 检查 Elasticsearch 上所有索引的状态。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 确定可以删除的旧索引。
    3. 删除索引。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE

其他资源

12.5.5. 已达到 Elasticsearch 节点磁盘的洪水水位线

Elasticsearch 在每个具有这两个条件的索引中强制使用只读索引块:

  • 为节点分配一个或多个分片。
  • 一个个或多个磁盘超过 flood stage

故障排除

  1. 检查 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 字段,以确定该节点上的可用磁盘空间。

  2. 如果使用的磁盘百分比超过 95%,这表明该节点已跨过洪水水位线。对于在此特定节点上分配的分片,写入被阻止。
  3. 尝试增加所有节点上的磁盘空间。
  4. 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
  5. 如果添加新数据节点有问题,请减少集群冗余策略总数。

    1. 检查当前的 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}'
    2. 如果集群 redundancyPolicy 大于 SingleRedundancy,将其设置为 SingleRedundancy 并保存这个更改。
  6. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 检查 Elasticsearch 上所有索引的状态。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 确定可以删除的旧索引。
    3. 删除索引。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE
  7. 继续释放和监控磁盘空间,直到使用的磁盘空间下降到 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}'

其他资源

12.5.6. Elasticsearch JVM 堆使用率是高

使用的 Elasticsearch 节点 JVM Heap 内存超过 75%。

故障排除

考虑增大堆大小

12.5.7. 聚合日志记录系统 CPU 为高

节点上的系统 CPU 使用率高。

故障排除

检查集群节点的 CPU。考虑向节点分配更多 CPU 资源。

12.5.8. Elasticsearch 进程 CPU 为高

节点上的 Elasticsearch 进程 CPU 使用率很高。

故障排除

检查集群节点的 CPU。考虑向节点分配更多 CPU 资源。

12.5.9. Elasticsearch 磁盘空间现为低

根据当前的磁盘使用情况,Elasticsearch 集群预计在以后的 6 小时内会耗尽磁盘空间。

故障排除

  1. 获取 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
  2. 在命令输出中,检查 nodes.node_name.fs 字段以确定该节点上的可用磁盘空间。
  3. 尝试增加所有节点上的磁盘空间。
  4. 如果无法增加磁盘空间,请尝试向集群添加新数据节点。
  5. 如果添加新数据节点有问题,请减少集群冗余策略总数。

    1. 检查当前的 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}'
    2. 如果集群 redundancyPolicy 大于 SingleRedundancy,将其设置为 SingleRedundancy 并保存这个更改。
  6. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 检查 Elasticsearch 上所有索引的状态。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- indices
    2. 确定可以删除的旧索引。
    3. 删除索引。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=<elasticsearch_index_name> -X DELETE

其他资源

12.5.10. Elasticsearch FileDescriptor 使用为高

根据当前的使用趋势,预计节点上的文件描述符数量不足。

故障排除

检查并根据需要为每个节点配置 max_file_descriptors 的值,如 Elasticsearch 文件描述符主题中所述。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.