搜索

3.3. 日志记录警报故障排除

download PDF

您可以使用以下步骤排除集群中的日志记录警报。

3.3.1. Elasticsearch 集群健康状态为红色

至少一个主分片及其副本没有分配给节点。使用以下步骤对此警报进行故障排除。

提示

本文档中的一些命令会使用 $ES_POD_NAME shell 变量来引用 Elasticsearch pod。如果要直接从本文档中复制并粘贴命令,您必须将此变量设置为对 Elasticsearch 集群有效的值。

您可以运行以下命令来列出可用的 Elasticsearch pod:

$ oc -n openshift-logging get pods -l component=elasticsearch

运行以下命令,选择列出的 pod 并设置 $ES_POD_NAME 变量:

$ export ES_POD_NAME=<elasticsearch_pod_name>

现在,您可以在命令中使用 $ES_POD_NAME 变量。

流程

  1. 运行以下命令,检查 Elasticsearch 集群健康状况并验证集群状态是否为红色:

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- health
  2. 运行以下命令,列出已加入集群的节点:

    $ oc exec -n openshift-logging -c elasticsearch $ES_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 $ES_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 $ES_POD_NAME \
      -- es_util --query=_cat/recovery?active_only=true

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

  6. 运行以下命令并查看输出,检查是否有待处理的任务:

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- health | grep number_of_pending_tasks
  7. 如果有待处理的任务,请监控其状态。如果它们的状态发生变化,并且表示集群正在恢复,请继续等待。恢复时间因集群大小和其它因素而异。否则,如果待处理任务的状态没有改变,这表示恢复已停止。
  8. 如果恢复似乎已停止,请运行以下命令检查 cluster.routing.allocation.enable 值设置为 none,然后观察输出:

    $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
      -- es_util --query=_cluster/settings?pretty
  9. 如果 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"}}'
  10. 运行以下命令并查看输出,检查任何索引仍然是红色的:

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

    1. 运行以下命令来清除缓存:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name>/_cache/clear?pretty
    2. 运行以下命令来增加最大分配重试次数:

      $ 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}'
    3. 运行以下命令来删除所有滚动项:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=_search/scroll/_all -X DELETE
    4. 运行以下命令来增加超时:

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

    1. 运行以下命令来识别红色索引名称:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=_cat/indices?v
    2. 运行以下命令来删除红色索引:

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

    1. 运行以下命令,检查 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 Heap 使用量。

    2. 检查高 CPU 使用率。有关 CPU utilitzation 的更多信息,请参阅 OpenShift Dedicated "查看监控仪表板" 文档。

3.3.2. Elasticsearch 集群健康状态黄色

至少一个主分片的副本分片没有分配给节点。通过调整 ClusterLogging 自定义资源 (CR) 中的 nodeCount 值来增加节点数。

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

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

提示

本文档中的一些命令会使用 $ES_POD_NAME shell 变量来引用 Elasticsearch pod。如果要直接从本文档中复制并粘贴命令,您必须将此变量设置为对 Elasticsearch 集群有效的值。

您可以运行以下命令来列出可用的 Elasticsearch pod:

$ oc -n openshift-logging get pods -l component=elasticsearch

运行以下命令,选择列出的 pod 并设置 $ES_POD_NAME 变量:

$ export ES_POD_NAME=<elasticsearch_pod_name>

现在,您可以在命令中使用 $ES_POD_NAME 变量。

流程

  1. 运行以下命令,识别在其上部署 Elasticsearch 的节点:

    $ oc -n openshift-logging get po -o wide
  2. 运行以下命令,检查是否有未分配的分片:

    $ oc exec -n openshift-logging -c elasticsearch $ES_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. 在命令输出中,检查 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%,则节点已超过低水位线,并且分片无法再分配给此节点。

  5. 要检查当前的 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 值并保存这个更改。

  6. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 运行以下命令,检查 Elasticsearch 上所有索引的状态:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 确定可以删除的旧索引。
    3. 运行以下命令来删除索引:

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

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

