目前在storm代码层面,捕获到的异常无法第一时间告知到开发人员,只有到最后引起显而易见的状况才会再去反查work所在服务器的日志进行问题分析,这样对后续优化代码和异常处理很不利。

但是也可以通过以下方案解决

1.通过监控埋点的方式写入Influxdb,再通过Grafana进行告警,但是会对应用和数据库造成很大的压力

2.直接通过log4j2的SMTPAppender进行邮件告警,方法比较简单,直接修改配置即可,但是告警方式比较单一,在出现大量错误的时候有可能把邮箱打爆

3.我们还可以借助KafkaAppender将日志异步写入到kafka,进入kafka后,我们消费消息根据级别进行短信,电话,邮件,企微等多样化告警,另一方面还可以将日志汇总落地存储(比如es),便于后续处理。这种方式需要其他应用端主动接入,消费端统一处理

第三种方式直接在log4j2/work.xml文件中增加配置

<appenders>
<Kafka name="kafkaLog" topic="topic" ignoreExceptions="false">
<PatternLayout pattern="应用名称_|_[%p]_|_%logger_|_%d{YYYY-MM-dd HH:mm:ss,SSS}_|_%m%n"/>
<Property name="bootstrap.servers">kafka地址</Property>
<Property name="max.block.ms">2000</Property>
</Kafka> <RollingFile name="failoverKafkaLog" fileName="/data/log/storm/failoverKafka/request.log" filePattern="/data/log/storm/failoverKafka/request.%d{yyyy-MM-dd}.log">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>storm_|_[%p]_|_%logger_|_%d{YYYY-MM-dd HH:mm:ss,SSS}_|_%m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile> <Failover name="Failover" primary="kafkaLog" retryIntervalSeconds="60">
<Failovers>
<AppenderRef ref="failoverKafkaLog"/>
</Failovers>
</Failover> </appenders>
<loggers>
<AsyncLogger name="com.xxx" level="INFO" additivity="false">
<appender-ref ref="Failover"/>
</AsyncLogger> <root level="warn"> <!-- We log everything -->
<appender-ref ref="kafkaLog"/>
</root>
</loggers>

测试环境测试:

1.书写storm程序,将接收到的消息,直接通过log输出

2.客户端生产一条消息 bin/kafka-console-producer.sh --broker-list xx.xx.xx.xx:9092  --topic canal-test

3.客户端消费日志topic  bin/kafka-console-consumer.sh --bootstrap-server xx.xx.xx.xx:9092  --topic stormlog

参考地址:http://logging.apache.org/log4j/2.x/manual/appenders.html#KafkaAppender

最新文章

  1. 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  2. 使用James搭建一个自己的邮箱服务器
  3. SQLite安装、编译与应用
  4. [转]LINQ之路系列博客导航
  5. 【前端开发系列】—— CSS3属性选择器总结
  6. FHS目录配置下,常见的几个问题及解答
  7. Linux下用arptables防arp攻击
  8. Android:修改版本
  9. linux内核书籍
  10. HDU 1718 Rank counting sort解法
  11. asp.net 中使用不同的数据源绑定gridview
  12. unity3d游戏开发——新手引导
  13. php 文件操作之抓取网站图片
  14. WinForm 小程序 NotePad
  15. VIEWCONTROLLER的启动流程
  16. libcurl模拟登录CSDN并自动评论资源以获取积分
  17. keepalived工作原理
  18. Linux修改hostname的几种方法
  19. 【原创精品】程序员最强大的利器——电子笔记本的思考(1)(ver0.3)
  20. ldap 导出、导入ldif数据

热门文章

  1. 【Linux】有名管道实现进程间通信——一个简单聊天程序
  2. Mysql-Mybatis常用动态Sql语句
  3. Pytorch实战学习(六):基础CNN
  4. 谷歌云|机密 GKE 节点可在计算优化的 C2D 虚拟机上使用
  5. Hyperf微服务
  6. Linux系统root密码忘记修改
  7. Docker命令(转载)
  8. c++初始化和赋值的区别
  9. k8s入门_label标签、nodeSelector
  10. SQL Server【提高】事务