国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

如何收集項(xiàng)目日志統(tǒng)一發(fā)送到kafka中?

2019-11-11 00:01:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

上一篇(http://qindongliang.iteye.com/blog/2354381 )寫了收集sparkstreaming的日志進(jìn)入kafka便于后續(xù)收集到es中快速統(tǒng)計(jì)分析,今天就再寫一篇如何在普通應(yīng)用程序?qū)崟r(shí)收集日志,上一篇寫的畢竟是分布式環(huán)境下的操作,有一定的特殊性,如MaPReduce,Spark運(yùn)行的日志和普通項(xiàng)目的日志是不太一樣的。

所謂的普通程序就是web項(xiàng)目的或者非web項(xiàng)目的的程序,大部分都是單機(jī)版本的。

大多數(shù)時(shí)候,我們的log都會(huì)輸出到本地的磁盤上,排查問(wèn)題也是使用linux命令來(lái)搞定,如果web程序組成負(fù)載集群,那么就有多臺(tái)機(jī)器,如果有幾十臺(tái)機(jī)器,幾十個(gè)服務(wù),那么想快速定位log問(wèn)題和排查就比較麻煩了,所以很有必要有一個(gè)統(tǒng)一的平臺(tái)管理log,現(xiàn)在大多數(shù)公司的套路都是收集重要應(yīng)用的log集中到kafka中,然后在分別導(dǎo)入到es和hdfs上,一個(gè)做實(shí)時(shí)檢索分析,另一個(gè)做離線統(tǒng)計(jì)和數(shù)據(jù)備份。

如何能快速收集應(yīng)用日志到kafka中?

方法一:

kafka官網(wǎng)已經(jīng)提供了非常方便的log4j的集成包 kafka-log4j-appender,我們只需要簡(jiǎn)單配置log4j文件,就能收集應(yīng)用程序log到kafka中。

#log4j.rootLogger=WARN,console,kafkalog4j.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 kafkalog4j.appender.kafka=kafka.producer.KafkaLog4jAppenderlog4j.appender.kafka.topic=${kafka.log.topic}# multiple brokers are separated by comma ",".log4j.appender.kafka.brokerList=${kafka.log.brokers}log4j.appender.kafka.compressionType=nonelog4j.appender.kafka.syncSend=falselog4j.appender.kafka.layout=org.apache.log4j.PatternLayout#log4j.appender.kafka.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%nlog4j.appender.kafka.layout.ConversionPattern=[%d] %p %m (%c)%n# appender consolelog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.target=System.outlog4j.appender.console.layout=org.apache.log4j.PatternLayout#log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%nlog4j.appender.console.layout.ConversionPattern=[%d] [%p] [%t] %m%nlog4j.logger.org.eclipse.jetty=WARNlog4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERRORlog4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFOlog4j.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>

非常簡(jiǎn)單,一個(gè)maven依賴加一個(gè)log4j配置文件即可,如果依然想寫入log到本地 文件依然也是可以的,這種方式最簡(jiǎn)單快速,但是默認(rèn)的的log日志是一行一行的純文本,有些場(chǎng)景下我們可能需要json格式的數(shù)據(jù)。

方法二:

重寫Log4jAppender,自定義輸出格式,支持json格式,如果是json格式的數(shù)據(jù)打入到kafka中,后續(xù)收集程序可能就非常方便了,直接拿到j(luò)son就能入到mongodb或者es中,如果打入到kafka中的數(shù)據(jù)是純文本,那么收集程序,可能需要做一些etl,解析其中的一些字段然后再入到es中,所以原生的輸出格式,可能稍不靈活,這樣就需要我們自己寫一些類,然后達(dá)到靈活的程度,github連接:

https://github.com/qindongliang/log_to_kafka

感興趣的朋友可以看下。

總結(jié):

(1)方法一簡(jiǎn)單快速,不支持json格式的輸出,打到kafka的消息都是原樣的log日志信息

(2)方法二稍微復(fù)雜,需要自己擴(kuò)展log收集類,但支持json格式的數(shù)據(jù)輸出,對(duì)于想落地json數(shù)據(jù)直接到存儲(chǔ)系統(tǒng)中是非常適合的。

此外需要注意,在調(diào)試的時(shí)候log發(fā)送數(shù)據(jù)到kafka模式最好是同步模式的否則你控制臺(tái)打印的數(shù)據(jù)很有可能不會(huì)被收集kafka中,程序就停止了。生產(chǎn)環(huán)境最好開啟異步發(fā)送數(shù)據(jù)模式,因?yàn)閮?nèi)部是批量的處理,所以能提升吞吐,但有一定的輕微延遲。

官網(wǎng)log4j-appender的源碼

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

有什么問(wèn)題可以掃碼關(guān)注微信公眾號(hào):我是攻城師(woshigcs),在后臺(tái)留言咨詢。 技術(shù)債不能欠,健康債更不能欠, 求道之路,與君同行。

輸入圖片說(shuō)明


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 双牌县| 浦县| 景德镇市| 西乌| 灵璧县| 乌兰县| 英吉沙县| 定州市| 栾城县| 涡阳县| 绥芬河市| 抚松县| 尖扎县| 泰州市| 长白| 闵行区| 汉源县| 定远县| 盐津县| 太原市| 万安县| 凤凰县| 隆昌县| 泾阳县| 美姑县| 龙井市| 鹤壁市| 顺昌县| 察隅县| 卢氏县| 枣强县| 璧山县| 九江市| 台东市| 双峰县| 蓝田县| 阿坝| 揭西县| 固阳县| 曲沃县| 乌鲁木齐市|