阶段六:微服务项目运维实践之链路追踪
部署链路追踪SkyWalking
- SkyWalking链路追踪:Apache SkyWalking在微服务架构中提供了链路追踪的功能,起到以下作用:
- 分布式追踪:SkyWalking可以为微服务架构中的每个服务调用提供追踪数据,帮助开发者理解各个服务之间的交互和依赖关系,找出性能瓶颈或故障源头。
- 性能监控:SkyWalking收集各种性能指标,包括服务、服务实例和端点的响应时间、吞吐量等,使开发者、运维能够实时掌握系统的性能状态。
- 拓扑图分析:SkyWalking能够展示微服务架构中服务之间的拓扑关系,使系统的调用关系一目了然。
- 告警:SkyWalking可以根据预设的规则生成告警,及时通知开发者、运维统存在的问题。
- 度量聚合:SkyWalking不仅可以收集和展示实时的监控数据,还可以聚合这些数据,提供更长时间范围内的性能趋势分析。
- 支持服务网格:SkyWalking可以与服务网格(如Istio等)集成,为服务网格提供观察性分析。
- 总的来说,SkyWalking是一个强大的观察性工具,能够帮助开发者更好地理解和优化微服务系统的性能和稳定性。
ES数据库
- 需要两台4核8G ECS
- 创建命名空间

- 创建访问阿里云ACR镜像仓库登录秘钥和部署ES数据库

