Menu Close

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 已选定 master 节点。

      oc exec -n openshift-logging -c elasticsearch <elasticsearch_pod_name> -- es_util --query=_cat/master?v
    2. 检查所选 master 节点的 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 使用率。

其他资源