随着微服務架構的流行,服務按照不同的次元進行拆分,一次請求往往需要涉及到多個服務。這些服務可能不同程式設計語言開發,不同團隊開發,可能部署很多副本。是以,就需要一些可以幫助了解系統行為、用于分析性能問題的工具,以便發生故障的時候,能夠快速定位和解決問題。全鍊路監控元件就在這樣的問題背景下産生了。
全鍊路性能監控 從整體次元到局部次元展示各項名額,将跨應用的所有調用鍊性能資訊集中展現,可友善度量整體和局部性能,并且友善找到故障産生的源頭,生産上可極大縮短故障排除時間。

請求鍊路追蹤:通過分析服務調用關系,繪制運作時拓撲資訊,可視化展示
調用情況衡量:各個調用環節的性能分析,例如吞吐量、響應時間、錯誤次數
容器規劃參考:擴容/縮容、服務降級、流量控制
運作情況回報:告警,通過調用鍊結合業務日志快速定位錯誤資訊
全鍊路監控系統有很多,應從這幾方面選擇:
探針的性能消耗
APM元件服務的影響應該做到足夠小,資料分析要快,性能占用小。
代碼的侵入性
即也作為業務元件,應當盡可能少或者無其他業務系統,對于使用方透明,減少開發人員的負擔。
監控次元
分析的次元盡可能多。
可擴充性
一個優秀的調用跟蹤系統必須支援分布式部署,具備良好的可擴充
性。能夠支援的元件越多當然越好。
主流系統:zipkin、skywalking、pinpoint
Pinpoint是一個APM(應用程式性能管理)工具,适用于用Java/PHP編寫的大型分布式系統。
特性:
伺服器地圖(ServerMap)通過可視化分布式系統的子產品和他們之間的互相聯系來了解系統拓撲。點選某個節點會展示這個子產品的詳情,比如它目前的狀态和請求數量。
實時活動線程圖 (Realtime Active Thread Chart) :實時監控應用内部的活動線程。
請求/響應分布圖( Request/Response Scatter Chart ) :長期可視化請求數量和應答模式來定位潛在問題。通過在圖表上拉拽可以選擇請求檢視 更多的詳細資訊。
調用棧( CallStack ):在分布式環境中為每個調用生成代碼級别的可視圖,在單個視圖中定位瓶頸和失敗點。
檢查器( Inspector ) :檢視應用上的其他詳細資訊,比如CPU使用率,記憶體/垃圾回收,TPS,和JVM參數。
Docker部署:
首先要下載下傳好pinpoint 鏡像,然後docker load 導入
連結: https://pan.baidu.com/s/1-h8g7dxB9v6YiXMYVNv36Q 密碼: u6qb
github下載下傳慢的話可以直接将開源代碼克隆到自己的gitee,然後下載下傳,這樣比較快
等待大概10min左右就能通路
傳回代碼目錄(simple-microservice-dev4)
新增pingpoint agent,并修改配置檔案(pinpoint 引入)
項目dockerfile修改
項目資料庫修改
腳本化建構釋出
浏覽器檢視狀态
資源消耗比較大,是以隻展示這些
請求數/調用次數
堆記憶體(JVM資訊)
調用資訊(堆棧跟蹤)
響應時間
錯誤率
微服務調用鍊路拓撲
詳情參考:
1、安裝push插件
https://github.com/chartmuseum/helm-push
如果網絡下載下傳不了,也可以直接解壓課件裡包:
2、 在Jenkins主機配置Docker可信任,如果是HTTPS需要拷貝證書
k8s叢集所有節點都需要配置
3、添加repo
4、推送與安裝Chart(例子)
192.168.56.17此節點部署,前提是安裝好docker
通路位址:http://IP:9999
初次會先設定管理者密碼 ,然後登陸,預設管理者使用者名root,密碼就是剛設定的。
使用上一節課的dev3分支的代碼(已經改好了的)
建議關閉https功能,否則自簽證書會影響helm 拉取的問題
建立方式如下,還需要導入對應的資料庫
參考:https://github.com/jenkinsci/kubernetes-plugin/tree/fc40c869edfd9e3904a9a56b0f80c5a25e988fa1/src/main/kubernetes
通路http://192.168.56.11:30006/ 即可進行配置
密碼以及插件位址更新(很重要)
找到配置pv自動供給的NFS伺服器(192.168.56.13),進入共享目錄
不選擇插件
配置新的賬号
修改插件源
重建pod
插件安裝
管理Jenkins->系統配置-->管理插件-->分别搜尋Git Parameter/Git/Pipeline/kubernetes/Config File Provider,選中點選安裝。 Git Parameter:Git參數化建構 Extended Choice Parameter: 參數化建構多選框 Git:拉取代碼 Pipeline:流水線 kubernetes:連接配接Kubernetes動态建立Slave代理 Config File Provider:存儲kubectl用于連接配接k8s叢集的kubeconfig配置檔案
Jenkins Pipeline是一套插件,支援在Jenkins中實作內建和持續傳遞管道;
pipeline通過特定文法對簡單到複雜的傳輸管道進行模組化;
聲明式:遵循與Groovy相同文法。pipeline { }
腳本式:支援Groovy大部分功能,也是非常表達和靈活的工具。node { }
Jenkins Pipeline的定義被寫入一個文本檔案,稱為Jenkinsfile。
在實際環境中, 往往有很多項目,特别是微服務架構,如果每個服務都建立一個item,勢必給運維工作量增加很大,是以可以通過Jenkins的參數化建構, 人工互動确認釋出的環境配置、預期狀态等。
Kubernetes插件:Jenkins在Kubernetes叢集中運作動态代理
插件介紹:https://github.com/jenkinsci/kubernetes-plugin
雲配置
資料詳見jenkins.zip
配置pipeline-demo: 涉及三個選擇參數: NS(名稱空間),SVC(釋出的微服務名稱),RS(釋出的副本數)
配置pipeline
運作測試
](https://s4.51cto.com/images/blog/202009/20/9461e1f123f2f3418a245a35392dc6ac.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
根據所選的内容自動生成grovy文法
gitlab認證
harbor認證
kubernetes kubeconfig 認證
建立自定義配置
将k8s的config配置拷入配置内容
pipeline如下:
釋出如下
校驗如下(k8s叢集檢視):
原理: 通過jenkins讀取gitlab中的pipeline檔案,進而實作版本控制來做到自動化