1. 程式人生 > >Dubbo學習系列之十八(Skywalking服務跟蹤)

Dubbo學習系列之十八(Skywalking服務跟蹤)

  我們知道,微服務不是獨立的存在,否則就不需要微服務這個架構了,那麼當發起一次請求,如何知道這次請求的軌跡,或者說遇到響應緩慢、

請求出錯的情況,我們該如何定位呢?這就涉及到APM(Application Performance Management)元件了,主流的選型有Zipkin、Pinpoint、Jaeger、

Skywalking,我在VehicleAdmin專案中試用了Dubbo+Zipkin組合,但發現當服務既是生產者又是消費者時有不相容問題,於是我在此做了個Dubbo+

Skywalking的演示版本,僅供參考。

 

原創文章,謝絕一切形式轉載,違者必究!

 

準備:

Idea2019.03/Gradle6.0.1/Maven3.6.3/JDK11.0.4/Lombok0.28/SpringBoot2.2.4RELEASE/mybatisPlus3.3.0/Soul2.1.2/Dubbo2.7.5/Druid1.2.21/

Zookeeper3.5.5/Mysql8.0.11/Redis5.0.5/Skywalking7.0.0

難度: 新手--戰士--老兵--大師

目標:

  1. Skywalking做微服務鏈路監控

步驟:

為了遇見各種問題,同時保持時效性,我儘量使用最新的軟體版本。原始碼地址:https://github.com/xiexiaobiao/vehicle-shop-admin

1 原理

JavaAgent開啟java探針(使用ASM位元組碼技術開發的工具),即執行在main方法之前的攔截器,簡單講就是動態代理和方法攔截器的組合,攔截並分析

請求/響應的資訊。更多關於java探針的內容,在此不展開,略!

2 步驟

2.1 下載

下載Skywalking,略!7.0.0版本之後編譯好的二進位制檔案就是一個Window/Linux通用的包了,直接解壓即可。

2.2 開發環境使用

IDE開發環境Idea下的使用舉例,JVM引數行新增:

-javaagent:C:\apache-skywalking-apm-bin-7.0\agent\skywalking-agent.jar -DSW_AGENT_NAME=authority-service -Dskywalking.collector.servers=localhost:10800

 

以上javaagent地址為skywalking-agent.jar地址,可以為相對/絕對路徑:

然後其他每個服務都類似操作,修改DSW_AGENT_NAM內容為具體的服務名。

如果服務打包成Jar檔案,啟動時加引數即可,這裡給個例項:

java -jar -javaagent:$AGENT_PATH/skywalking-agent.jar -Dskywalking.agent.application_code=dubbo-consumer -Dskywalking.collector.servers=localhost:10800 authority-1.0-SNAPSHOT.jar

 

服務名稱也可以在config檔案中配置,但只能配一個!!感覺這配置就是個雞肋。

2.3 執行Skywalking

如果沒有在apache-skywalking-apm-bin-7.0\webapp\webapp.yml中對 server: port: 8080 修改埠號,執行解壓包下的 bin/startup 檔案,

即可啟動 Skywalking Server 端,開啟瀏覽器地址即可:http://localhost:8080/

2.4 執行專案

啟動vehicleadmin專案,順序:souladmin—>soulbootstrap—>redis—>authority—>customer—>stock—>order —>business, 進入WEBUI儀表盤總覽:

 

服務拓撲圖,可以展示服務、DB、快取、閘道器資訊,可以獨立出單個服務顯示:

 

呼叫鏈追蹤,可以樹形、表格、列表方式展示,比如顯示 /order/list的跨度(span)資訊和呼叫鏈資訊,可以瞭解鏈路總耗時和span耗時:

 

點選一個鏈物件後展示的span資訊,以下為一個dubbo呼叫例項:

2.5 日誌接入

如果需要在日誌中列印,即手動埋點,也可以使用API,對任何需要追蹤的方法,使用 @Trace 標註,則此方法會被加入到追蹤鏈中,

