skywalking链路追踪部署
参考文档:https://skywalking.apache.org/docs/
一、介绍
SkyWalking 是观察性分析平台和应用性能管理系统。 提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。 Skywalking 从以大数据平台为主的分析模式, 进化为轻量化、低延迟的分析模式,同时支持分布式追踪和非侵入式的语言探针这两种模式,是能够提供一致性解决方案的开源项目。
详情可看官方文档:https://skywalking.apache.org/docs/
安装部署文档参考:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/
二、部署前提
一台服务器(装有docker环境)
已经存在es的环境,如果不存在则自行安装。
注意es版本对应关系(主要为大版本):https://archive.apache.org/dist/skywalking
点开上面的地址,选择版本,一般都有es的版本包在里面,如果没有在里面。使用es7,亲测skywalking v10.0.1的可以使用es8
三、docker部署
注意:docker部署需要在实际应用当中去加载agent包
3.1 安装skywalking-oap
skywalking的服务端,用于接收和存储数据。这里使用elasticsearch做数据存储。
配置参考:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/#23-skywalking-oap-搭建
docker run -d --name skywalking-oap --restart always -p 11800:11800 -p 12800:12800 --privileged=true -e TZ=Asia/Shanghai -e SW_CORE_METRICS_DATA_TTL=14 -e SW_CORE_RECORD_DATA_TTL=14 -e SW_ES_USER=elastic -e SW_ES_PASSWORD=elastic -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server:10.0.13.2 安装skywalking-ui
skywalking可视化ui页面
docker run -d --name skywalking-ui --restart always -p 8080:8080 --privileged=true --link skywalking-oap:skywalking-oap -e TZ=Asia/Shanghai -e SW_OAP_ADDRESS=skywalking-oap:12800 apache/skywalking-ui:10.0.13.3 应用容器接入
springboot应用启动的时候需要添加agent(注意版本,10.0.1使用的agent为9.3.0),agent的下载地址为:https://skywalking.apache.org/docs/skywalking-java/latest/readme/
java -javaagent:/usr/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -Dskywalking.collector.backend_service=127.0.0.1:11800四、基于K8S部署
k8s部署只列出配置和关键的点,具体命令需要自行搜索
4.1 安装skywalking-oap
configMap的yaml配置
apiVersion: v1
data:
SW_CORE_METRICS_DATA_TTL: '14'
SW_CORE_RECORD_DATA_TTL: '14'
SW_ES_PASSWORD: hcms123
SW_ES_USER: elastic
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: 'elasticsearch:9200'
kind: ConfigMap
metadata:
name: skywalking-oap-server
namespace: testdeploment应用的yaml配置
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s.name: skywalking-oap-server
name: skywalking-oap-server
namespace: test
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 3
selector:
matchLabels:
k8s.name: skywalking-oap-server
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
k8s.name: skywalking-oap-server
spec:
containers:
- envFrom:
- configMapRef:
name: skywalking-oap-server
image: 'apache/skywalking-oap-server:10.0.1'
imagePullPolicy: IfNotPresent
name: skywalking-oap-server
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
observedGeneration: 6
readyReplicas: 1
replicas: 1
updatedReplicas: 1service服务yaml配置
---
apiVersion: v1
kind: Service
metadata:
annotations: {}
labels:
k8s.name: skywalking-oap-server
name: skywalking-oap-server
namespace: test
spec:
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: wxs5fn
port: 11800
protocol: TCP
targetPort: 11800
- name: mtphhc
port: 12800
protocol: TCP
targetPort: 12800
selector:
k8s.name: skywalking-oap-server
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}4.2 安装skywalking-ui
configMap的yaml配置
---
apiVersion: v1
data:
SW_OAP_ADDRESS: 'http://skywalking-oap-server:12800'
kind: ConfigMap
metadata:
annotations: {}
labels: {}
name: skywalking-ui
namespace: testdeploment应用的yaml配置
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations: {}
labels:
k8s.name: skywalking-ui
name: skywalking-ui
namespace: test
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s.name: skywalking-ui
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
k8s.name: skywalking-ui
spec:
containers:
- envFrom:
- configMapRef:
name: skywalking-ui
image: 'apache/skywalking-ui:10.0.1'
imagePullPolicy: IfNotPresent
name: skywalking-ui
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30service服务
由于这个可视化服务端口需要发布出去浏览,采用nodeport发布
---
apiVersion: v1
kind: Service
metadata:
name: skywalking-ui-node
namespace: test
spec:
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: 8pnrff
nodePort: 30000
port: 8080
protocol: TCP
targetPort: 8080
selector:
k8s.name: skywalking-ui
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}4.3 应用容器接入
k8s的应用接入可以不需要手动去添加agent,只需要在应用的yaml增加以下初始化容器的内容即可:
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
k8s.displayName: test
labels:
k8s.name: test
name: test
namespace: test
spec:
progressDeadlineSeconds: 600
replicas: 1
selector:
matchLabels:
k8s.name: test
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
k8s.name: test
spec:
containers:
image: '应用镜像名称'
imagePullPolicy: IfNotPresent
name: test
volumeMounts:
- mountPath: /skywalking
name: skywalking-agent
dnsPolicy: ClusterFirst
initContainers:
- args:
- '-c'
- cp -R /skywalking/agent /agent/
command:
- /bin/sh
image: 'apache/skywalking-java-agent:9.3.0-java17'
imagePullPolicy: IfNotPresent
name: skywalking-java-agent
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /agent
name: skywalking-agent
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- emptyDir: {}
name: skywalking-agent五、springboot应用接入
上述的过程都是基于部署的,那么实际的应用接入就按以下的方式进行
5.1 引入依赖
版本号与agent对应即可
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>9.3.0</version>
</dependency>5.2 修改日志文件
修改logback.xml内容,增加skywalking的内容
<!-- skywalking控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}) [%X{tid}] [%thread] %highlight(%-5level) %clr(%-40.40logger{39}){cyan} %msg%n</Pattern>
</layout>
</encoder>
</appender>
<!-- 上报给skywalking-oap -->
<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>