官方文檔:http://www.plumelog.com/zh-cn/docs/FASTSTART.html
簡(jiǎn)介
- 無(wú)代碼入侵的分布式日志系統(tǒng),基于log4j、log4j2、logback搜集日志,設(shè)置鏈路ID,方便查詢關(guān)聯(lián)日志
- 基于elasticsearch作為查詢引擎
- 高吞吐,查詢效率高
- 全程不占應(yīng)用程序本地磁盤空間,免維護(hù);對(duì)于項(xiàng)目透明,不影響項(xiàng)目本身運(yùn)行
- 無(wú)需修改老項(xiàng)目,引入直接使用,支持dubbo,支持springcloud
架構(gòu)
- 應(yīng)用服務(wù)通過(guò)整合plumelog客戶端,搜集日志并推送kafka,redis等隊(duì)列
- plumelog-server 負(fù)責(zé)把隊(duì)列中的日志日志異步寫入到elasticsearch
- plumelog_ui為操作界面客戶端,用于查詢?nèi)罩荆褂酶鞣N定制功能
常見(jiàn)部署模型
- 單redis小集群模式,大部分中小規(guī)模項(xiàng)目
- kafka集群模式,每個(gè)項(xiàng)目量都很大
功能
日志查詢
擴(kuò)展字段
-
在系統(tǒng)擴(kuò)展字段里添加擴(kuò)展字段,字段值為 orderid 顯示值為 訂單編號(hào)
-
查詢的時(shí)候選擇應(yīng)用名,下面會(huì)顯示擴(kuò)展字段,可以通過(guò)擴(kuò)展字段查詢
MDC.put("orderid","1");
MDC.put("userid","4");
logger.info("擴(kuò)展字段");
鏈路追蹤
設(shè)置追蹤碼后,支持注解手動(dòng)打點(diǎn)和切面全局打點(diǎn)
滾動(dòng)日志
可以連接到機(jī)器上,查看實(shí)時(shí)日志
錯(cuò)誤統(tǒng)計(jì)
錯(cuò)誤報(bào)警
支持通過(guò)webhook自定義報(bào)警
索引管理
查看和操作ES索引
plumelog&ELK
- plumelog日志是客戶端上報(bào)的方式,客戶端配置極其簡(jiǎn)單,不需要像logstash一樣去解析日志的格式,因?yàn)閜lumelog客戶端已經(jīng)格式化好了,traceid的設(shè)計(jì)都是內(nèi)置的,這些用戶都不用刻意去管,跨線程跨應(yīng)用鏈路傳遞都是內(nèi)置的組件
- 部署簡(jiǎn)單,你只要個(gè)有redis,就行了,ELK組合要完成完整部署,可能還需要配置kafka,filebeat之類的組件,而且版本需統(tǒng)一
- 日志的查詢速度大于ELK,因?yàn)閜lumelog查詢是優(yōu)化過(guò)的,比kibanna通用查詢快很多,plumelog的查詢界面就是專門按照國(guó)人習(xí)慣設(shè)計(jì)的
- 很多人用ELK到了大量日志的時(shí)候發(fā)現(xiàn),檢索效率極其下降,那是因?yàn)镋S的索引等設(shè)計(jì)不合理造成的,plumelog專業(yè)處理日志,索引的設(shè)置都已經(jīng)早就設(shè)計(jì)好了,不需要使用者自己去優(yōu)化
- ELK不是專業(yè)處理日志的,plumelog在日志上功能就很多,例如擴(kuò)展字段,鏈路追蹤,錯(cuò)誤報(bào)警,錯(cuò)誤統(tǒng)計(jì)后續(xù)還有QPS統(tǒng)計(jì)等功能,ELK都是沒(méi)有的
多大體量
根據(jù)用戶反饋,目前搜集到最大的用戶每日日志量已經(jīng)到達(dá)3TB,并穩(wěn)定運(yùn)行
部署應(yīng)用
第一步:安裝 redis 或者 kafka(一般公司redis足夠) redis 官網(wǎng):https://redis.io kafka:http://kafka.apache.org
第二步:安裝 elasticsearch 官網(wǎng)下載地址:https://www.elastic.co/cn/downloads/past-releases
第三步:下載安裝包,plumelog-server 下載地址:https://gitee.com/plumeorg/plumelog/releases
第四步:配置plumelog-server,并啟動(dòng),redis和kafka作為隊(duì)列模式下可以部署多個(gè)plumelog-server達(dá)到高可用,配置一樣即可
第五步:后臺(tái)查詢語(yǔ)法詳見(jiàn)plumelog使用指南
應(yīng)用案例
以mservice為例,查詢線上問(wèn)題時(shí),提供的是用戶Id或訂單號(hào)
之前查日志:
- 根據(jù)custId找到udid,根據(jù)訂單號(hào)找到custId再找到udid。
- 到kibana根據(jù)udid和時(shí)間點(diǎn)找到對(duì)應(yīng)的請(qǐng)求記錄,找到對(duì)應(yīng)的機(jī)器,找到請(qǐng)求的唯一標(biāo)識(shí)“tc”
- 登錄機(jī)器,根據(jù)“tc”參數(shù)查詢elk日志,找到對(duì)應(yīng)的線程號(hào)。
- 根據(jù)線程號(hào)和時(shí)間范圍過(guò)濾default日志。
現(xiàn)在查詢?nèi)罩荆?/h5>
- 登錄plumeLog頁(yè)面,根據(jù)用戶Id或訂單號(hào)查詢,即可查詢到關(guān)鍵日志,大致定位問(wèn)題。
- 根據(jù)日志的hostIp參數(shù)登錄到機(jī)器根據(jù)追蹤碼過(guò)濾即可得到詳細(xì)日志。
整合過(guò)程
-
pom添加依賴
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-logback</artifactId>
<version>3.5.2</version>
</dependency>
-
logback.xml添加appender,注意區(qū)分測(cè)試和線上環(huán)境
<appenders>
<!--使用redis啟用下面配置-->
<appender name="plumelog" class="com.plumelog.logback.appender.RedisAppender">
<appName>plumelog</appName>
<redisHost>172.16.249.72:6379</redisHost>
<redisAuth>123456</redisAuth>
</appender>
<!-- 使用kafka啟用下面配置 -->
<appender name="plumelog" class="com.plumelog.logback.appender.KafkaAppender">
<appName>plumelog</appName>
<kafkaHosts>172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092</kafkaHosts>
</appender>
<!-- 使用lite模式啟用下面配置 -->
<appender name="plumelog" class="com.plumelog.logback.appender.LiteAppender">
<appName>worker</appName>
<plumelogHost>localhost:8891</plumelogHost>
</appender>
</appenders>
<!--使用上面三個(gè)三選一加入到root下面-->
<root level="INFO">
<appender-ref ref="plumelog"/>
</root>
<!-- 結(jié)合環(huán)境配置案例-->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="plumelog" />
</root>
</springProfile>
<springProfile name="test">
<root level="INFO">
<appender-ref ref="plumelog" />
</root>
</springProfile>
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="plumelog" />
</root>
</springProfile>
-
代碼調(diào)整輸出日志文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-685681.html
- 當(dāng)前只把部分關(guān)鍵日志輸出到plumeLog,可以解決大部分問(wèn)題,每條日志都有機(jī)器IP
- 把用戶Id作為擴(kuò)展字段,方便搜索。
- 鏈路追蹤:將“tc”參數(shù)作為追蹤碼,調(diào)用交易時(shí),將其放到head中傳給交易,可以直接根據(jù)追蹤碼搜索,串聯(lián)mservice和交易系統(tǒng)。
- 將“tc”參數(shù)放到MDC中,輸出到日志頭,可以直接根據(jù)“tc”參數(shù)過(guò)濾日志
-
下載server包,調(diào)整server配置文件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-685681.html
spring.application.name=plumelog_server
spring.profiles.active=test-confidential
server.port=8891
spring.thymeleaf.mode=LEGACYHTML5
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/plumelog/**
spring.boot.admin.context-path=admin
#值為4種 redis,kafka,rest,restServer
#redis 表示用redis當(dāng)隊(duì)列
#kafka 表示用kafka當(dāng)隊(duì)列
#rest 表示從rest接口取日志
#restServer 表示作為rest接口服務(wù)器啟動(dòng)
#ui 表示單獨(dú)作為ui啟動(dòng)
#lite 簡(jiǎn)易模式啟動(dòng)不需要配置redis等
plumelog.model=kafka
#plumelog.lite.log.path=/Users/chenlongfei/lucene
# 如果使用kafka,啟用下面配置
plumelog.kafka.kafkaHosts=broker.kafka.mid:443,broker.kafka.mid:443
plumelog.kafka.kafkaGroupName=logConsumer
#隊(duì)列redis地址,model配置redis集群模式,哨兵模式用逗號(hào)隔開(kāi),隊(duì)列redis不支持集群模式
#plumelog.queue.redis.redisHost=127.0.0.1:6379
#如果使用redis有密碼,啟用下面配置
#plumelog.queue.redis.redisPassWord=123456
#plumelog.queue.redis.redisDb=0
#哨兵模式需要配置的
#plumelog.queue.redis.sentinel.masterName=myMaster
#管理端redis地址 ,集群用逗號(hào)隔開(kāi),不配置將和隊(duì)列公用
plumelog.redis.redisHost=127.0.0.1:8389,127.0.0.1:8388
#如果使用redis有密碼,啟用下面配置
#plumelog.redis.redisPassWord=123456
#plumelog.redis.redisDb=0
#哨兵模式需要配置的
#plumelog.redis.sentinel.masterName=myMaster
#如果使用rest,啟用下面配置
#plumelog.rest.restUrl=http://127.0.0.1:8891/getlog
#plumelog.rest.restUserName=plumelog
#plumelog.rest.restPassWord=123456
#redis解壓縮模式,開(kāi)啟后不消費(fèi)非壓縮的隊(duì)列
#plumelog.redis.compressor=true
#elasticsearch相關(guān)配置,Hosts支持?jǐn)y帶協(xié)議,如:http、https
plumelog.es.esHosts=127.0.0.1:9200
plumelog.es.shards=5
plumelog.es.replicas=0
plumelog.es.refresh.interval=30s
#日志索引建立方式day表示按天、hour表示按照小時(shí)
plumelog.es.indexType.model=day
#plumelog.es.maxShards=100000
#ES設(shè)置密碼,啟用下面配置
#plumelog.es.userName=elastic
#plumelog.es.passWord=elastic
#是否信任自簽證書
#plumelog.es.trustSelfSigned=true
#是否hostname驗(yàn)證
#plumelog.es.hostnameVerification=false
#單次拉取日志條數(shù)
plumelog.maxSendSize=100
#拉取時(shí)間間隔,kafka不生效
plumelog.interval=100
#plumelog-ui的地址 如果不配置,報(bào)警信息里不可以點(diǎn)連接
plumelog.ui.url=http://plumelog.ck.api:8891
#管理密碼,手動(dòng)刪除日志的時(shí)候需要輸入的密碼
admin.password=123456
#日志保留天數(shù),配置0或者不配置默認(rèn)永久保留
admin.log.keepDays=30
#鏈路保留天數(shù),配置0或者不配置默認(rèn)永久保留
admin.log.trace.keepDays=30
#登錄配置,配置后會(huì)有登錄界面
#login.username=admin
#login.password=admin
- 部署server,當(dāng)前已部署6個(gè)pod。
- 當(dāng)前實(shí)際應(yīng)用中,日常每天日志總量200多萬(wàn)條。2G左右。
pom添加依賴
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-logback</artifactId>
<version>3.5.2</version>
</dependency>
logback.xml添加appender,注意區(qū)分測(cè)試和線上環(huán)境
<appenders>
<!--使用redis啟用下面配置-->
<appender name="plumelog" class="com.plumelog.logback.appender.RedisAppender">
<appName>plumelog</appName>
<redisHost>172.16.249.72:6379</redisHost>
<redisAuth>123456</redisAuth>
</appender>
<!-- 使用kafka啟用下面配置 -->
<appender name="plumelog" class="com.plumelog.logback.appender.KafkaAppender">
<appName>plumelog</appName>
<kafkaHosts>172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092</kafkaHosts>
</appender>
<!-- 使用lite模式啟用下面配置 -->
<appender name="plumelog" class="com.plumelog.logback.appender.LiteAppender">
<appName>worker</appName>
<plumelogHost>localhost:8891</plumelogHost>
</appender>
</appenders>
<!--使用上面三個(gè)三選一加入到root下面-->
<root level="INFO">
<appender-ref ref="plumelog"/>
</root>
<!-- 結(jié)合環(huán)境配置案例-->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="plumelog" />
</root>
</springProfile>
<springProfile name="test">
<root level="INFO">
<appender-ref ref="plumelog" />
</root>
</springProfile>
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="plumelog" />
</root>
</springProfile>
代碼調(diào)整輸出日志文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-685681.html
- 當(dāng)前只把部分關(guān)鍵日志輸出到plumeLog,可以解決大部分問(wèn)題,每條日志都有機(jī)器IP
- 把用戶Id作為擴(kuò)展字段,方便搜索。
- 鏈路追蹤:將“tc”參數(shù)作為追蹤碼,調(diào)用交易時(shí),將其放到head中傳給交易,可以直接根據(jù)追蹤碼搜索,串聯(lián)mservice和交易系統(tǒng)。
- 將“tc”參數(shù)放到MDC中,輸出到日志頭,可以直接根據(jù)“tc”參數(shù)過(guò)濾日志
下載server包,調(diào)整server配置文件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-685681.html
spring.application.name=plumelog_server
spring.profiles.active=test-confidential
server.port=8891
spring.thymeleaf.mode=LEGACYHTML5
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/plumelog/**
spring.boot.admin.context-path=admin
#值為4種 redis,kafka,rest,restServer
#redis 表示用redis當(dāng)隊(duì)列
#kafka 表示用kafka當(dāng)隊(duì)列
#rest 表示從rest接口取日志
#restServer 表示作為rest接口服務(wù)器啟動(dòng)
#ui 表示單獨(dú)作為ui啟動(dòng)
#lite 簡(jiǎn)易模式啟動(dòng)不需要配置redis等
plumelog.model=kafka
#plumelog.lite.log.path=/Users/chenlongfei/lucene
# 如果使用kafka,啟用下面配置
plumelog.kafka.kafkaHosts=broker.kafka.mid:443,broker.kafka.mid:443
plumelog.kafka.kafkaGroupName=logConsumer
#隊(duì)列redis地址,model配置redis集群模式,哨兵模式用逗號(hào)隔開(kāi),隊(duì)列redis不支持集群模式
#plumelog.queue.redis.redisHost=127.0.0.1:6379
#如果使用redis有密碼,啟用下面配置
#plumelog.queue.redis.redisPassWord=123456
#plumelog.queue.redis.redisDb=0
#哨兵模式需要配置的
#plumelog.queue.redis.sentinel.masterName=myMaster
#管理端redis地址 ,集群用逗號(hào)隔開(kāi),不配置將和隊(duì)列公用
plumelog.redis.redisHost=127.0.0.1:8389,127.0.0.1:8388
#如果使用redis有密碼,啟用下面配置
#plumelog.redis.redisPassWord=123456
#plumelog.redis.redisDb=0
#哨兵模式需要配置的
#plumelog.redis.sentinel.masterName=myMaster
#如果使用rest,啟用下面配置
#plumelog.rest.restUrl=http://127.0.0.1:8891/getlog
#plumelog.rest.restUserName=plumelog
#plumelog.rest.restPassWord=123456
#redis解壓縮模式,開(kāi)啟后不消費(fèi)非壓縮的隊(duì)列
#plumelog.redis.compressor=true
#elasticsearch相關(guān)配置,Hosts支持?jǐn)y帶協(xié)議,如:http、https
plumelog.es.esHosts=127.0.0.1:9200
plumelog.es.shards=5
plumelog.es.replicas=0
plumelog.es.refresh.interval=30s
#日志索引建立方式day表示按天、hour表示按照小時(shí)
plumelog.es.indexType.model=day
#plumelog.es.maxShards=100000
#ES設(shè)置密碼,啟用下面配置
#plumelog.es.userName=elastic
#plumelog.es.passWord=elastic
#是否信任自簽證書
#plumelog.es.trustSelfSigned=true
#是否hostname驗(yàn)證
#plumelog.es.hostnameVerification=false
#單次拉取日志條數(shù)
plumelog.maxSendSize=100
#拉取時(shí)間間隔,kafka不生效
plumelog.interval=100
#plumelog-ui的地址 如果不配置,報(bào)警信息里不可以點(diǎn)連接
plumelog.ui.url=http://plumelog.ck.api:8891
#管理密碼,手動(dòng)刪除日志的時(shí)候需要輸入的密碼
admin.password=123456
#日志保留天數(shù),配置0或者不配置默認(rèn)永久保留
admin.log.keepDays=30
#鏈路保留天數(shù),配置0或者不配置默認(rèn)永久保留
admin.log.trace.keepDays=30
#登錄配置,配置后會(huì)有登錄界面
#login.username=admin
#login.password=admin
到了這里,關(guān)于plumelog介紹與應(yīng)用-一個(gè)簡(jiǎn)單易用的java分布式日志系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!