skywalking使用
初識
Skywalking是一個可觀測性分析平臺(Observability Analysis Platform簡稱OAP) 和應(yīng)用性能管理系統(tǒng)(Application Performance Management簡稱APM)必指。
- 提供分布式鏈路追蹤囊咏、服務(wù)網(wǎng)格(Service Mesh)遙測分析、度量(Metric)聚合和可視化一體化解決方案
特點
多語言自動探針塔橡,Java梅割,.NET Core和Node.JS。
多種監(jiān)控手段葛家,語言探針和service mesh户辞。
輕量高效。不需要額外搭建大數(shù)據(jù)平臺癞谒。
模塊化架構(gòu)底燎。UI刃榨、存儲、集群管理多種機(jī)制可選书蚪。
支持告警喇澡。
優(yōu)秀的可視化效果。
架構(gòu)
- 探針(agent)負(fù)責(zé)進(jìn)行數(shù)據(jù)的收集殊校,包含了Tracing和Metrics的數(shù)據(jù)晴玖,agent會被安裝到服務(wù)所在的 服務(wù)器上,以方便數(shù)據(jù)的獲取为流。
- 可觀測性分析平臺OAP(Observability Analysis Platform)呕屎,接收探針發(fā)送的數(shù)據(jù),并在內(nèi)存中使用分析引擎(Analysis Core)進(jìn)行數(shù)據(jù)的整合運(yùn)算敬察,然后將數(shù)據(jù)存儲到對應(yīng)的存儲介質(zhì)上秀睛,比如 Elasticsearch、MySQL數(shù)據(jù)庫莲祸、H2數(shù)據(jù)庫等蹂安。同時OAP還使用查詢引擎(Query Core)提供HTTP查 詢接口。
- Skywalking提供單獨(dú)的UI進(jìn)行數(shù)據(jù)的查看锐帜,此時UI會調(diào)用OAP提供的接口田盈,獲取對應(yīng)的數(shù)據(jù)然后進(jìn)行展示
概念
- 端點就是對外提供的接口,例如用戶服務(wù)對外提供的HTTP接口/usr/queryAll就是一個端點
一缴阎、skywalking在kubesphere上的部署
1允瞧、oap-server部署
使用鏡像 core.harbor.domain:32388/library/skywalking-oap-server:8.6.0-es7
在kubesphere上創(chuàng)建配置文件 application.yml
-
修改config/application.yml
- 將storage:中selector:設(shè)置為elasticsearch7
-
在elasticsearch7:中,根據(jù)實際情況蛮拔,修改clusterNodes等信息
image.png
-
創(chuàng)建elasticsearch服務(wù)
- 在kubesphere上創(chuàng)建配置文件 elasticsearch.yml
- elasticsearch.yml修改clusterNodes等信息(對應(yīng)上文)
創(chuàng)建oap-server服務(wù)和工作負(fù)載述暂,配置上application.yml
2、ui 界面部署
- 使用鏡像 core.harbor.domain:32388/library/skywalking-ui:8.6.0
- 創(chuàng)建oap-server服務(wù)和工作負(fù)載建炫,配置環(huán)境變量
collector.ribbon.listOfServers: skywalking-oap-server.nobody:12800 //指向前面部署的oap-server
3畦韭、項目集成agent Jar包
將skywalking拷貝到kubesphere的宿主機(jī)上, skywalking/agent/skywalking-agent.jar
-
在服務(wù)上掛載使用主機(jī)地址 hostPath: path: /var/local/skywalking(即skywalking文件夾地址)image.png
-
環(huán)境變量添加
name: JAVA_TOOL_OPTIONS
value: ' -javaagent:/maven/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=zuul //服務(wù)名稱,在ui界面顯示 -Dskywalking.collector.backend_service=skywalking-oap-server.nobody:11800' //server地址
二肛跌、skywalking界面功能介紹
-
儀表盤:查看被監(jiān)控服務(wù)的運(yùn)行狀態(tài)
-
服務(wù)維度
image.png- Service Apdex(數(shù)字):當(dāng)前服務(wù)的評分 Service Apdex(折線圖):不同時間的Apdex評分 Successful Rate(數(shù)字):請求成功率 Successful Rate(折線圖):不同時間的請求成功率 Servce Load(數(shù)字):每分鐘請求數(shù) Servce Load(折線圖):不同時間的每分鐘請求數(shù) Service Avg Response Times:平均響應(yīng)延時廊驼,單位ms Global Response Time Percentile:百分比響應(yīng)延時 Servce Instances Load:每個服務(wù)實例的每分鐘請求數(shù) Show Service Instance:每個服務(wù)實例的最大延時 Service Instance Successful Rate:每個服務(wù)實例的請求成功率
-
服務(wù)實例維度
image.png- Service Instance Load:當(dāng)前實例的每分鐘請求數(shù)
Service Instance Successful Rate:當(dāng)前實例的請求成功率
Service Instance Latency:當(dāng)前實例的響應(yīng)延時
JVM CPU:jvm占用CPU的百分比
JVM Memory:JVM內(nèi)存占用大小,單位m
JVM GC Time:JVM垃圾回收時間惋砂,包含YGC和OGC JVM GC Count:JVM垃圾回收次數(shù)妒挎,包含YGC和OGC
- Service Instance Load:當(dāng)前實例的每分鐘請求數(shù)
-
端點維度
image.png- Endpoint Load in Current Service:每個端點的每分鐘請求數(shù)
Slow Endpoints in Current Service:每個端點的最慢請求時間,單位ms
Successful Rate in Current Service:每個端點的請求成功率
Endpoint Load:當(dāng)前端點每個時間段的請求數(shù)據(jù) Endpoint Avg Response Time:當(dāng)前端點每個時間段的請求行響應(yīng)時間
Endpoint Response Time Percentile:當(dāng)前端點每個時間段的響應(yīng)時間占比
Endpoint Successful Rate:當(dāng)前端點每個時間段的請求成功率
- Endpoint Load in Current Service:每個端點的每分鐘請求數(shù)
-
拓?fù)鋱D:以拓?fù)鋱D的方式展現(xiàn)服務(wù)關(guān)系
-
追蹤:追蹤接口內(nèi)部調(diào)用過程
- 左側(cè):api接口列表西饵,紅色-異常請求酝掩,藍(lán)色-正常請求
- 右側(cè):api追蹤列表,api請求連接各端點的先后順序和時間
性能剖析:單獨(dú)端點進(jìn)行采樣分析眷柔,并可查看堆棧信息
告警:觸發(fā)告警的告警列表期虾,包括實例原朝,請求超時等
三、skywalking告警
- 在kubesphere上創(chuàng)建配置文件 alarm-settings.yml
- 編輯alarm-settings.yml
rules:
# 規(guī)則唯一名稱镶苞,必須以'_rule'結(jié)尾.
service_resp_time_rule:
# 度量名稱喳坠,也是OAL腳本中的度量名,目前Service, Service Instance, Endpoint的度量可以用于告警
metrics-name: service_resp_time
# [可選]默認(rèn)茂蚓,匹配此指標(biāo)中的所有服務(wù)
include-names:
- service_a
- service_b
exclude-names:
- service_c
# 閾值壕鹉,對于多種指標(biāo)值的如percentile可以配置P50、P75聋涨、P90晾浴、P95、P99的閾值
threshold: 75
# 操作符
op: <
# 評估度量標(biāo)準(zhǔn)的時間長度
period: 10
# 度量有多少次符合告警條件后牍白,才會觸發(fā)告警
count: 3
# 檢查多少次脊凰,告警觸發(fā)后保持沉默,默認(rèn)周期相同
silence-period: 10
# 該規(guī)則觸發(fā)時茂腥,發(fā)送的通知消息
message: Response time of service {name} is more than 50ms in 1 minutes of last 1 minutes.
- 配置webhook接口(將告警信息傳出)
webhooks:
- http://ip:port/skyWalking/alarm
- oap-service配置上alarm-settings.yml狸涌,并重啟
四、skywalking日志集成
- 在kubesphere上創(chuàng)建配置文件 agent.config
- 編輯agent.config(aop-server和agent在同一主機(jī)不需要改動配置)
plugin.toolkit.log.grpc.reporter.server_host=skywalking-oap-server.nobody
plugin.toolkit.log.grpc.reporter.server_port=11800
- 項目代碼修改
- pom文件添加 jar依賴(注意和agent的版本一致)
<!-- 引入skywalking 日志依賴 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.6.0</version>
</dependency>
- logback-spring.xml 修改
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<!--加上skywalking的追蹤id-->
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
<!-- skywalking grpc 日志收集 8.4.0版本開始支持 -->
<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} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
- 項目部署
- 項目上配置應(yīng)用上 agent.config
-
ui頁面顯示image.png