如何解决短信或者邮件频繁发送的问题:每次发送的时候都先查询数据库记录,看一下有没有给这个人发送消息,上一次发送消息的时间是什么时候,如果发送时间间隔小于半个小时,就不要再发了
==========================================
6、日志监控告警系统
6.1需求分析:
实现项目中日志监控的功能,需要做到日志监控实时告警,例如系统中出现任何异常,触发任何的告警规则,都可以实时通过短信或者邮件告知相关系统负责人
6.2 案例:实现实时监控文件变化,通过自定义flume拦截器,实现文件内容添加标识(详见代码)
6.2.1 错误日志生成
错误日志生成,直接运行loggen.sh这个脚本,就会在
/export/data/flume/click_log 这个目录下生成一个文件叫做error.log的日志文件
参见资料当中的
注意:资料中已经提供好打包运行的jar包以及运行脚本,直接运行脚本即可
6.2.2 创建kafka的对应的topic
bin/kafka-topics.sh --create --partitions 6 --replication-factor 1 --topic log_monitor --zookeeper node01:2181,node02:2181,node03:2181
6.2.3 flume自定义拦截器开发
注意:一定要将flume的自定义拦截器单独放一个项目,单独进行打包,不然与其他的代码会有冲突
功能需求:实现在每条日志前面加上一个appId来做唯一标识
第一步:创建maven项目并导入jar包;
第二步:开发我们自定义拦截器;
第三步:将我们自定义的拦截器打包成jar,放入到flume的lib目录下
注意,这里打包不需要任何的打包插件,将maven项目中的打包插件都注释掉
注意:资料当中已经提供好了的jar包,直接放到flume的lib目录下即可
第四步:配置flume的配置文件app_interceptor.conf
a1.sources = r1
a1.channels = c1
a1.sinks = k1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /export/data/flume/click_log/error.log
a1.sources.r1.channels = c1
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = cn.itcast.flume.interceptor.AppInterceptor$AppInterceptorBuilder
a1.sources.r1.interceptors.i1.appId = 1
a1.channels.c1.type=memory
a1.channels.c1.capacity=10000
a1.channels.c1.transactionCapacity=100
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.topic = log_monitor
a1.sinks.k1.brokerList = kafka01:9092
a1.sinks.k1.requiredAcks = 1
a1.sinks.k1.batchSize = 20
a1.sinks.k1.channel = c1
第五步:启动flume
bin/flume-ng agent -n a1 -c conf -f /export/servers/apache-flume-1.6.0-cdh5.14.0-bin/conf/app_interceptor.conf -Dflume.root.logger=INFO,console
第六步:使用kafka自带的console消费我们生产的信息,查看msgId是否成功带上了
bin/kafka-console-consumer.sh --topic log_monitor --zookeeper node01:2181,node02:2181,node03:2181
6.3 storm消费kafka中的数据,实现日志监控告警
第一步:导入jar包
注意:打包的时候,打包插件一定要使用这个:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
第二步:创建数据库表
第三步:开发我们的定时任务
第四步:开发我们的规则匹配bolt
第五步:开发我们的短信与邮件通知bolt
第六步:开发我们的数据库保存bolt
第七步:程序入口主函数
以上所有,详见代码。
kafkaSpout的更多说明:
=======================================================
课程总结:
1、storm的源码托管地址
2、storm的任务提交的过程 本地创建目录树,zk创建目录树
3、storm与hdfs的整合使用
4、storm的ack机制 要知道是什么玩意儿 消息确认机制
5、storm的定时器以及与mysql的整合 搞定
6、日志监控告警系统
问题分析思路的整个过程
来源:oschina
链接:https://my.oschina.net/u/4400455/blog/3442163