<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          真香!被阿里老兄安利了一個輕量級的日志追蹤框架。10 分鐘即可接入!

          共 3972字,需瀏覽 8分鐘

           ·

          2020-11-13 16:30

          開始文章之前,且聽我簡單BB幾句。

          國產(chǎn)開源之路不易,好的國產(chǎn)開源項(xiàng)目還是太少太少了。國內(nèi)一些用心做開源的技術(shù)人基本都是靠愛發(fā)電。

          今天介紹的這個日志框架的作者自己維護(hù)了 3 個開源框架,為此他經(jīng)常忙到凌晨1,2點(diǎn)。目前,這個日志框架目前仍在開發(fā)中。不得不說的是!這個項(xiàng)目整體的代碼質(zhì)量很高,非常值得小伙伴們學(xué)習(xí)一波!

          前言

          隨著微服務(wù)盛行,很多公司都把系統(tǒng)按照業(yè)務(wù)邊界拆成了很多微服務(wù),在排錯查日志的時候。因?yàn)闃I(yè)務(wù)鏈路貫穿著很多不同微服務(wù),同一個微服務(wù)又可能部署著十幾個節(jié)點(diǎn),要排查某一個請求的日志,總不見得一個個節(jié)點(diǎn)搜過去吧,所以這時候日志的鏈路追蹤就顯得很有必要了。

          很多公司可能自己搭了 ELK 或者使用了一些云產(chǎn)品的日志服務(wù),但是它們只解決了日志的收集和展現(xiàn),并沒有提供日志的鏈路追蹤。

          也有公司上 SkyWalking,Pinpoint 等分布式追蹤系統(tǒng)來解決,基于 OpenTracing 規(guī)范,而且通常都是無侵入性的,提供探針來收集發(fā)送日志,并且有相對友好的展示界面來進(jìn)行鏈路的查詢。

          分布式追蹤系統(tǒng)固然是一個比較完善的解決方案,但是熟悉以及推廣到全公司的系統(tǒng)需要一定的時間周期,而且當(dāng)中涉及到鏈路 span 節(jié)點(diǎn)的存儲成本問題,全量采集還是部分采集?如果全量采集,就以 SkyWalking 的存儲來舉例,ES 集群搭建至少需要 5 個節(jié)點(diǎn)。這就需要增加服務(wù)器成本。況且如果微服務(wù)節(jié)點(diǎn)多的話,一天下來產(chǎn)生幾十 G 上百 G 的數(shù)據(jù)其實(shí)非常正常。如果想保存時間長點(diǎn)的話,也需要增加服務(wù)器磁盤的成本。

          有沒有一種快速低成本來解決日志追蹤問題方案呢?

          我發(fā)現(xiàn)了最近在 Gitee 上比較火的開源項(xiàng)目 TLog,這是一款主打輕量級的日志追蹤框架,號稱 10 分鐘就可以接入你的系統(tǒng),支持主流的 dubbo,dubbox,openfeign 等 rpc 框架,自動適配 logbacklog4j,log4j2 等日志框架。目前該項(xiàng)目入選了Gitee 2020 年的 GVP。

          項(xiàng)目地址為:https://gitee.com/bryan31/TLog

          1

          特點(diǎn)

          TLog 提供了一種最簡單的方式來解決日志追蹤問題,它不收集日志,也不需要額外的存儲空間,它只是自動的對你的日志進(jìn)行打標(biāo)簽,生成一系列的追蹤信息的標(biāo)簽融入到你的日志里。這些標(biāo)簽?zāi)軌蛴行У墨@知一條日志屬于哪一個調(diào)用鏈,在某個調(diào)用鏈里屬于哪一個層次,以及服務(wù)的上游信息。

          TLog 的官網(wǎng)羅列了以下特性:

          • 通過對日志打標(biāo)簽完成輕量級微服務(wù)日志追蹤
          • 提供三種接入方式:javaagent 完全無侵入接入;2.字節(jié)碼一行代碼接入;3.基于配置文件的接入
          • 對業(yè)務(wù)代碼無侵入式設(shè)計(jì),使用簡單,10 分鐘即可接入
          • 支持常見的 log4j,log4j2,logback 三大日志框架,并提供自動檢測,完成適配
          • 支持 dubbo,dubbox,springcloud 三大 RPC 框架
          • 支持日志標(biāo)簽的自定義模板的配置,提供多個系統(tǒng)級埋點(diǎn)標(biāo)簽的選擇
          • 支持異步線程的追蹤,包括線程池,多級異步線程等場景
          • 幾乎無性能損耗,快速穩(wěn)定

          接入

          TLog 主打輕量級和易用性,在接入層面,TLog 提供了探針模式,字節(jié)碼模式和適配模式。官網(wǎng)提供了一張表供你選擇最適合的接入方式:

          2

          探針模式(javaagent)

          其實(shí)探針模式是完全不侵入系統(tǒng)的,可以探測你使用的 rpc 框架和日志框架進(jìn)行自動適配

          只需要在 jvm 啟動參數(shù)上加入:-javaagent:/your_path/tlog-agent.jar 就可以了

          字節(jié)碼注入方式

          侵入 pom 文件和啟動類,也可以自動探測你使用的 rpc 框架和日志框架

          加入依賴:

          <dependency>
          ??<groupId>com.yomahubgroupId>
          ??<artifactId>tlog-all-spring-boot-starterartifactId>
          ??<version>1.1.5version>
          dependency>

          然后啟動類中加入字節(jié)碼增強(qiáng)的一句代碼:

          3

          日志框架適配方式

          侵入你所使用的日志框架配置文件,可以自動探測你所使用的 RPC 框架

          每種日志框架有不同的配置方式,官網(wǎng)文檔寫的很詳細(xì),這里就不展開說明了。

          日志標(biāo)簽

          TLog 的核心就是標(biāo)簽,通過對普通的日志追加標(biāo)簽來獲得服務(wù)追蹤信息。

          TLog 的標(biāo)簽分內(nèi)置標(biāo)簽和自定義標(biāo)簽兩種,下面就來說說這 2 種標(biāo)簽的定義。

          內(nèi)置標(biāo)簽

          TLog 內(nèi)置有 4 個標(biāo)簽可供選擇:preApp,preIp,spanId,traceId

          preApp 和 preIp 是上游服務(wù)的名稱和 IP,其中 traceId 最為關(guān)鍵,這就是貫穿整條鏈路的追蹤號,可以用來追溯某個業(yè)務(wù)請求。

          spanId 是能展示這條日志在調(diào)用鏈中的層次關(guān)系。我們假設(shè)一次分布式調(diào)用中產(chǎn)生的 TraceId 是 0a1234(實(shí)際不會這么短),那么根據(jù)上文 SpanId 的產(chǎn)生過程,有下圖:

          4

          顯而易見,如果把一次調(diào)用中的 spanId 全部收集起來,是可以很容易組成一棵調(diào)用樹的。

          TLog 默認(rèn)只展示spanIdtraceId兩個內(nèi)置標(biāo)簽,但是你可以在 springboot 的配置文件中加入

          tlog.pattern=[$preApp][$preIp][$spanId][$traceId]

          就可以獲得如下的日志展示效果:

          2020-11-08?01:34:41.421?[DubboServerHandler-thread-2]?INFO??c.y.t.example.dubbo.service.impl.DemoServiceImpl?-?[demo-app][192.168.50.80][0.1][7457635127294656]?logback-dubbox-provider:invoke?method?sayHello,name=jack
          2020-11-08?01:34:41.422?[Thread-8]?INFO??c.y.tlog.example.dubbo.service.impl.AsynDomain?-?[demo-app][192.168.50.80][0.1][7457635127294656]?這是異步方法哦
          2020-11-08?01:34:41.423?[Thread-8]?INFO??c.y.tlog.example.dubbo.service.impl.AsynDomain?-?[demo-app][192.168.50.80][0.1][7457635127294656]?異步方法開始
          2020-11-08?01:34:41.423?[Thread-8]?INFO??c.y.tlog.example.dubbo.service.impl.AsynDomain?-?[demo-app][192.168.50.80][0.1][7457635127294656]?異步方法結(jié)束

          自定義標(biāo)簽

          TLog 允許用戶對某一個方法內(nèi)的日志加入特定的自定義標(biāo)簽。

          平時做項(xiàng)目中有的童鞋喜歡在每條日志上打個訂單號,以便方便搜索,類似這樣的操作以后就可以輕松的用這個特性來解決啦!

          5

          當(dāng)然對于@TLogAspect標(biāo)簽而言,支持的特性有很多,不僅支持基本類型,也支持對象類型的屬性取值,同時支持模板設(shè)定,自定義轉(zhuǎn)換器等等。詳細(xì)用法請看官方文檔。

          其他細(xì)節(jié)

          TLog 在其他細(xì)節(jié)部分也作了一些支持。

          所有的標(biāo)簽顯示模板和顯示在日志條目中的位置,都是可以自由配置的。

          對異步子線程以及線程池中的場景,標(biāo)簽的信息依舊不會丟失。

          以上的案例都是針對于 springboot 的,TLog 同時提供了 springboot 和非 springboot 兩種版本,以方便更多不同種類的項(xiàng)目的接入。

          具體支持部分也請移步 TLog 的官方文檔。

          最佳實(shí)踐

          TLog 的亮點(diǎn)就是輕量,接入快,適配流行的 rpc 和日志框架也比較全。但是看下來,因?yàn)椴蛔魅罩臼占皇羌尤胱粉櫺畔?。雖然從信息角度來說可追蹤了。但是實(shí)際追蹤起來還是不方便。

          個人認(rèn)為 ELK+TLog 或者 云日志產(chǎn)品+TLog 是一個不錯的選擇。ELK 或者云日志產(chǎn)品負(fù)責(zé)收集,TLog 負(fù)責(zé)加入追蹤信息,這樣就可以互相彌補(bǔ)。成為一套完整的追蹤體系。

          同時 TLog 作者也表示,未來的的藍(lán)圖是做成日志領(lǐng)域集收集,追蹤,統(tǒng)計(jì),分析,展現(xiàn)于一體日志中間件。現(xiàn)在目前還在不停迭代中。

          最后的思考

          在日志追蹤領(lǐng)域,TLog 這個開源作品給我們展示了一種簡約但又有效的方案,雖然它目前還不提供收集統(tǒng)計(jì)和 UI 展現(xiàn),但是在易用性方面確實(shí)下了一番功夫。希望隨著這個項(xiàng)目慢慢的迭代,能給開源社區(qū)帶來更加豐富的特性。

          最終再次附上 TLog 的項(xiàng)目托管地址,官網(wǎng)也在里面有連接

          https://gitee.com/bryan31/TLog

          最近寫的一些干貨,每篇都很用心,歡迎各位小伙伴閱讀/點(diǎn)贊/分享:

          1. 怒肝1.3w+字給學(xué)姐講明白計(jì)算機(jī)專業(yè)大學(xué)四年到底該學(xué)什么?

          2. Spring Boot搭建的一個在線文件預(yù)覽系統(tǒng)!支持ppt、doc等多種類型文件預(yù)覽

          3. ?一份熱乎的 SpringBoot 前后端分離后臺管理系統(tǒng)分析!分模塊開發(fā)、RBAC權(quán)限控制...

          4. 要想代碼寫的好,這幾款I(lǐng)DEA插件你離不了!

          5. 系統(tǒng)設(shè)計(jì)面試題指北

          6. ?大二逃課總結(jié)的1.2w字的計(jì)算機(jī)網(wǎng)絡(luò)知識!掃盲!

          7. ?不太喜歡“只要錢給夠就行,我愿意加班”這句話

          8. ?5分“白嫖”我使用Github 5 年總結(jié)的這些騷操作


          我是Guide哥,Java后端開發(fā),會一點(diǎn)前端知識,喜歡烹飪,自由的少年。一個三觀比主角還正的技術(shù)人。我們下期再見!

          瀏覽 109
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天干天天操青青草 | 婷婷激情丁香花 | 香蕉操逼视频 | 性视频无码 | 日本伦理一区二区三区 |