flume+log4j收集日志

来源:互联网 发布:汪东城cos知乎 编辑:程序博客网 时间:2024/05/03 20:18

单节点

flume只有一个单节点时,如果通过log4j发送指定到端口收集数据。

   <!-- 目前使用集群模式 http://blog.csdn.net/hyx1990/article/details/49453271 -->

         <appendername="test" class="org.apache.flume.clients.log4jappender.Log4jAppender"> 

             <!-- 定义控制台日志级别入口--> 

             <param name="Hostname"value="172.20.1.106"/> 

             <param name="Port"value="6505"/>

             <param name="UnsafeMode"value="true"/>

        <param name="BufferSize"value="8192"/>

                   <paramname="ImmediateFlush" value="false"/>

                   <paramname="BufferedIO" value="true"/>               

             <layoutclass="org.apache.log4j.PatternLayout"> 

                 <paramname="ConversionPattern" value="%m" /> 

            </layout>

             <filterclass="org.apache.log4j.varia.LevelRangeFilter">  

           <param name="LevelMin" value="FATAL" />  

           <param name="LevelMax" value="FATAL" />  

       </filter>  

         </appender>

缺点:如果失败flume节点出现故障,会出现数据丢失,当然这种情况也可以从写日志的程序进行缓存处理。

 

flume集群

Flume采用集群的方式,但是这种情况会有很多问题,这里引用一个高手的测试情况:

http://blog.csdn.net/wsscy2004/article/details/18765491?utm_source=tuicool&utm_medium=referral

最后按照上面高手的。我们把对应的类打了一个jar包。这样就可以使用自定义的log4j的类

<appender name="test"class="org.apache.flume.clients.log4jappender.FailoverLog4jAppender">

               <param name="Hosts"value="datanode1:6505datanode2:6505 datanode3:6505"/>

               <param name="MaxAttempts"value="3"/>

        <layout class="org.apache.log4j.PatternLayout">

            <param name="ConversionPattern" value="%m"/>

        </layout>

    </appender>

     <appender name="asyncTest" class="org.apache.log4j.AsyncAppender">

           <param name="Blocking" value="false"/>

           <param name="BufferSize" value="500"/>

           <filter class="org.apache.log4j.varia.LevelRangeFilter">  

                     <param name="LevelMin"value="FATAL" />  

                     <param name="LevelMax"value="FATAL" />  

                </filter>

           <appender-ref ref="test"/>

       </appender>

但是需要很多依赖的jar

 

针对具体的某个类采用这种方式。(只收集特定的信息到flume中)

<logger name="com.sanshi.Test"additivity="true">       

       <level value="info" />  

       <appender-ref ref="asyncTest"/>       

    </logger>

 

0 0