目前在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. WPF 文本逐字一个个出现的动画效果

    一.效果图: 二.前台代码: <Grid> <TextBlock Foreground="Transparent" x:Name="text" ...

  2. Kubernetes--管理Pod对象的容器(3)

    共享节点的网络名称空间 同一个Pod对象的各容器均运行于一个独立的.隔离的Network名称空间中,共享同一个网络协议栈及相关的网络设备.也有一些特殊的Pod对象需要运行于所在节点的名称空间中,执行系 ...

  3. 为win10添加右键“以管理员身份运行MSI”选项

    win+r运行regedit以打开注册表编辑器 定位到HKEY_CLASSES_ROOT\Msi.Package\shell 右键shell,新建 项 项名称为runas 双击runas右边的默认,填 ...

  4. C#封装FluentValidation

    FluentValidation是一个非常强大的用于构建强类型验证规则的 .NET 框架,帮程序员解决了繁琐的校验问题,用起来非常爽,但我还是遇到了一件非常不爽的事情,如下代码所示: public c ...

  5. C++知识整理

    整理进度 1_ C++(31)中有很多没有整理的,找出来整理. 1.C++语言基础 C++中的头文件(.h) STL基本使用总结 C++里的花括号{},块:{}中的变量只在{}中有效 C++类型转换: ...

  6. Python 使用mysql.connector、pymysql和 MYSQLdb(MysqlClient)操作MySQL数据库

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一.本文主要介绍安装mysql.connector,. ...

  7. spdlog库和fmt库是否使用dll宏定义

    定义FMT_HEADER_ONLY 定义SPDLOG_COMPILED_LIB 使用fmt.dll 使用spdlog.dll NO NO YES NO YES NO NO NO NO YES YES ...

  8. python40

    Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: v ...

  9. OV5640数据的解码

    为了配合开发板的使用,笔者搞了一个OV5640的摄像头模组,OV5640具体的相关手册及资料网上已经很多,感兴趣的都可以自行去查找,基本大同小异.这里也不把OV5640初始化的代码贴出来,因为就是简单 ...

  10. pip python的包成功,但是import的时候报错

    今天,一位同学线上反馈import python包失败了,同时附带两张图: 图1.报错代码 图2.报错提示 结合上面两个图片,我们发现这个同学import全部失败,初步怀疑该同学的本地环境上没有num ...