首页 > 技术文章 > Flink使用logback记录日志并告警

createweb 2019-09-30 17:11 原文

任务运行中的日志记录下来是相当有必要的,而当我们想要查看输入的日志并不是一件简单的事情,尽管可以在flink ui上看logs和stdout,一旦日志量变大,这样查看会异常的恶心。

flink conf中提供了log4j和logback配置文件,默认情况下使用的是log4j,因为log4j不支持公司邮箱的认证方式,所以在这里选用优秀的logback。

在lib文件夹下是没有logback依赖jar包的,所以需要增加

logback-access-1.2.3.jar

logback-classic-1.2.3.jar

logback-core-1.2.3.jar

mail-1.4.7.jar

然后修改conf下logback-console.xml  logback.xml logback-yarn.xml 三个文件

主要是增加 发邮件的appender

<!-- 邮件发送的appender -->
<appender name="Email" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>smtp.partner.outlook.cn</smtpHost>
<smtpPort>587</smtpPort>
<username>xx@xx.com</username>
<password></password>
<asynchronousSending>false</asynchronousSending>
<SSL>false</SSL>
<STARTTLS>true</STARTTLS>
<to>xx@xx.com</to>
<from>xx@xx.com</from>
<subject>flink异常邮件</subject>
<!-- html格式 -->
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<Pattern>%date%level%thread%logger{0}%line%message</Pattern>
</layout>
     <!-- 这里采用等级过滤器 指定等级相符才发送 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
</filter>
<!-- 每个电子邮件只发送40个日志条目 -->
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>40</bufferSize>
</cyclicBufferTracker>
</appender>

 

<root level="INFO">
     <appender-ref ref="Email"/>
</root>

这样flink配置就完成了。

另外需要去掉conf目录下log4j.properties文件,不然slf4j可能绑定到log4j

在开发应用的时候,如果想要记录日志信息,需要添加slf4j和logback依赖并排除log4j的依赖(切记),那么记录的error信息,就直接会发到配置的邮箱

正常来说,偶尔几个错误发出来完成没有问题,但是一旦出现比较严重的错误,比如某个组件出现了故障,那么在实时任务中需要发出来的邮件可能就有数十万,很有可能将公司邮箱打爆。

基于这种情况,将buffersize调大能起到一定作用,但是解决不了根本,可以参考我的另一篇文章 Flink日志接入ELK 根本性的解决这个问题。

 

 

 

推荐阅读