错误信息表明 Kibana 在尝试操作 .kibana_alerting_cases 索引时,等待索引状态变为绿色(green)超时。这通常表示 Elasticsearch 集群的健康状态不足以满足 Kibana 的要求,可能是由于以下原因:

  1. 集群健康状态为 yellowred

    • yellow: 索引的副本分片未分配完全,但主分片可用。
    • red: 主分片不可用,导致索引不可用。
  2. 分片未分配或节点故障

    • 部分分片可能因为磁盘空间不足、网络问题或节点离线而无法分配。
  3. 迁移问题

    • Kibana 升级过程中,.kibana_alerting_cases 索引可能处于迁移状态,但集群未满足迁移条件。

解决步骤

1. 检查集群健康状态

首先,检查 Elasticsearch 集群的健康状态:

bash
curl -u elastic:your_password -X GET "http://localhost:9200/_cluster/health?pretty"
  • 结果示例

    json
    { "cluster_name": "elasticsearch", "status": "yellow", "timed_out": false, "number_of_nodes": 3, "number_of_data_nodes": 2, "active_primary_shards": 100, "active_shards": 150, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 5 }
  • 如果 statusyellowred

    • yellow: 表示副本分片未分配完全。
    • red: 表示主分片不可用,需要立即处理。

2. 检查未分配的分片

检查哪些分片未分配及原因:

bash
curl -u elastic:your_password -X GET "http://localhost:9200/_cat/shards?v&pretty"

查找 .kibana_alerting_cases 索引的分片分配情况:

bash
curl -u elastic:your_password -X GET "http://localhost:9200/_cat/shards/.kibana_alerting_cases*?v&pretty"

如果有未分配的分片(状态为 UNASSIGNED),可以进一步检查原因:

bash
curl -u elastic:your_password -X GET "http://localhost:9200/_cluster/allocation/explain?pretty"

3. 处理未分配分片的问题

  • 解决 yellow 状态:添加节点或调整副本数量
    如果集群只有一个节点,副本分片无法分配会导致状态为 yellow。你可以调整索引的副本数量为 0

    bash
    curl -u elastic:your_password -X PUT "http://localhost:9200/.kibana_alerting_cases_8.15.3_001/_settings" -H 'Content-Type: application/json' -d '{ "index": { "number_of_replicas": 0 } }'
  • 解决 red 状态:恢复主分片
    如果主分片不可用,可能需要手动分配分片:

    bash
    curl -u elastic:your_password -X POST "http://localhost:9200/_cluster/reroute" -H 'Content-Type: application/json' -d '{ "commands": [ { "allocate_stale_primary": { "index": ".kibana_alerting_cases_8.15.3_001", "shard": 0, "node": "node_name", "accept_data_loss": true } } ] }'

4. 验证索引状态

确保 .kibana_alerting_cases 索引的状态变为 green

bash
curl -u elastic:your_password -X GET "http://localhost:9200/_cluster/health/.kibana_alerting_cases_8.15.3_001?pretty"

5. 检查磁盘空间

如果磁盘空间不足,分片可能无法分配。检查磁盘使用情况:

bash
curl -u elastic:your_password -X GET "http://localhost:9200/_cat/allocation?v&pretty"
  • 如果某个节点的磁盘使用率超过了 Elasticsearch 的限制(默认 85%),可能需要清理旧数据或扩容磁盘。

6. 增加 Kibana 超时时间

如果索引状态需要较长时间才能恢复,增加 Kibana 等待超时时间: 在 kibana.yml 文件中添加以下内容:

yaml
elasticsearch.requestTimeout: 90000 # 默认是 30 秒

7. 重启 Kibana

完成修复后,重启 Kibana 并检查日志:

bash
docker-compose restart kibana docker-compose logs -f kibana

总结

  • 确保 Elasticsearch 集群的状态为 green
  • 检查未分配的分片并修复问题。
  • 调整磁盘空间和副本配置以优化集群状态。
  • 如果索引迁移超时,增加 Kibana 的超时时间。

点赞(367) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部