• log4j2 输入日志到flume


    最近想将服务的运行日志收集起来,首先了解到flume技术栈

    采用flume方案定了之后有两种方式实现

    1: 在应用中,log4j2直接发送日志信息到flume ,

    2: 通过监控log4j2 产生的日志文件,将日志文件新产生的日志发送到flume

    下面两种方式都会介绍,首先透漏下我们选择的解决方案,我们选择了第二种监控新产生的日志文件

    为什么这么选择:

    第一种方式需要修改服务中log4j2的配置,添加flume Appender , 在应用中,当日志输出时,就会输出到flume,很显然,这种方式耦合了应用,并且对应用的性能有影响,到底有多大影响,这个还没有测试,其次,这种方式应用中依赖了flume的依赖,假如将来部署服务的时候不想收集日志了,会不会对项目的启动有影响,这一点也还没有验证,后续可能会验证

    第二种方式完全是监控日志文件,当产生新的日志文件或者日志文件中生成新的日志时,就会触发日志收集。完全脱离应用存在。

    我们介绍第二种方式的探索过程:
    需求:当日志目录下产生新的文件或动态产生日志时,收集日志,发送到flume

    接下来了解flume能不能解决我们的需求:

    flume 入门相关概念:

    source:

    channel:

    sink ;

    source 中有很多分类,我们着重分析了几个的使用场景和特点

    execSource :

    spooldirSource :

    taildirSource:

    syslogSource ;

    httpSource ;

    经过分析每种Source的特点,很容易发现tailSource最接近我们的需求:

    但是也有几个问题:

    1:log4j2产生日志的逻辑是当日志文件内容达到设置的size上限就会重命名该日志文件(例如:sysware-2018-12-20-1.log),然后新建一个sysware.log文件,供日志输出,重命名日志之后,和原来的sysware.log日志文件全路径不一致,taildirSource会当做一个新的日志文件,再次重复读取,造成重复读取的问题

    2:dirSource监控的dir 可以指定文件名称或者通过正则,但是如果已经有子文件夹的日志读取不到

    上面的问题只能通过源码方式解决了

    XXXXXX

    所有的准备工作都做好了,我们现在开始做一个demo

    XXXX

  • 相关阅读:
    面试
    二叉树- 二叉树直径
    排序算法
    JAVA编程
    JAVA编程
    JAVA中break和continue的区别
    HTTP的序列化和反序列化
    PL/SQL基础
    G. Game Design
    hdu 6703 array
  • 原文地址:https://www.cnblogs.com/wenq001/p/10151238.html
Copyright © 2020-2023  润新知