Storm日志预警以及汇总解决方案

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

扫描二维码关注公众号,回复: 8285509 查看本文章

 

 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

猜你喜欢

转载自www.cnblogs.com/createweb/p/12018987.html