SkyWalking是一個(gè)開源可觀測(cè)平臺(tái),用于收集、分析、聚合和可視化來自服務(wù)和云原生基礎(chǔ)設(shè)施的數(shù)據(jù)。SkyWalking 提供了一種簡(jiǎn)單的方法來保持分布式系統(tǒng)的清晰視圖,甚至跨云。它是一種現(xiàn)代APM,專為云原生、基于容器的分布式系統(tǒng)而設(shè)計(jì)。
文檔版本8.9.1,當(dāng)前最新版本9.10
圖片
SkyWalking 是一個(gè)應(yīng)用性能監(jiān)控系統(tǒng)(APM)
為微服務(wù)、云原生和基于容器(Docker, Kubernetes, Mesos)體系結(jié)構(gòu)而設(shè)計(jì),主要實(shí)現(xiàn)功能包括分布式追蹤,性能指標(biāo)分析和服務(wù)依賴分析等
類似功能的組件還有:Zipkin、Pinpoint 、CAT、Dapper等
Cat | Zipkin | Pinpoint | skywalking | |
依賴 | Java 6,7,8 Maven 3.2.3+ mysql5.6 Linux 2.6以及之上(2.6內(nèi)核才可以支持epoll) | Java 6,7,8 Maven3.2+ rabbitMQ | Java 6,7,8 maven3+ Hbase0.94+ | Java 6,7,8 maven3.0+ nodejs zookeeper elasticsearch |
實(shí)現(xiàn)方式 | 代碼埋點(diǎn)(攔截器,注解,過濾器等) | 攔截請(qǐng)求,發(fā)送(http,mq)數(shù)據(jù)至zipkin服務(wù) | java探針,字節(jié)碼增強(qiáng) | java探針,字節(jié)碼增強(qiáng) |
顆粒度 | 代碼級(jí) | 接口級(jí) | 方法級(jí) | 方法級(jí) |
頁(yè)面UI | ***** | ** | ***** | **** |
存儲(chǔ)選擇 | Mysql,hdfs | In-memory,mysql,cassandra,elasticsearch | Hbase | Elasticsearch,h2 |
通信方式 | - | http,mq | Thrift | GRPC |
MQ監(jiān)控 | 不支持 | 不支持 | 不支持 | RocketMq,kafka |
全局調(diào)用 統(tǒng)計(jì) | 支持 | 不支持 | 支持 | 支持 |
Trace查詢 | 不持支 | 支持 | 不支持 | 支持 |
報(bào)警 | 支持 | 不支持 | 支持 | 支持 |
Jvm監(jiān)控 | 不支持 | 不支持 | 支持 | 支持 |
優(yōu)點(diǎn) | 功能完善 | spring-cloud-sleuth可以很好的集成zipkin , 代碼無侵入,集成非常簡(jiǎn)單 , 社區(qū)更加活躍。對(duì)外提供有query接口,更加容易二次開發(fā) | 完全無侵入, 僅需修改啟動(dòng)方式,界面完善,功能細(xì)致。 | 完全無侵入,界面完善,支持應(yīng)用拓?fù)鋱D及單個(gè)調(diào)用鏈查詢。功能比較完善(zipkin + pinpoint) |
缺點(diǎn) | 代碼侵入性較強(qiáng),需要埋點(diǎn)文檔比較混亂,文檔與發(fā)布版本的符合性較低,需要依賴點(diǎn)評(píng)私服 (或者需要把他私服上的jar手動(dòng)下載下來,然后上傳到我們的私服上去)。 | 默認(rèn)使用的是http請(qǐng)求向zipkin上報(bào)信息,耗性能。跟sleuth結(jié)合可以使用rabbitMQ的方式異步來做,增加了復(fù)雜度,需要引入rabbitMQ 。數(shù)據(jù)分析比較簡(jiǎn)單。 | 不支持查詢單個(gè)調(diào)用鏈, 對(duì)外表現(xiàn)的是整個(gè)應(yīng)用的調(diào)用生態(tài)。二次開發(fā)難度較高 | 3.2版本之前BUG較多 ,網(wǎng)上反映兼容性較差 . 3.2新版本的反映情況較少依賴較多。 |
文檔 | 網(wǎng)上資料較少,僅官網(wǎng)提供的文檔,比較亂 | 文檔完善 | 文檔完善 | 文檔完善 |
開發(fā)者 | 大眾點(diǎn)評(píng) | Twiter | Naver | 吳晟(華為開發(fā)者) ,目前已經(jīng)加入Apache孵化器 |
使用公司 | 大眾點(diǎn)評(píng),攜程,陸金所,同程旅游,獵聘網(wǎng),拼多多 | Twiter | Naver | 華為,alibaba cloud,天源迪科,當(dāng)當(dāng)網(wǎng),京東金融 |
開源監(jiān)控平臺(tái),用于從服務(wù)和云原生基礎(chǔ)設(shè)施收集、分析、聚合和可視化數(shù)據(jù)。SkyWalking提供了一種簡(jiǎn)單的方法來維護(hù)分布式系統(tǒng)的清晰視圖,甚至可以跨云查看。它是一種現(xiàn)代APM,專門為云原生、基于容器的分布式系統(tǒng)設(shè)計(jì)
監(jiān)測(cè)對(duì)象包括:service(服務(wù)), service instance(實(shí)例), endpoint(端點(diǎn))
功能描述:
SkyWalking 在邏輯上分為四個(gè)部分:Probes、Platform backend、Storage 和 UI。
圖片
采集tracing(調(diào)用鏈數(shù)據(jù))和metric(指標(biāo))信息并上報(bào),上報(bào)通過HTTP或者gRPC方式按要求重新格式化數(shù)據(jù)發(fā)送數(shù)據(jù)到Skywalking Collector
支持?jǐn)?shù)據(jù)聚合、分析和流式處理,包括跟蹤、度量和日志。
基于gRpc、Http 鏈路數(shù)據(jù)收集器,對(duì)agent傳過來的tracing和metric數(shù)據(jù)進(jìn)行整合分析通過Analysis Core模塊處理并落入相關(guān)的數(shù)據(jù)存儲(chǔ)中,同時(shí)會(huì)通過Query Core模塊進(jìn)行二次統(tǒng)計(jì)和監(jiān)控告警
通過開放/可插入接口存儲(chǔ) SkyWalking 數(shù)據(jù),支持多種方式存儲(chǔ)數(shù)據(jù) H2,ElasticSearch,MySQL, TiDB, InfluxDB或自定義
基于GraphQL Http 高度可定制的基于 Web 的界面的可視化平臺(tái),允許 SkyWalking 最終用戶可視化和管理。
官方下載地址:https://skywalking.apache.org/downloads/
歷史版本下載:https://archive.apache.org/dist/skywalking/
Rocketbot-UI 8.x:https://github.com/apache/skywalking-rocketbot-ui
Booster UI 9.x:https://github.com/apache/skywalking-booster-ui
注:APM已經(jīng)集成UI,不需要單獨(dú)下載與部署
圖片
下載鏡像
docker pull apache/skywalking-oap-server:8.9.1
啟動(dòng)容器
docker run --name oap -p 12800:12800 -p 11800:11800 -p 1234:1234 --restart always -d apache/skywalking-oap-server:8.9.1
下載鏡像
docker pull apache/skywalking-ui
啟動(dòng)容器
docker run --name oap-ui -p 18080:8080 --restart always -d -e SW_OAP_ADDRESS=http://localhost:12800 apache/skywalking-ui
訪問http://localhost:18080
負(fù)責(zé)進(jìn)行數(shù)據(jù)的收集,包含了Tracing和Metrics的數(shù)據(jù),agent會(huì)被安裝到服務(wù)所在的服務(wù)器上,以方便數(shù)據(jù)的獲取。探針使用gRPC協(xié)議與OAP平臺(tái)通信并上報(bào)數(shù)據(jù)。
接收探針發(fā)送的數(shù)據(jù),并在內(nèi)存中使用分析引擎(Analysis Core)進(jìn)行數(shù)據(jù)的整合運(yùn)算,然后將數(shù)據(jù)存儲(chǔ)到對(duì)應(yīng)的存儲(chǔ)介質(zhì)上,比如 Elasticsearch、MySQL等存儲(chǔ)服務(wù)。同時(shí)OAP還使用查詢引擎(Query Core)提供HTTP查詢接口。OAP默認(rèn)監(jiān)聽兩個(gè)端口gRPC協(xié)議端口11800、HTTP端口12800,gRPC用于探針上報(bào)數(shù)據(jù),HTTP端口用于UI連接OAP平臺(tái)獲取數(shù)據(jù)。
Skywalking 提供單獨(dú)的UI進(jìn)行數(shù)據(jù)的查看,UI調(diào)用OAP提供的接口,獲取對(duì)應(yīng)的數(shù)據(jù)根據(jù)UI模板的配置進(jìn)行展示。Skywalking UI與OAP之間使用Http協(xié)議進(jìn)行通信。Skywalking UI默認(rèn)監(jiān)聽8080端口提供Web服務(wù)。
Java Agent
activations # 工具包,默認(rèn)加載。
bootstrap-plugins # 啟動(dòng)插件,默認(rèn)加載。
config # 配置文件
logs # 日志
optional-plugins # 可選擴(kuò)展插件,啟動(dòng)不加載,如需加載將其移到到plugins目錄下。
optional-reporter-plugins # 可選統(tǒng)計(jì)類插件,啟動(dòng)不加載。
plugins # 服務(wù)類插件
skywalking-agent.jar # 客戶端主程序,需要被服務(wù)啟動(dòng)是引用。
java -javaagent:/path/skywalking-agent/skywalking-agent.jar -jar your-app.jar
// todo//服務(wù)名稱agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}// OAP服務(wù)地址collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
代理選項(xiàng) > System.Properties(-D) > 系統(tǒng)環(huán)境變量 > 配置文件
Client JavaScript
npm install skywalking-client-js --save
import ClientMonitor from 'skywalking-client-js'; // Report collected data to `http:// + window.location.host + /browser/perfData` in default ClientMonitor.register({ collector: 'http://127.0.0.1:8080', service: 'test-ui', pagePath: '/current/page/name', serviceVersion: 'v1.0.0', });
// options { // 參考方法文檔 }
register時(shí)設(shè)置autoTracePerf:false
import ClientMonitor from 'skywalking-client-js'; ClientMonitor.setPerformance({ collector: 'http://127.0.0.1:8080', service: 'browser-app', serviceVersion: '1.0.0', pagePath: location.href, useFmp: true });
register時(shí)設(shè)置enableSPA:true,開啟單頁(yè)面應(yīng)用基于hashchange event觸發(fā)指標(biāo)采集行為
或者通過以下方法手動(dòng)處理,在上報(bào)數(shù)據(jù)時(shí)手動(dòng)更新頁(yè)面名稱,當(dāng)調(diào)用該方法時(shí),默認(rèn)情況下將重新報(bào)告頁(yè)面PV
app.on('routeChange', function (next) { ClientMonitor.setPerformance({ collector: 'http://127.0.0.1:8080', service: 'browser-app', serviceVersion: '1.0.0', pagePath: location.href, useFmp: true }); });
// Angular import { ErrorHandler } from '@angular/core'; import ClientMonitor from 'skywalking-client-js'; export class AppGlobalErrorhandler implements ErrorHandler { handleError(error) { ClientMonitor.reportFrameErrors({ collector: 'http://127.0.0.1', service: 'angular-demo', pagePath: '/app', serviceVersion: 'v1.0.0', }, error); } } @NgModule({ ... providers: [{provide: ErrorHandler, useClass: AppGlobalErrorhandler}] }) class AppModule {} ``` ```js // React class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { // Update state so the next render will show the fallback UI. return { hasError: true }; } componentDidCatch(error, errorInfo) { // You can also log the error to an error reporting service ClientMonitor.reportFrameErrors({ collector: 'http://127.0.0.1', service: 'react-demo', pagePath: '/app', serviceVersion: 'v1.0.0', }, error); } render() { if (this.state.hasError) { // You can render any custom fallback UI return <h1>Something went wrong.</h1>; } return this.props.children; } } <ErrorBoundary> <MyWidget /> </ErrorBoundary> ``` ```js // Vue Vue.config.errorHandler = (error) => { ClientMonitor.reportFrameErrors({ collector: 'http://127.0.0.1', service: 'vue-demo', pagePath: '/app', serviceVersion: 'v1.0.0', }, error); } ```
skywalking-client-js
對(duì)請(qǐng)求提供端點(diǎn)的單個(gè)應(yīng)用或負(fù)載,在使用埋點(diǎn)、代理或 SDK 的時(shí)候,你可以定義服務(wù)的名字。如果不定義的話,SkyWalking 會(huì)使用在agent.conf中配置的默認(rèn)服務(wù)名稱。
服務(wù)組中的每個(gè)單獨(dú)的工作負(fù)載都稱為一個(gè)實(shí)例。就像pods在 Kubernetes 中一樣,它不需要是單個(gè)操作系統(tǒng)進(jìn)程,但是,如果您使用儀器代理,則實(shí)例實(shí)際上是一個(gè)真正的操作系統(tǒng)進(jìn)程。
用于傳入請(qǐng)求的服務(wù)中的路徑,例如 HTTP URI 路徑或 gRPC 服務(wù)類 + 方法簽名。
通過配置文件定義需要關(guān)注的指標(biāo) 通過特定的分析語(yǔ)言計(jì)算指標(biāo)
UI包括以下幾個(gè)部分:
儀表盤
Services Load(CPM / PPM):服務(wù)每分鐘請(qǐng)求數(shù)
Slow Services(ms):慢響應(yīng)服務(wù)(按照響應(yīng)時(shí)間排序)
Un-Health Services (Apdex):Apdex分?jǐn)?shù)(1為滿分)
Slow Endpoints (ms):慢Endpoint的平均響應(yīng)時(shí)間
Global Response Latency(percentile in ms):響應(yīng)時(shí)間百分比
Global Heatmap:服務(wù)響應(yīng)時(shí)間熱力分布圖,根據(jù)時(shí)間段內(nèi)不同響應(yīng)時(shí)間的數(shù)量顯示顏色深度顏色越深,請(qǐng)求越多。
自監(jiān)控,OAP服務(wù)端的各項(xiàng)指標(biāo)
# 將-修改為default prometheus-fetcher: selector: ${SW_PROMETHEUS_FETCHER:default} #default: # active: ${SW_PROMETHEUS_FETCHER_ACTIVE:true} # 改none為prometheus telemetry: selector: ${SW_TELEMETRY:prometheus} prometheus: host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0} port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
fetcherInterval: PT15S fetcherTimeout: PT10S metricsPath: /metrics staticConfig: # 改為上步中telemetry配置的ip targets: - url: http://localhost:1234 sslCaFilePath: labels: service: oap-server
對(duì)前端也有一定的監(jiān)控,通過Skywalking-Client-js組件來操作,包括Web App、Pages兩個(gè)指標(biāo)。
拓?fù)鋱D
追蹤
看每個(gè)接口的調(diào)用鏈,每個(gè)鏈路耗時(shí)、狀態(tài)。如果為失敗展示錯(cuò)誤信息,如果是數(shù)據(jù)庫(kù),會(huì)展示查詢語(yǔ)句。另外可以根據(jù)追蹤tid(trace id)和標(biāo)記(tag)進(jìn)行篩選。
性能剖析
日志
告警
事件
調(diào)試
支持logback、log4j、log4j2日志框架集成,基于gRpc通信協(xié)議實(shí)現(xiàn)日志采集。
以logback為例:
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.9.0</version> </dependency>
<!-- ... --> <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern> </layout> </encoder> </appender> <root level="INFO"> <!-- ... --> <appender-ref ref="grpc-log"/> </root>
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:0.0.0.0} plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800} plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760} plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
https://skywalking.apache.org/docs/skywalking-java/v8.11.0/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/
通過@Trace注解標(biāo)記需要追蹤的方法調(diào)用情況
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>8.9.0</version> </dependency>
@Trace @GetMapping("/printLog") public String printLog() { Logger.info("traceId:{}",TraceContext.traceId()) return "ok"; }
一個(gè)服務(wù)的 TBS 的正確率、成功率、流量等,這是我們常見的針對(duì)單個(gè)指標(biāo)或者某一個(gè)數(shù)據(jù)庫(kù)的,這就是 Metrics 單指標(biāo)分析
一次請(qǐng)求的范圍,也就是我們從瀏覽器或者手機(jī)端發(fā)起任何的一次調(diào)用,甚至我們可以再推廣一點(diǎn),是一次業(yè)務(wù)交易,比如說一次訂購(gòu)的過程,從瀏覽商品到最后下定單、支付、物流、最后交到我們的手上。這是一個(gè)流程化的東西,我們需要軌跡,需要去追蹤。
我們程序在執(zhí)行的過程中間發(fā)生了一些日志,會(huì)一幀一幀地跳出來給大家去記錄這個(gè)東西,這是日志記錄。
Apache SkyWalking是一款功能強(qiáng)大的APM系統(tǒng),可以幫助開發(fā)人員和運(yùn)維人員更好地了解分布式系統(tǒng)的性能狀況。通過使用SkyWalking,可以提高應(yīng)用程序的穩(wěn)定性和性能,降低運(yùn)維成本。
本文鏈接:http://www.www897cc.com/showinfo-26-17160-0.html一文帶你了解SkyWalking
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com