一.Skywalking介绍
Apache SkyWalking是一个开源的分布式追踪与性能监视平台,特别适用于微服务架构、云原生环境以及基于容器(如Docker、Kubernetes)的应用部署。该项目由吴晟发起,并已加入Apache软件基金会的孵化器,现已成为顶级项目之一。
核心特性与功能包括:
-
分布式追踪:提供从终端用户请求到后端服务的完整调用链路视图,帮助开发者快速定位分布式系统中的性能瓶颈和错误根源。
-
性能监控:收集并分析服务及服务间调用的性能指标,如响应时间、吞吐量、错误率等,支持服务级和接口级的监控。
-
服务网格观测:除了自动探针外,SkyWalking还能与Istio、Envoy等服务网格集成,通过服务网格的基础探针来收集数据,进一步增强观测能力。
-
多语言支持:SkyWalking原生支持Java、.NET Core等多种语言,并且持续扩展中,同时也提供手动打点SDK以支持更多语言环境,如Go、C++等。
-
自动探针:通过探针(Agents)在无需修改应用程序代码的情况下,利用字节码植入技术收集运行时数据,实现对应用程序性能的透明监控。
-
丰富的插件生态:为常见的基础设施和框架(如Tomcat、Spring、MySQL、Dubbo、Kafka等)提供了丰富的监测插件,易于集成到现有系统中。
-
告警与通知:根据预定义的规则,当检测到性能异常或故障时,能够及时发出告警并通过邮件、短信、Slack等渠道通知相关人员。
-
可视化界面:提供直观的Web UI,展示服务拓扑图、追踪详情、性能指标图表等,便于运维人员和开发团队理解和优化系统性能。
-
可扩展的存储:支持将数据存储在Elasticsearch、H2、MySQL等不同后端,以适应不同规模和需求的场景。
最新版本的SkyWalking(根据之前的更新信息,但请注意实际版本可能已更新)强调了gRPC上报日志的能力,意味着它能够高效地处理现代微服务架构中的大量监控数据传输需求。随着项目的不断发展,其功能集和性能也在不断进化,以更好地服务于日益复杂的云原生应用环境。
2.原理
新版Skywalking 9.x APM监控系统 .mp4(35.1 MB)- 0%
二.Skywalking 9.4 安装
1.创建 docker-compose.yml 的文件
根据你的需求和环境配置相关服务,比如Elasticsearch、SkyWalking OAP Server(OAP : 全称Observability Analysis Platform,可观测性分析平台)、SkyWalking UI等。例如:
version: '3.3'
services:
skywalking-oap:
image: registry.cn-beijing.aliyuncs.com/all100/skywalking-oap-server:9.4.0
restart: always
environment:
- SW_STORAGE_ES_CLUSTER_NODES=http://192.168.21.100:9200 # 替换为你的Elasticsearch地址
# 可根据需要添加其他环境变量
ports:
- 11800:11800 # gRPC
- 12800:12800 # RESTful API
- 11900:11900 # metrics export
skywalking-ui:
image: registry.cn-beijing.aliyuncs.com/all100/skywalking-ui:9.4.0
restart: always
environment:
- SW_OAP_ADDRESS=http://skywalking-oap:12800
ports:
- 8080:8080 # SkyWalking UI 访问端口
depends_on:
- skywalking-oap
2.启动SkyWalking
docker-compose up -d
3.验证安装:
等待所有服务启动完成,可以通过访问SkyWalking UI的默认端口(如http://192.168.21.100:8080)来验证安装是否成功。首次启动Elasticsearch可能需要一些时间来初始化。
三. SpringBoot集成Skywalking
1. 下载Java Agent,
https://skywalking.apache.org/downloads/
2.指定对应的版本下载
apache-skywalking-java-agent(8.8.0-9.2.0,一共12个版本).7z(310.9 MB)
建议使用8.15.0 , 9.x版本有bug
3.解压到任意位置
4.添加VM启动参数
-javaagent:d:optskywalking-agentskywalking-agent.jar
-Dskywalking.agent.service_name=bm-member-service-app
-Dskywalking.collector.backend_service=192.168.21.100:11800
这三个参数是在启动Java应用时用来配置Apache SkyWalking Java Agent的JVM参数,它们各自代表的意义如下:
-
**
-javaagent:d:optskywalking-agentskywalking-agent.jar
**这个参数指定了SkyWalking Java Agent的路径和文件名。当你在启动Java应用时使用这个参数,JVM将会加载这个Agent。在这个例子中,Agent位于d:optskywalking-agentskywalking-agent.jar
。Agent负责收集应用的性能数据、追踪信息等,并按照配置发送给SkyWalking后端服务。 -
**
-Dskywalking.agent.service_name=bm-product-service-app
**这个系统属性设置了被监控服务的名称。在SkyWalking中,每个应用或服务都需要一个唯一的名称以便于在UI界面识别和管理。在这个例子中,服务名称被设定为bm-product-service-app
,这将帮助区分和标识你的应用在SkyWalking监控界面中的显示和报告。 -
**
-Dskywalking.collector.backend_service=192.168.21.100:11800
**此参数配置了SkyWalking后端collector(收集器)的服务地址和端口号。数据将被发送到这个地址上进行处理和分析。在这个例子中,collector运行在IP地址为192.168.21.100
的主机上,监听端口为11800
。确保这个地址是正确的,且SkyWalking OAP Server正在此地址上运行并等待接收数据。
综上所述,这三个参数共同确保了Java应用能够正确地集成SkyWalking监控系统,定义了Agent的位置、服务的标识以及数据上报的目标地址。
5.启动项目,调用接口,验证SkyWalking UI界面
6.高级使用
6.1验证使用环境变量(推荐这种用法,可以和k8s完美结合)
设置了环境变量,包括服务名(
SW_AGENT_NAME
)、SkyWalking Collector的地址(SW_AGENT_COLLECTOR_BACKEND_SERVICES
),以及通过JAVA_TOOL_OPTIONS
来激活Java Agent。
6.2 最终dockerfile文件内容
# 基础镜像
FROM registry.cn-beijing.aliyuncs.com/205erp/myopenjdk:8.5
# 设置工作目录
WORKDIR /opt
# 拷贝jar包到工作目录
COPY target/*.jar app.jar
RUN ls
# 设置暴漏的端口
EXPOSE 8080
# 启动jar包
#ENTRYPOINT ["java","-jar","app.jar"]
CMD java ${JAVA_TOOL_OPTIONS} -jar app.jar
6.3 最终k8s.yml文件内容
apiVersion: apps/v1
kind: Deployment
metadata:
name: bm-member-service-app
spec:
replicas: 1
selector:
matchLabels:
app: bm-member-service-app
template:
metadata:
labels:
app: bm-member-service-app
spec:
containers:
- name: bm-member-service-app
image: registry.cn-beijing.aliyuncs.com/205erp/beimao-member-service-app:2024-06-04-21-27-47
ports:
- containerPort: 8080
env: # 添加环境变量配置
- name: SW_AGENT_NAME
value: "bm-member-service-app"
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "192.168.11.221:11800"
- name: JAVA_TOOL_OPTIONS
value: "-javaagent:/skywalking-agent/skywalking-agent.jar"
volumeMounts: # 添加日志挂载配置
- name: app-logs
mountPath: /logs
volumes: # 定义挂载卷
- name: app-logs
hostPath: # 使用HostPath类型挂载到主机
path: /logs # 这里填写主机上的日志目录路径
type: DirectoryOrCreate # 如果需要自动创建目录