记一次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日志并进行多维度分析。
相关文章
|
1月前
|
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...
|
1月前
|
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-...
|
1月前
|
JSON Java 数据格式
微服务框架(十三)Spring Boot Logstash日志采集
  本文为Spring Boot中Log4j2对接Logstash,进行日志采集。Logstah只支持log4j,使用log4j2时需要通过TCP插件调用 此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
|
9月前
|
存储 数据采集 安全
通过filebeat、logstash、rsyslog采集nginx日志的几种方式
由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志。
318 0
|
8月前
|
存储 NoSQL Redis
容器部署日志分析平台ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
容器部署日志分析平台ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
249 0
|
8月前
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
115 0
|
1月前
|
监控 应用服务中间件 nginx
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G
70 4
|
1月前
|
数据采集 监控 数据可视化
日志解析神器——Logstash中的Grok过滤器使用详解
日志解析神器——Logstash中的Grok过滤器使用详解
87 4
|
1月前
|
Linux
利用Logstash实现GrayLog日志转发到第三方日志平台
利用Logstash实现GrayLog日志转发到第三方日志平台
69 0
|
10月前
|
存储 消息中间件 JSON
统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合
统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合。
452 0