YAML 保存位置: ~/k8s-manifests/skywalking/es-cluster-svc.yaml
先在 Kubernetes 管理节点执行:
mkdir -p ~/k8s-manifests/skywalking
cd ~/k8s-manifests/skywalking
vi es-cluster-svc.yaml把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。
apiVersion: v1
kind: Service
metadata:
name: es-cluster-svc
namespace: skywalking
spec:
clusterIP: None
selector:
app: elasticsearch
ports:
- name: http #客户端访问端口
port: 9200
- name: transport #集群之间通信端口
port: 9300
targetPort: 9300
---
# es-cluster.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: es-cluster
namespace: skywalking
spec:
serviceName: es-cluster-svc
replicas: 1 #设置副本数
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch #Pod标签
spec:
imagePullSecrets:
- name: registry
initContainers:
- name: fix-permissions
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32
command: ['sh', '-c', 'chown -R 1000:1000 /usr/share/elasticsearch/data']
securityContext:
runAsUser: 0
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
- name: vm-max-map-count
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32
#通过容器部署es,官方要求修改系统内核参数“vm.max_map_count”这个参数控制一个进程可以拥有的最大内存映射区域的数量,通常在运行需要大量内存映射的应用(如 Elasticsearch)时需要调整
#容器使用 sysctl 命令设置 Linux 内核参数
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext: #初始容器安全上下文(访问权限)
privileged: true #设置为特权模式,即拥有主机上的root权限
- name: ulimit
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32
command: ["sh", "-c", "ulimit -n 65536"]
securityContext:
privileged: true
containers:
- name: es-container
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/elasticsearch:7.8.1
ports:
# 容器内端口
- name: http
containerPort: 9200
- name: transport
containerPort: 9300
#限制CPU数量
resources:
limits:
cpu: 1000m
requests:
cpu: 100m
# 设置挂载目录
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
# 设置环境变量
env:
- name: TZ
value: "Asia/Shanghai"
# 自定义集群名
- name: cluster.name
value: k8s-es
# 定义节点名,使用metadata.name名称
- name: node.name #当前节点在集群名称
valueFrom:
fieldRef:
fieldPath: metadata.name #名称通过该属性下定义的值获取,即:es-cluster-0,es-cluster-1,es-cluster-2
- name: cluster.initial_master_nodes
# 对应metadata.name名称加编号,编号从0开始
value: "es-cluster-0"
# 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点
- name: discovery.seed_hosts
value: "es-cluster-svc"
- name: ES_JAVA_OPTS
value: "-Xms1g -Xmx1g"
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
# 存储卷访问权限为读写
accessModes: [ "ReadWriteOnce" ]
# 动态存储名称
storageClassName: "alicloud-disk-topology-alltype"
# 申请资源的大小
resources:
requests:
storage: 20Gi配置详解:
| 需要改的项 | 为什么改 |
|---|---|
namespace: skywalking | 与实际命名空间一致;使用默认命名空间时可不写。 |
port: 9200 | 对外暴露的 Service 端口;调用方按此端口访问。 |
port: 9300 | 对外暴露的 Service 端口;调用方按此端口访问。 |
targetPort: 9300 | 必须与容器实际监听端口一致。 |
replicas: 1 | 按可用性和资源容量设置副本数。 |
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32 | 替换为实际可拉取的镜像地址和版本。 |
注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
- YAML 缩进不能乱;同级字段要对齐,子字段要多缩进两个空格。
- 资源名称、命名空间、标签选择器要互相对应,否则资源创建了也可能找不到彼此。
- 镜像地址、版本号和拉取权限要确认,否则 Pod 会进入
ImagePullBackOff。
部署skywalking-oap-server和skywalking-ui服务
skywalking-oap-server是 Apache SkyWalking 的核心后端组件,全称 Observability Analysis Platform Server,负责接收、分析、聚合、存储来自各类 Agent 的可观测性数据(Tracing / Metrics / Logs)
- 数据接收(Receiver)从 Agent / Sidecar / 第三方系统接收数据:
- Trace(调用链)
- Metrics(指标)
- Logs(日志索引)
- Topology(服务拓扑)
- OAP 会对原始数据做实时计算:
- 调用链拆解
- 服务 / 实例 / Endpoint 统计
- 延迟、吞吐、错误率计算
- 指标聚合(Aggregation)按时间窗口聚合:
- 秒级 → 分钟级 → 小时级
- 支持多维度(服务 / 实例 / 接口)
skywalking-ui是 Apache SkyWalking 的可视化前端组件,负责把 OAP Server 中分析好的可观测性数据以图形化方式展示出来
- https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/
YAML 保存位置: ~/k8s-manifests/skywalking/skywalking-oap.yaml
先在 Kubernetes 管理节点执行:
mkdir -p ~/k8s-manifests/skywalking
cd ~/k8s-manifests/skywalking
vi skywalking-oap.yaml把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。
apiVersion: apps/v1
kind: Deployment
metadata:
name: skywalking-oap
namespace: skywalking
labels:
app: skywalking-oap
spec:
selector:
matchLabels:
app: skywalking-oap
template:
metadata:
labels:
app: skywalking-oap
annotations:
sidecar.istio.io/inject: "false"
spec:
imagePullSecrets:
- name: registry
containers:
- name: skywalking-oap
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/skywalking-oap-server:10.2.0
env:
- name: SW_STORAGE
value: "elasticsearch"
- name: SW_STORAGE_ES_CLUSTER_NODES
value: "es-cluster-svc:9200"
# - name: SW_ES_USER
# value: "elastic"
# - name: SW_ES_PASSWORD
# value: "your_password"
- name: SW_HEALTH_CHECKER
value: default
- name: SW_CORE_GRPC_HOST
value: "0.0.0.0"
- name: SW_CORE_REST_HOST
value: "0.0.0.0"
---
apiVersion: v1
kind: Service
metadata:
labels:
name: skywalking-oap
name: skywalking-oap
namespace: skywalking
spec:
ports:
- port: 11800
targetPort: 11800
name: grpc
- port: 12800
targetPort: 12800
name: http-query
selector:
app: skywalking-oap
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: skywalking-ui
namespace: skywalking
labels:
app: skywalking-ui
spec:
selector:
matchLabels:
app: skywalking-ui
template:
metadata:
labels:
app: skywalking-ui
annotations:
sidecar.istio.io/inject: "false"
spec:
imagePullSecrets:
- name: registry
containers:
- name: skywalking-ui
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/skywalking-ui:10.2.0
env:
- name: SW_OAP_ADDRESS
value: http://skywalking-oap:12800
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: skywalking-ui
namespace: skywalking
labels:
app: skywalking-ui
spec:
type: NodePort
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
nodePort: 30824
selector:
app: skywalking-ui配置详解:
| 需要改的项 | 为什么改 |
|---|---|
namespace: skywalking | 与实际命名空间一致;使用默认命名空间时可不写。 |
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/skywalking-oap-server:10.2.0 | 替换为实际可拉取的镜像地址和版本。 |
SW_STORAGE: elasticsearch | 按当前环境的实际值确认。 |
SW_STORAGE_ES_CLUSTER_NODES: es-cluster-svc:9200 | 按当前环境的实际值确认。 |
SW_HEALTH_CHECKER: default | 按当前环境的实际值确认。 |
SW_CORE_GRPC_HOST: 0.0.0.0 | 按当前环境的实际值确认。 |
注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
- YAML 缩进不能乱;同级字段要对齐,子字段要多缩进两个空格。
- 资源名称、命名空间、标签选择器要互相对应,否则资源创建了也可能找不到彼此。
- 镜像地址、版本号和拉取权限要确认,否则 Pod 会进入
ImagePullBackOff。
探针埋点
skywalking-agent是 Apache SkyWalking 的数据采集端(探针),负责无侵入地从应用内部采集 Trace ,并上报给 OAP Server
- 下载skywalking-agent jar包
[root@node1 data]# mkdir jdk-skywalking-agent && cd jdk-skywalking-agent
#下载
[root@master01 jdk-skywalking-agent]# wget https://downloads01-he-fi.apache.org/skywalking/java-agent/9.6.0/apache-skywalking-java-agent-9.6.0.tgz
#构建java基础镜像
[root@node1 jdk-skywalking-agent]# tar -xv -f apache-skywalking-java-agent-9.6.0.tgz
[root@node1 jdk-skywalking-agent]# vim Dockerfile
FROM harbor.lanqicheng.top/library/jdk11:latest
COPY skywalking-agent /skywalking-agent
#镜像构建
[root@node1 jdk-skywalking-agent]# docker build -t harbor.lanqicheng.top/library/jdk11:skywalking-agent .注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
修改所有微服务启动参数
#修改所有服务启动参数,其他服务雷同,参照依次进行修改
[root@node1 ruoyi-system]# vim entrypoint.sh
java \
-javaagent:/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=ruoyi::ruoyi-system \
-Dskywalking.collector.backend_service=skywalking-oap.skywalking.svc.cluster.local:11800 \
-Dspring.cloud.nacos.config.file-extension=yml \
-Dspring.cloud.nacos.discovery.server-addr=nacos-svc:8848 \
-Dspring.cloud.nacos.config.server-addr=nacos-svc:8848 \
-jar /ruoyi-system.jar注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
[root@node1 ruoyi-gateway]# vim Dockerfile
#定义基础镜像
FROM harbor.lanqicheng.top/library/jdk11:skywalking-agent
COPY target/ruoyi-gateway.jar /ruoyi-gateway.jar
COPY Shanghai /usr/share/zoneinfo/Asia/Shanghai
COPY ./entrypoint.sh /
EXPOSE 9200
CMD /bin/sh /entrypoint.sh
#推送所有代码到仓库
[root@node1 RuoYi-Cloud]# cd /root/RuoYi-Cloud
[root@node1 ruoyi-system]# git add .
[root@node1 ruoyi-system]# git commit -m 'skywalking' .
[root@node1 ruoyi-system]# git push命令作用:
- 这条命令用于打开并编辑文件。进入编辑器后需要保存退出,修改才会写回文件。
执行结果:
- 编辑器会打开目标文件;保存并退出后文件内容才会改变。
关键参数:
注意事项:
http://101.201.57.48:30824/(每个人的IP地址不一样)




metadata: data: alarm-settings.yml: | rules: service_resp_time_rule:
service_sla_rule:
service_resp_time_percentile_rule:
service_instance_resp_time_rule:
database_access_resp_time_rule:
endpoint_relation_resp_time_rule:
hooks: webhook: default: urls:
**注意事项:**
metadata:
labels:
spec:
selector:
matchLabels:
template:
metadata:
labels:
annotations:
spec:
imagePullSecrets:
containers:
env:
volumeMounts:
volumes:
configMap:注意事项:
本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。