`
qindongliang1922
  • 浏览: 2147038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116317
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124587
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58449
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70347
社区版块
存档分类
最新评论

如何收集项目日志统一发送到kafka中?

阅读更多

上一篇(http://qindongliang.iteye.com/blog/2354381 )写了收集sparkstreaming的日志进入kafka便于后续收集到es中快速统计分析,今天就再写一篇如何在普通应用程序实时收集日志,上一篇写的毕竟是分布式环境下的操作,有一定的特殊性,如MapReduce,Spark运行的日志和普通项目的日志是不太一样的。

所谓的普通程序就是web项目的或者非web项目的的程序,大部分都是单机版本的。

大多数时候,我们的log都会输出到本地的磁盘上,排查问题也是使用Linux命令来搞定,如果web程序组成负载集群,那么就有多台机器,如果有几十台机器,几十个服务,那么想快速定位log问题和排查就比较麻烦了,所以很有必要有一个统一的平台管理log,现在大多数公司的套路都是收集重要应用的log集中到kafka中,然后在分别导入到es和hdfs上,一个做实时检索分析,另一个做离线统计和数据备份。

如何能快速收集应用日志到kafka中?

方法一:

kafka官网已经提供了非常方便的log4j的集成包 kafka-log4j-appender,我们只需要简单配置log4j文件,就能收集应用程序log到kafka中。

#log4j.rootLogger=WARN,console,kafka
log4j.rootLogger=INFO,console

# for package com.demo.kafka, log would be sent to kafka appender.
#log4j.logger.com.bigdata.xuele.streaming.SparkStreamingKmd*=info,kafka
# appender kafka
log4j.appender.kafka=kafka.producer.KafkaLog4jAppender
log4j.appender.kafka.topic=${kafka.log.topic}
# multiple brokers are separated by comma ",".
log4j.appender.kafka.brokerList=${kafka.log.brokers}
log4j.appender.kafka.compressionType=none
log4j.appender.kafka.syncSend=false
log4j.appender.kafka.layout=org.apache.log4j.PatternLayout
#log4j.appender.kafka.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n
log4j.appender.kafka.layout.ConversionPattern=[%d] %p %m (%c)%n

# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n
log4j.appender.console.layout.ConversionPattern=[%d] [%p] [%t] %m%n

log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

注意,需要引入maven的依赖包:

<dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>0.8.2.1</version>
        </dependency>

非常简单,一个maven依赖加一个log4j配置文件即可,如果依然想写入log到本地 文件依然也是可以的,这种方式最简单快速,但是默认的的log日志是一行一行的纯文本,有些场景下我们可能需要json格式的数据。

方法二:

重写Log4jAppender,自定义输出格式,支持json格式,如果是json格式的数据打入到kafka中,后续收集程序可能就非常方便了,直接拿到json就能入到MongoDB或者es中,如果打入到kafka中的数据是纯文本,那么收集程序,可能需要做一些etl,解析其中的一些字段然后再入到es中,所以原生的输出格式,可能稍不灵活,这样就需要我们自己写一些类,然后达到灵活的程度,github连接:

https://github.com/qindongliang/log_to_kafka

感兴趣的朋友可以看下。

总结:

(1)方法一简单快速,不支持json格式的输出,打到kafka的消息都是原样的log日志信息

(2)方法二稍微复杂,需要自己扩展log收集类,但支持json格式的数据输出,对于想落地json数据直接到存储系统中是非常适合的。

此外需要注意,在调试的时候log发送数据到kafka模式最好是同步模式的否则你控制台打印的数据很有可能不会被收集kafka中,程序就停止了。生产环境最好开启异步发送数据模式,因为内部是批量的处理,所以能提升吞吐,但有一定的轻微延迟。

官网log4j-appender的源码:

https://github.com/apache/kafka/tree/trunk/log4j-appender/src/test/java/org/apache/kafka/log4jappender


有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。


0
0
分享到:
评论

相关推荐

    Kafka详解及常见面试问题解析(值得珍藏)

    Apache Kafka是一个开源流处理平台,由Scala和Java编写,...Kafka模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。此外,Kafka还提供了消息顺序性保障及回溯消费的功能。

    统一管理系统

    公司有eureka管理页面、spring admin管理页面、kafka管理页面、日志查询页面和文件系统查询页面,现在要将这些页面放到一个统一的网页中管理,通过标签分别跳转到不同的页面,省去了分别点开的麻烦 这些单个的系统...

    大数据中台架构栈.doc

    该实时处理系统整体架构如下:通过将 Agent 部署在 Web 效劳器,一旦发生新增的日志数据,就会被 Flume 程序监听到,并且最终会传输到 Kafka 的 Topic 中,再进行后续的一系列操作。 1.3 数据传输 Kafka Kafka 最初...

    人工智能-项目实践-信息检索-一个基于微服务架构的前后端分离博客系统 使用Vue + Element ,后端使用Spring c

    一个基于微服务架构的前后端分离博客系统。使用Vue + Element ,后端使用Spring cloud + Spring boot + mybatis-plus进行开发 ...采用 ElasticStack【ElasticSearch + Beats + Kibana + Logstash】搭建章鱼博客日志收集

    基于storm实时热点统计的分布式并行缓存预热

    两台机器上都这样做,才能统一上报流量到kafka ``` bin/kafka-topics.sh --zookeeper 192.168.31.187:2181,192.168.31.19:2181,192.168.31.227:2181 --topic access-log --replication-factor 1 --partitions 1 --...

    使用Go基于WebSocket开发的web聊天应用

    - 分布式部署(通过kafka全局消息队列,统一消息传递,可以水平扩展系统) ## 技术栈 - web框架Gin - 长连接WebSocket - 日志框架Uber的zap - 配置管理viper - ORM框架gorm - 通讯协议Google的proto buffer - 消息...

    SpringAll_wuyouzhuguli.tar.gz

    使用Spring Boot发送邮件 使用Spring Boot Admin监控服务 Spring Boot Devtools热部署 Spring Boot logback日志配置 Spring Boot项目打包成war包 Linux下部署Spring Boot jar Spring Boot中使用Jsoup防御XSS攻击 ...

    spring-boot-demo_xkcoding.tar.gz

    该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy...

    easybuild-framework:springboot下的web框架,提供常用的web功能,快速开发

    easybuild-frameworkAop通过切面Aspect 对所有的controller中的方法进行拦截入参统一校验解决-请求重复提交记录日志 TODO:指定方式 发送kafka、控制台打印统计接口耗时统一异常处理统一出参格式配置文件加密jasypt1...

    spring boot集成demo大全.zip

    该项目已成功集成 actuator(`监控`)、admin(`可视化监控`)、logback(`日志`)、aopLog(`通过AOP记录web请求日志`)、统一异常处理(`json级别和页面级别`)、freemarker(`模板引擎`)、thymeleaf(`模板引擎`)、Beetl(`...

    spring boot 代码示例

    springboot例子, 包含druid数据源, druid的sql监控, druid过滤, mybatis xml配置, mybatis分页插件, logback日志配置, springboot多环境配置, 发送邮件, AOP拦截, 过滤器 spring拦截器, 全局异常, 统一响应, 自定义...

    jeesuite-libs-其他

    包括缓存(一二级缓存、自动缓存管理)、队列、分布式定时任务、文件服务(七牛、阿里云OSS、fastDFS)、日志、搜索、代码生成、API网关、配置中心、统一认证平台、分布式锁、分布式事务、集成dubbo、spring boot支持、...

Global site tag (gtag.js) - Google Analytics