通過TraceContext.traceId() 在應用任意位置獲取traceId,還可以通過ActiveSpan.tag() 自定義標籤,例如我在com.biao.shop.authority.controller.SystemUserController中:

 

輸出示例:

 

另外,還可以結合Logback進行日誌處理,例如我在vehicle-shop-admin\authority\src\main\resources\config\logback-dev.xml中新增一個appender專用於skywalking:


 

總結:

Skywalking鏈路監控已為Apache頂級專案,UI介面豐富,監控範圍廣、維度多,對程式碼零侵入,系統效能損失低,還支援接入 ELK 進行儲存展示,喜歡的就趕緊拿去用吧。

 

全文完!

 

原創文章,謝絕一切形式轉載!

 


我的其他文章:

  • 1 Spring優雅整合Redis快取
  • 2 SOFARPC模式下的Consul註冊中心
  • 3 八種控制執行緒順序的方法
  • 4 移動應用APP購物車(店鋪系列二)
  • 5 H5開發移動應用APP(店鋪系列一)

     只寫原創,敬請關注 

相關推薦

Dubbo學習系列Skywalking服務跟蹤

  我們知道,微服務不是獨立的存在,否則就不需要微服務這個架構了,那麼當發起一次請求,如何知道這次請求的軌跡,或者說遇到響應緩慢、 請求出錯的情況,我們該如何定位呢?這就涉及到APM(Application Performance Management)元件了,主流的選型有Zipkin、Pinpoint、Ja

Dubbo學習系列Seata分散式事務方案TCC模式

上篇的續集。 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1.3/Seata0.8.1/SeataServer0.8.1/Dubbo2.7.3 難度:新手--戰士--老兵

Dubbo學習系列ELK海量日誌分析框架

  外賣公司如何匹配騎手和訂單?淘寶如何進行商品推薦?或者讀者興趣匹配?還有海量資料儲存搜尋、實時日誌分析、應用程式監控等場景,Elasticsearch或許可以提供一些思路,作為業界最具影響力的海量搜尋與分析產品,搜尋軟體公司 Elastic 上市了!首日市值翻倍!Elastic 從小工具「逆襲」

C++語言筆記系列——虛函數1

自己 語言 數據類型 說明 出現 adium 重定義 angle rac 1.C++中的多態 (1)多態性:同一個函數的調用能夠進行不同的操作,函數重載是實現多態的一種手段。 (2)聯編:在編譯階段進行聯接。即是在編譯階段將一個函數的調用點和函數

算法系列:用天文方法計算二四節氣

        二十四節氣在中國古代曆法中扮演著非常重要的角色,本文將介紹二十四節氣的基本知識,以及如何使用VSOP82/87行星執行理論計算二十四節氣發生的準確時間。        中國古代曆法都是以月亮執行規律為主,嚴格按照朔望月長度定義月,但是由於朔望月長度和地球迴歸年

springboot初級學習系列解決@Entity不能自動生成對應表問題已解決

在實體類上加@Entity就會對應生成相應的表,可是有時卻怎麼也生不成解決方法:1、檢查啟動類是否配有:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoC

Dubbo學習系列十三Mycat資料庫代理

軟體界有隻貓,不用我說,各位看官肯定知道是哪隻,那就是大名鼎鼎的Tomcat,現在又來了一隻貓,據說是位東方萌妹子,暫且認作Tom貓的表妹,本來叫OpencloudDB,後又改名為Mycat,或許Cat更親切?那現在就來認識下這隻小貓吧。 資料庫的核心地位就不說了,但現在的問題是,各種RDB,各種NoSQL交

Dubbo學習系列分散式訂單ID方案

既然選擇,就註定風雨兼程! 開始吧! 準備:Idea201902/JDK11/ZK3.5.5/Gradle5.4.1/RabbitMQ3.7.13/Mysql8.0.11/Lombok0.26/Erlang21.2/postman7.5.0 難度:新手--戰士--老兵--大師 目標:1,使用“雪花演算法”生成

CSS3學習系列選擇器

