当前位置:   article > 正文

解决flume SyslogTCP 日志长度超限问题_syslog tcp丢失

syslog tcp丢失

日志采集之前一直使用的是syslogUDP的方式,因为采集的是网络流量日志,所以对于日志数量丢失没有太在意,一次偶然的对数发现syslogUDP方式丢包太过严重,经排查发现使用rsyslog方式发送UDP报文时除去头部,body长度超过1472字节时会被截断,于是flume采集时拦截器进行json校验不通过。
解决方案:牺牲性能,换syslogTCP
更换syslogTCP后进行测试时,发送较长报文,tcpdump抓包有数据,kafka中无数据,推测flume采集出错,查看flume日志发现如下信息:

2021-12-22 10:55:07,672 WARN org.apache.flume.source.SyslogUtils: Event size larger than specified event size: 2500. You should consider increasing your event size.
2021-12-22 10:55:07,673 WARN org.apache.flume.source.SyslogUtils: Event created from Invalid Syslog data.
  • 1
  • 2

日志长度超过2500字节,flume提示无效数据
查看flume对应org.apache.flume.source.SyslogUtils源码:

public static final Integer MIN_SIZE = 10;
public static final Integer DEFAULT_SIZE = 2500;
  • 1
  • 2

指定默认最小长度为10,最大长度为2500
查找报错长度超限的校验逻辑:

if (isBadEvent) {
        logger.warn("Event created from Invalid Syslog data.");
        headers.put(EVENT_STATUS, SyslogStatus.INVALID.getSyslogStatus());
      } else if (isIncompleteEvent) {
        logger.warn("Event size larger than specified event size: {}. You should " +
            "consider increasing your event size.", maxSize);
        headers.put(EVENT_STATUS, SyslogStatus.INCOMPLETE.getSyslogStatus());
      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

当event size大于maxSize时会有如上日志输出
查看maxSize的指定:

private Integer maxSize;
  • 1

maxSize为私有属性

public SyslogUtils(Integer eventSize, Set<String> keepFields, boolean isUdp, Clock clock) {
    this.isUdp = isUdp;
    this.clock = clock;
    isBadEvent = false;
    isIncompleteEvent = false;
    maxSize = (eventSize < MIN_SIZE) ? MIN_SIZE : eventSize;
    baos = new ByteArrayOutputStream(eventSize);
    this.keepFields = keepFields;
    initHeaderFormats();
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在构造器中判断eventSize与MIN_SIZE大小,eventSize为传入参数
同时存在setEventSize方法被SyslogTcpSource与SyslogUdpSource类所引用

public void setEventSize(Integer eventSize) {
    this.maxSize = eventSize;
  }
  • 1
  • 2
  • 3

判断eventSize为配置文件中可指定参数,查看flume官网关于syslogTCP参数列表:
在这里插入图片描述
指定参数:

a1.sources.r1.eventSize = 5000
  • 1

重启flume,问题解决

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/640263
推荐阅读
相关标签
  

闽ICP备14008679号