Elasticsearch 会尝试将分片从达到高水位线的节点重新定位到磁盘使用率较低且未超过任何水位线阈值的节点。

要将分片分配给特定节点,您必须释放该节点上的一些空间。如果无法增加磁盘空间,请尝试向集群添加新数据节点,或者减少集群冗余策略总数。

提示

本文档中的一些命令会使用 $ES_POD_NAME shell 变量来引用 Elasticsearch pod。如果要直接从本文档中复制并粘贴命令,您必须将此变量设置为对 Elasticsearch 集群有效的值。

您可以运行以下命令来列出可用的 Elasticsearch pod:

$ oc -n openshift-logging get pods -l component=elasticsearch

运行以下命令,选择列出的 pod 并设置 $ES_POD_NAME 变量:

$ export ES_POD_NAME=<elasticsearch_pod_name>

现在,您可以在命令中使用 $ES_POD_NAME 变量。

流程

  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 $ES_POD_NAME \
      -- es_util --query=_cluster/health?pretty | grep relocating_shards

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

  4. 增加所有节点上的磁盘空间。如果无法增加磁盘空间,请尝试向集群添加新数据节点,或者减少集群冗余策略总数。
  5. 要检查当前的 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 值并保存这个更改。

  6. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 运行以下命令,检查 Elasticsearch 上所有索引的状态:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 确定可以删除的旧索引。
    3. 运行以下命令来删除索引:

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

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

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

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

使用以下步骤对此警报进行故障排除。

提示

本文档中的一些命令会使用 $ES_POD_NAME shell 变量来引用 Elasticsearch pod。如果要直接从本文档中复制并粘贴命令,您必须将此变量设置为对 Elasticsearch 集群有效的值。

您可以运行以下命令来列出可用的 Elasticsearch pod:

$ oc -n openshift-logging get pods -l component=elasticsearch

运行以下命令,选择列出的 pod 并设置 $ES_POD_NAME 变量:

$ export ES_POD_NAME=<elasticsearch_pod_name>

现在,您可以在命令中使用 $ES_POD_NAME 变量。

流程

  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. 在命令输出中,检查 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

  3. 增加所有节点上的磁盘空间。如果无法增加磁盘空间,请尝试向集群添加新数据节点,或者减少集群冗余策略总数。
  4. 要检查当前的 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 值并保存这个更改。

  5. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 运行以下命令,检查 Elasticsearch 上所有索引的状态:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 确定可以删除的旧索引。
    3. 运行以下命令来删除索引:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME \
        -- es_util --query=<elasticsearch_index_name> -X DELETE
  6. 继续释放和监控磁盘空间。在使用的磁盘空间低于 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}'

3.3.6. Elasticsearch JVM 堆使用率很高

使用的 Elasticsearch 节点 Java 虚拟机(JVM)堆内存超过 75%。考虑增大堆大小

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

节点上的系统 CPU 使用率高。检查集群节点的 CPU。考虑向节点分配更多 CPU 资源。

3.3.8. Elasticsearch 进程 CPU 为高

节点上的 Elasticsearch 进程 CPU 使用率很高。检查集群节点的 CPU。考虑向节点分配更多 CPU 资源。

3.3.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. 在命令输出中,检查 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

  3. 增加所有节点上的磁盘空间。如果无法增加磁盘空间,请尝试向集群添加新数据节点,或者减少集群冗余策略总数。
  4. 要检查当前的 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 值并保存这个更改。

  5. 如果前面的步骤没有解决这个问题,请删除旧的索引。

    1. 运行以下命令,检查 Elasticsearch 上所有索引的状态:

      $ oc exec -n openshift-logging -c elasticsearch $ES_POD_NAME -- indices
    2. 确定可以删除的旧索引。
    3. 运行以下命令来删除索引:

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

3.3.10. Elasticsearch FileDescriptor 使用是高

根据当前的使用趋势,预计节点上的文件描述符数量不足。检查每个节点的 max_file_descriptors 值,如 Elasticsearch File Descriptors 文档中所述。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.