計算 選擇器 sky :focus ddr gree for 指定元素 學習 first-child選擇器和last-child選擇器 first-child指定第一個元素。last-child指定最後一個子元素。 例如: <!DOCTYPE html>

【轉】【修真院“善良”系列】WEB程序員從零開始到就業的全資料V1.0——只看這一篇就夠了!

absolute feed 自己 session rem 好的 ans 一個 css樣式 這是兩年以來,修真院收集整理的學習資料順序。以CSS15個任務,JS15個任務為基礎,分別依據要完成任務的不同的技能點,我們整理出來了這麽一篇在學習的時候需要看到的資料。這是Versi

skyfans每天一個Liunx命令系列:userdel

今天我們繼續來學習USER INFORMATION AND MANAGEMENT(使用者資訊和管理),今天學習的是什麼命令呢,那就是userdel(刪除使用者) 注意:本章內容由於涉及到刪除內容,請在實驗中謹慎操作,切記不可在實際生產環境中執行,否則出現一切後果自負!!!!! Rea

ElasticSearch學習筆記 排序Sort

Sort Elasticsearch 允許你在特性的欄位上進行一次或者多次排序,每次排序都是可以顛倒的,_score欄位用來按照相關性得分排序, _doc 按照順序來排序。 新建索引如下: PUT /my_index { "mappings": {

[算法系列]海量資料處理BitMap

一:簡介 所謂的BitMap就是用一個bit位來標記某個元素對應的Value, 而Key即是該元素。由於採用了bit為單位來儲存資料,因此在儲存空間方面,可以大大節省。 二:基本思想 我們用一個具體的例子來講解,假設我們要對0-7內的5個元素(4,7,2,5,3)排

設計模式C++學習筆記c/c++面試筆試題

一、指標與引用有什麼區別? 1、指標會佔用記憶體,引用不佔用記憶體。 2、引用在定義時必須初始化。 3、沒有空的引用,但是有空的指標。 二、static關鍵的幾個作用 1、函式體內的static變數的作用範圍為該函式體,該變數記憶體只分配一次,因此其值在下次再呼叫該函式時

quick-cocos2d-x 學習系列四 測試用例

quick-cocos2d-x 學習系列之十四 測試用例                   定義變數,建立13個場景名字 &nbs

大機器學習演算法決策樹用於信用風險

演算法原理 Decision Trees (DTs) 是一種用來 和 regression 的無參監督學習方法。其目的是建立一種模型從資料特徵中學習簡單的決策規則來預測一個目標變數的值。決策樹類似於流程圖的樹結構,分支節點表示對一個特徵進行測試,根據測試結果進行分類,樹節點

ReactNative系列codepush熱更新

目前僅針對Android,iOS後續再補 1、簡介 codepush是微軟的一套熱升級解決實現,還有一種是reactnatie中文網上的react-native-pushy。這兩種方案我都試了下,推薦使用codepush, codepush在github上看文件感覺很麻煩,

建立Win2003域和Win2008域之間的信任關係,Active Directory系列

我們在上一篇文章中建立了域信任關係,這個信任關係發生在兩個Win2003域之間,而且兩個域使用了同一個DNS伺服器。今天我們更換一個實驗場景,拓撲如下圖所示。一個是Win2003域,另一個是Win2008域。兩個域都使用各自的域控制器提供DNS解析,而且Win2008域的功能級別是Win2003,我們將為大家

kubernetes系列:使用helm安裝istio

一、前言 istio是Kubernetes平臺微服務管理的框架標準,是Service Mesh在Kubernetes平臺的標準實現。相比於其它的微服務框架,istio提供非程式碼介入的框架機制,使用sidecar機制將微服務的服務面和管理面連線起來,而且使用的sidecar

圖論學習Topological Sort拓撲排序

src info directed com 遞歸 ica -- 遞歸版 拓撲       拓撲排序 Topological-Sort• 對一個有向無環圖G進行 拓撲排序, 是將G中所有 頂點排成一個線性序列, 使 對 於 圖 中 任 意 弧 <u,