Skywalking架構

快速開始
一直在尋找一款全能的監控平台,可以滿足名額、日志、調用鍊等多方面一站式觀察。Prometheus 在名額方面很強大,但調用鍊需要依賴需要依賴第三方。而Skywalking 可以一站式解決上面所有問題,其工作原理比較簡單,易于二次開發。其架構分為服務端、收集端、前端。收集端既支援背景服務也支援前端服務,例如java項目可以以javaagent 的方式內建skywalking-agent.jar元件,這個元件會讀取配置檔案(agent.config)并拉起插件(預設拉起 plugins、activations兩個目錄下的插件),而收集日志和名額的任務都是依賴這些插件完成的,比如要忽視某些方法被追蹤,那就使用apm-trace-ignore-plugin-x.x.x.jar 插件;如果想增強某些方法那就使用apm-customize-enhance-plugin-x.x.x.jar 插件等。
OAP服務
啟動OAP服務,OAP服務相當于Skywalking的背景服務,這裡采用docker的安裝方式,skywalking 預設内置H2存儲,也可以是ES、Mysql等,下面介紹兩種docker啟動方案,當然你也可以直接下載下傳分發版本通過本地的方式啟動。
方案一: 使用預設的H2作為存儲啟動,适合本地測試環境
docker run --name oap -p 11800:11800 -p 12800:12800 -e TZ=Asia/Shanghai --restart always -d apache/skywalking-oap-server:8.6.0-es7
docker run --name oapui --link oap:oap -p 8080:8080 -e TZ=Asia/Shanghai -e SW_OAP_ADDRESS=oap:12800 --restart always -d apache/skywalking-ui:8.6.0
方案二:使用ES作為存儲啟動,适合生産環境
使用 docker-compose部署skywalking的三個基礎服務:ES、OAP、WEB
version: '3'
services:
es7:
container_name: es7
hostname: es7
image: elasticsearch:7.5.1
expose:
- 9200
- 9300
networks:
- e2e
environment:
- discovery.type=single-node
oap:
container_name: oap
hostname: oap
image: apache/skywalking-oap-server:8.7.0-es7
expose:
- 11800
- 12800
- 5005
networks:
- e2e
restart: on-failure
environment:
- SW_STORAGE=elasticsearch7
- SW_STORAGE_ES_CLUSTER_NODES="es7:9200"
healthcheck:
test: ["CMD", "sh", "-c", "nc -zn 127.0.0.1 11800"]
interval: 5s
timeout: 60s
retries: 120
depends_on:
- "es7"
ui:
image: apache/skywalking-ui:8.7.0
ports:
- "8080:8080"
networks:
- e2e
environment:
- SW_OAP_ADDRESS=http://oap:12800
depends_on:
- "oap"
networks:
e2e:
Agent端
在springboot項目內建Skywalking Agent
1.解壓apache-skywalking-apm-8.6.0.tar.gz,設定-javaagent:指向解壓後的skywalking-agent.jar位置,不能拷貝出來,因為它會通過這個jar來識别目前config 和 plugin目錄,同時這個jar會依賴日志、跟蹤、名額等相關jar包。
2.先請求springboot服務,請求完後,一定要等一會,點一下右上角重新整理按鈕才有資料,這些資料預設會被儲存3天,可以調整服務端 recordDataTTL 參數
3.服務名稱agent.service_name如果要分組可以命名為:mygroup::myapp,這樣所有服務就自動劃分到mygroup組中
java -javaagent:D:\apache-skywalking-apm-bin\agent\skywalking-agent.jar \
-Dskywalking.agent.service_name=myapp \
-Dskywalking.agent.instance_name=myapp \
-Dskywalking.collector.backend_service=oap:11800 \
-jar myapp.jar
如果是idea,那麼在Edit Configuration 中 VM Option中添加
-javaagent:skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=myapp -Dskywalking.agent.instance_name=myapp -Dskywalking.collector.backend_service=oap:11800
k8s中服務內建Skywalking Agent
在k8s 中 springboot項目內建Skywalking,推薦采用 sidecar形式
# myapp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
initContainers:
# 應用鏡像
- image: myapp:3.0
imagePullPolicy: Always
name: app-container
command: ["cp", "/myapp.jar", "/app"]
volumeMounts:
- mountPath: /app
name: app-volume
# skywalking鏡像
- image: apache/skywalking-java-agent:8.7.0-alpine
name: agent-container
command: [ "/bin/sh" ]
args: [ "-c","cp /skywalking/agent/optional-plugins/apm-trace-ignore-plugin-8.7.0.jar /skywalking/agent/activations/ && cp -R /skywalking/agent /agent/"]
volumeMounts:
- name: skywalking-agent
mountPath: /agent
containers:
- name: jre-container
image: anapsix/alpine-java:8_server-jre_unlimited
imagePullPolicy: IfNotPresent
command: ["java","-jar","/usr/local/myapp.jar"]
args: ["--server.port=9086","--spring.profiles.active=dev"]
volumeMounts:
- mountPath: /usr/local
name: app-volume
- name: skywalking-agent
mountPath: /skywalking
ports:
- name: container-port
containerPort: 9086
env:
- name: JAVA_TOOL_OPTIONS
value: "-javaagent:/skywalking/agent/skywalking-agent.jar -Dskywalking.trace.ignore_path=/eureka/**,SpringScheduled/**,Guav
aCache/**,Jedis/**,PostgreSQL/**"
# 應用名稱
- name: SW_AGENT_NAME
valueFrom:
fieldRef:
fieldPath: metadata.labels['app']
# oap服務位址
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "oap:11800"
#- name: SW_AGENT_TRACE_IGNORE_PATH
# value: "/actuator/health/**,/eureka/**,PostgreSQL/**,Jedis/**"
#- name: SW_MOUNT_FOLDERS
# value: "plugins,activations,optional-plugins"
volumes:
- name: app-volume
emptyDir: {}
- name: skywalking-agent
emptyDir: {}
---
#service
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
ports:
- port: 9086
protocol: TCP
targetPort: container-port
selector:
app: myapp
type: ClusterIP
Web前端
整體概覽
Skywalking UI
服務概覽
Service界面顯示某個服務運作情況,當選擇不同服務時,相應名額也會變化
同一個服務部署在多個節點上,就會形成多個執行個體,這時服務顯示的就是多個執行個體的整體運作情況
目前端點可以檢視目前服務的某個請求的請求狀況