记一次Logstash日志丢失问题

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 大量的json解析错误,根据日志情况分析,原因是日志数据传输到logstash之后被截断成了多条数据,于是有的数据就解析异常了,自然无法正常到归集到es的索引文档中。

某系统日志架构是在项目中通过配置logback.xml配置双写


  • 写本地日志文件
  • 写到远程logstash


本地没有问题,有问题是logstash,在Kibana上看到有些日志没显示。


开始是怀疑是不是日志丢了,由于使用的是LogstashTcpSocketAppender


查了下官文文档:


Internally, the TCP appenders are asynchronous (using the LMAX Disruptor RingBuffer).All the encoding and TCP communication is delegated to a single writer thread.There is no need to wrap the TCP appenders with another asynchronous appender (such as AsyncAppender or LoggingEventAsyncDisruptorAppender).


The TCP appenders will never block the logging thread. If the RingBuffer is full (e.g. due to slow network, etc), then events will be dropped.


我得到了以下信息:

  • LogstashTcpSocketAppender和 logback的的异步appender的行为是类似的,也就是说,它也是异步的。
  • 使用LogstashTcpSocketAppender ,不需要再外面再包裹任何Logback的appender
  • RingBuffer满了,日志会丢失


关于最后一点,只需修改配置就可以。根据源码看默认是8192 单位是B。且是2的幂次方


<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <ringBufferSize>1048576</ringBufferSize>


然而这并没有解决问题,于是仔细看了下logstash的日志,发现有大量的json解析错误,根据日志情况分析,原因是日志数据传输到logstash之后被截断成了多条数据,于是有的数据就解析异常了,自然无法正常到归集到es的索引文档中。


知道原因后解决起来就有思路了,查了一下logstash的配置:


tcp {
    port => 5001
    type => applogs
    codec => json
  }


原因就是codec写的是json的问题,应该用json_lines。


对于日志很长的json,应该使用json_lines格式,否则会被截断成多条且解析错误。


tcp {
    port => 5001
    type => applogs
    codec => json_lines
  }
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8月前
|
Java 应用服务中间件 nginx
微服务框架(二十九)Logstash Nginx 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Nginx 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3...
|
8月前
|
Dubbo Java 应用服务中间件
微服务框架(三十)Logstash Kong 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Kong 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3-...
|
2月前
|
存储 监控 安全
|
2月前
|
存储 JSON 监控
开源日志分析Logstash
【10月更文挑战第22天】
67 1
|
6月前
|
SQL JSON 数据处理
5% 消耗,6 倍性能:揭秘新一代 iLogtail SPL 日志处理引擎与 Logstash 的 PK
在本文中,我们将深入探讨为何选择 iLogtail,以及它在 SPL 数据处理方面相较于 Logstash 有何独特优势。通过对比这两款工具的架构、性能以及功能,我们希望能够揭示 iLogtail 如何在日益复杂的日志处理需求中脱颖而出,帮助您做出明智的技术选择。
40474 23
|
5月前
|
消息中间件 监控 Kafka
Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
【8月更文挑战第13天】Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
271 3
|
5月前
|
数据可视化 应用服务中间件 Apache
优化集中式日志记录的方法:添加 Logstash 过滤器
优化集中式日志记录的方法:添加 Logstash 过滤器
76 1
|
8月前
|
监控 应用服务中间件 nginx
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G
501 4
|
8月前
|
数据采集 监控 数据可视化
日志解析神器——Logstash中的Grok过滤器使用详解
日志解析神器——Logstash中的Grok过滤器使用详解
595 4
|
8月前
|
Linux
利用Logstash实现GrayLog日志转发到第三方日志平台
利用Logstash实现GrayLog日志转发到第三方日志平台
168 0