当前位置: 首页 > news >正文

Kibana中突然看不到日志ElasticSearch突然采集不到日志问题解决分析

问题原因

  • 起因之前我们项目是采用elk(elasticsearch+logstash+kibana)的方式下部署日志采集系统,今天突然发现Kibana中所有项目日志都没打印,更奇怪的是线上的项目都正常运行,并无异常,这时让人陷入了深思,难道是因为logstash没有收集到日志,去看了logstash日志,都是正常,而且正在以1000/s的行的速度疯狂输出。此时人已经彻底傻掉!
    在这里插入图片描述

问题排查

  1. 首先排查所有服务是否正常,如:elasticsearch logstash kibana 和项目服务

  2. 排查磁盘是否已经打满

  3. 检查当前 elasticsearch 设置的索引数量是多少,7.x默认【1000】在Dev Tools控制台中,执行以下Elasticsearch Cat API命令:

GET /_cluster/settings?include_defaults=true
  1. 检查索引是否已经打满,在Dev Tools控制台中,执行以下Elasticsearch Cat API命令:
GET /_cat/indices?v
  1. 查询得知索引数量已经为1000,发现了问题删掉几月前没用的索引,先恢复日志

修改索引数量

  1. 这里暂时修改10000,大家根据自己的需求修改
  2. 请注意,您使用的是transient关键字,这意味着设置是临时的,将在Elasticsearch重启后丢失。如果您希望设置在重启后仍然生效,应该使用persistent关键字代替transient。
  3. transient 临时修改
PUT /_cluster/settings
{"transient": {"cluster": {"max_shards_per_node": 1000}}
}
  1. persistent 方式修改
PUT /_cluster/settings
{"persistent": {"cluster": {"max_shards_per_node": 1000}}
}

虽然现象问题解决了,但是本质问题依旧存在。

  • 思考几个问题:

  • shard能达到1000,那未来是不是会到达10000,导致出现同样的问题?
    为了避免这样的问题再次出现,那就要控制shard的数量,那么shard的数量和什么有关系?
    如何控制shard的数量?

首先,回答第一个问题,先要搞清楚,什么是shard?

  • 分片是 Elasticsearch 在集群中分发数据的关键。

  • 把分片想象成数据的容器。文档存储在分片中,然后分片分配到集群中的节点上。当集群扩容或缩小,Elasticsearch 将会自动在节点间迁移分片,以使集群保持平衡。
    一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。

  • 这类似于 MySql 的分库分表,只不过 Mysql 分库分表需要借助第三方组件而 ES 内部自身实现了此功能。

  • 默认情况下,一个索引被分配 5 个主分片

  • 可以看到,分片的数量和索引的数量是成正比的,也就是说索引越多,分片越多;再结合我们ES的实际配置,索引命名方式:环境+日期,环境是固定的,但是日期是每天增加的,那么索引每天都会增加,也就是说分片的数量也会随着时间推移,逐日增加,直到达到最大索引。

  • 所以,针对第一个问题,即使最大分片数是10000,也会出现同样的问题。

那么如何控制shard数量呢?

  • 其实控制shard数量,就是控制索引的数量,控制索引的数量,就是控制保存的log的数量,而log的数量可以通过控制保存的日志有效期天数来决定。

解决方案【修改logstash.conf】

  • 原来的logstash.conf配置文件
# 输入环境配置
input {tcp {mode => "server"host => "0.0.0.0"port => 4560codec => json_lines}
}# 输出环境配置
output {# 输出到控制台stdout {codec => rubydebug}elasticsearch {hosts => "es:9200"user => "elastic"password => "bmallelasticsearch"index => "logstash-%{[spring.application.name]}-%{+YYYY.MM.dd}"}
}
  • 上面这里logstash配置文件中日志是按照【年月日】成索引,我这里根据【月份】成索引。
# 输入环境配置
input {tcp {mode => "server"host => "0.0.0.0"port => 4560codec => json_lines}
}# 输出环境配置
output {# 输出到控制台stdout {codec => rubydebug}elasticsearch {hosts => "es:9200"user => "elastic"password => "bmallelasticsearch"index => "logstash-%{[spring.application.name]}-%{+YYYY.MM}"}
}

相关文章:

  • Ubuntu24.04 安装ssh开启22端口及允许root用户远程登录
  • 记录一次学习--委派攻击学习
  • Ubuntu以及ROS的一些方便设置及使用
  • H.264与H.265
  • Protobuf vs Thrift: 高性能序列化框架的对比与分析
  • 消息队列常见面试题总结
  • Linux复习--系统管理类(权限优化、备份策略、RAID、资源查看、启动流程、系统优化)
  • 灵当CRM index.php接口SQL注入漏洞复现 [附POC]
  • [uni-app]小兔鲜-02项目首页
  • 菱形继承、菱形虚拟继承、菱形继承中多态问题、菱形虚拟继承中多态问题
  • 2024外研社综合能力大赛第一场真题
  • 【redis-02】深入理解redis中RBD和AOF的持久化
  • 数据科学基石:解析属性类型体系——从标称到比率,全面洞察数据分类机制
  • 快速开发拍卖平台,成品源码如何满足你的需求?
  • python测试开发---前后端交互Axios
  • __proto__ 和 prototype的关系
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ECMAScript入门(七)--Module语法
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Javascript 原型链
  • JavaScript-Array类型
  • JS基础之数据类型、对象、原型、原型链、继承
  • miaov-React 最佳入门
  • Otto开发初探——微服务依赖管理新利器
  • python docx文档转html页面
  • Redis 中的布隆过滤器
  • spring boot下thymeleaf全局静态变量配置
  • SpriteKit 技巧之添加背景图片
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 翻译--Thinking in React
  • 分布式熔断降级平台aegis
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 温故知新之javascript面向对象
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • zabbix3.2监控linux磁盘IO
  • ​Java并发新构件之Exchanger
  • ​补​充​经​纬​恒​润​一​面​
  • ### RabbitMQ五种工作模式:
  • #Linux(权限管理)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (07)Hive——窗口函数详解
  • (175)FPGA门控时钟技术
  • (js)循环条件满足时终止循环
  • (PADS学习)第二章:原理图绘制 第一部分
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (苍穹外卖)day03菜品管理
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (十一)图像的罗伯特梯度锐化
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .Net 4.0并行库实用性演练
  • .net 7和core版 SignalR
  • .net core使用ef 6