目前在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

Storm日志预警以及汇总解决方案的更多相关文章

  1. Zabbix日志监视的汇总报警(更新发送邮件脚本)

    Zabbix的用户一定会碰到这种情况: 日志报警一般设置的是multiple模式,有错误大量写入的时候,每写入一行就会触发一次action,导致出现大量的报警邮件. 特别是ora的报警,经常一出就是上 ...

  2. Storm笔记——技术点汇总

    目录 概况 手工搭建集群 引言 安装Python 配置文件 启动与测试 应用部署 参数配置 Storm命令 原理 Storm架构 Storm组件 Stream Grouping 守护进程容错性(Dae ...

  3. 大数据学习——flume日志分类采集汇总

    1. 案例场景 A.B两台日志服务机器实时生产日志主要类型为access.log.nginx.log.web.log 现在要求: 把A.B 机器中的access.log.nginx.log.web.l ...

  4. 实时收集Storm日志到ELK集群

    背景 我们的storm实时流计算项目已经上线几个月了,由于各种原因迟迟没有进行监控,每次出现问题都要登录好几台机器,然后使用sed,shell,awk,vi等各种命令来查询原因,效率非常低下,而且有些 ...

  5. 第1节 storm日志告警:1、 - 5、日志监控告警业务需求、代码、集群运行、总结

    如何解决短信或者邮件频繁发送的问题:每次发送的时候都先查询数据库记录,看一下有没有给这个人发送消息,上一次发送消息的时间是什么时候,如果发送时间间隔小于半个小时,就不要再发了 ============ ...

  6. 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

    一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见 ...

  7. 出现“System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部”错误的解决方案

    Sql Server2008数据库在还原时出现如下错误信息:System.Data.SqlClient.SqlError: 尚未备份数据库<数据库名称>的日志尾部.如果该日志包含您不希望丢 ...

  8. Storm日志分析调研及其实时架构

    1.Storm第一个Demo 2.Windows下基于eclipse的Storm应用开发与调试 3.Storm实例+mysql数据库保存 4.Storm原理介绍 5. flume+kafka+stor ...

  9. docker容器日志收集方案汇总评价总结

    docker日志收集方案有太多,下面截图罗列docker官方给的日志收集方案(详细请转docker官方文档).很多方案都不适合我们下面的系列文章没有说. 经过以下5篇博客的叙述简单说下docker容器 ...

  10. Linux下nohup日志输出过大问题解决方案

    转载自:http://blog.csdn.net/shawnhu007/article/details/50971084 最近在一hadoop测试集群运行一个spark streaming程序,然后使 ...

随机推荐

  1. CCIE DC Multicast Part 4.

    Hi Guys, Part 4 of my CCIE DC multicast article is presented below, in this article we are going to ...

  2. WCF学习系列---1、新建第一个WCF服务

    一.了解.Net平台下的分布式技术 1.WebService:基于Http协议的Soap模式 2.Remoting :也是一种分布式架构技术,常常用于TCP模式的二进制传输 3.MSMQ:这是一种分布 ...

  3. Kongmaster

    圣人处无为之事 大智若愚 穷则独善其身,达则兼济天下

  4. PyQt5模块说明

    pyqt5的类别分为几个模块,包括以下: QtCoreQtGuiQtWidgetsQtMultimediaQtBluetoothQtNetworkQtPositioningEnginioQtWebSo ...

  5. 集群activemq重启报错java.lang.OutOfMemoryError: GC overhead limit exceeded

    最近安全部门同事说我们环境有个弱密码漏洞,activemq后台的密码不够复杂,需要改为复杂密码. 我登录了他们扫出来的url,输入admin admin,果然进来了.不得不说上一位已离职同事的安全意识 ...

  6. 多数元素II

    给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. /** * @param {number[]} nums * @return {number[]} */ const ...

  7. 第十三天笔记Cookie

    第十三天笔记Cookie 计算机重要的四个内容 数据结构 数据存储的结构及逻辑的体现,以及相关数据结构之间的操作(算法) 操作系统 windows(dos命令).linux(指令操作) 计网 网络通信 ...

  8. Panel容器中显示多个窗体并通过按钮实现窗体切换

    Panel容器中显示多个窗体并通过按钮实现窗体切换 在项目开发中经常会有如下需求: 主窗体formMain中有个一Panle: 在Panel内显示多个窗体,如form1,form2--,分别通过不同按 ...

  9. Jenkins安装和自动化部署

    1.Jenkins安装机器安装要求可以参考官网 https://www.jenkins.io 2.下载jenkins的war包上传到linux上部署 3.安装jdk.git.maven 3.1.安装j ...

  10. ARMv7-Protected Memory System Architecture(PMSA)

    PMSA介绍: PMSA基于内存保护单元(MPU),PMSA与基于VMSA的MMU相比提供了更简单的内存保护方案,简化适用于硬件和软件.PMSAv7处理器依赖MPU类型寄存器来识别,请参见MPUIR, ...