四川設(shè)計(jì)公司seo運(yùn)營培訓(xùn)
簡介
分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具,專為微服務(wù)、云原生架構(gòu)和基于容器(Docker、K8s、Mesos)架構(gòu)而設(shè)計(jì)。
提供分布式追蹤、服務(wù)網(wǎng)格遙測(cè)分析、度量聚合和可視化一體化解決方案。
多種監(jiān)控手段??梢酝ㄟ^語言探針和 service mesh 獲得監(jiān)控是數(shù)據(jù)。
多個(gè)語言自動(dòng)探針。包括 Java,.NET Core 和 Node.JS。
輕量高效。無需大數(shù)據(jù)平臺(tái),和大量的服務(wù)器資源。
模塊化。UI、存儲(chǔ)、集群管理都有多種機(jī)制可選。
支持告警。
優(yōu)秀的可視化解決方案。
官方中文文檔:https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/
下面我們簡單來使用下
部署
這里采用docker- composet進(jìn)行部署
version: '3.3'
services:skywalking-oap:image: apache/skywalking-oap-server:8.0.1-es7container_name: skywalking-oaprestart: alwaysports:- 11800:11800- 12800:12800environment:SW_STORAGE: h2skywalking-ui:image: apache/skywalking-ui:8.0.1container_name: skywalking-uidepends_on:- skywalking-oaplinks:- skywalking-oaprestart: alwaysports:- 8080:8080environment:SW_OAP_ADDRESS: skywalking-oap:12800
上面安裝了server端和ui控制臺(tái)
go2sky
skywalking是業(yè)界比較常用的一款A(yù)PM監(jiān)控工具,采用java開發(fā),對(duì)java應(yīng)用適配比較好,應(yīng)用不需要埋點(diǎn)上報(bào),只需要在啟動(dòng)時(shí)加上 -javaagent: 參數(shù)即可。
而對(duì)于go應(yīng)用想要上報(bào)指標(biāo)到skywalking,則需要通過埋點(diǎn)的方式注入。skywalking官方提供了golang版的庫github.com/SkyAPM/go2sky
demo代碼:https://github.com/SkyAPM/go2sky/blob/38c3b84741dd6c0609965e9df0fcc633915d3ea5/test/e2e/example-server/main.go
和所有的鏈路監(jiān)控工具一樣,skywalking也遵循Open Tracing協(xié)議,首先需要?jiǎng)?chuàng)建一個(gè)Trace,表示一個(gè)調(diào)用鏈,然后再調(diào)用鏈上創(chuàng)建span和子span,每個(gè)span表示一次調(diào)用,因?yàn)閟pan和子span是有關(guān)聯(lián)關(guān)系的,所以通過span和子span可以了解鏈路的上下游調(diào)用情況。
在go-sky里,可以創(chuàng)建三種類型的span
LocalSpan:可以用來表示本程序內(nèi)的一次調(diào)用。
span, ctx, err := tracer.CreateLocalSpan(context.Background())
EntrySpan:用來從下游服務(wù)提取context信息。
span, ctx, err := h.tracer.CreateEntrySpan(r.Context(), getOperationName(h.name, r), func()?(string, error)?{return?r.Header.Get(propagation.Header), nil
})
ExitSpan:用來向上游服務(wù)注入context信息。
span, err := t.tracer.CreateExitSpan(req.Context(), getOperationName(t.name, req), req.Host, func(header string)?error?{req.Header.Set(propagation.Header, header)return?nil
})
其實(shí)在發(fā)起http請(qǐng)求時(shí),也是注入式地上報(bào)skywalking,只不過通過github.com/SkyAPM/go2sky/plugins/http這個(gè)包進(jìn)行了封裝而已,其核心邏輯是創(chuàng)建span,并將span信息寫入到header里來傳遞到上游服務(wù)。
Server端在處理請(qǐng)求時(shí),其核心邏輯是從header里解析出下游的span信息,并基于此構(gòu)造自己的span,并將span上報(bào)到skywalking。