本文参考:
1. 概述
1.1 概念
Skywalking是什么?
FROM http://skywalking.apache.org
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
1.2 功能列表
SkyWalking 有哪些功能?
FROM http://skywalking.apache.org/
- 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
- 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
- 轻量高效。无需大数据平台,和大量的服务器资源。
- 模块化。UI、存储、集群管理都有多种机制可选。
- 支持告警。
- 优秀的可视化解决方案。
1.3 整体架构
SkyWalking 整体架构如何?
整个架构,分成上、下、左、右四部分:
- 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
- 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
- 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
- 左部分 SkyWalking UI :负责提供控台,查看链路等等。
2. 搭建 SkyWalking 单机环境
搭建一个 SkyWalking 单机环境,步骤如下:
- 搭建一个 elasticsearch 服务;
- 下载 skywalking 软件包;
- 搭建一个 skywalking OAP 服务;
- 启动一个 Spring Boot 应用,并配置 SkyWalking Agent;
- 搭建一个 SkyWalking UI 服务。
主机信息:
OS: centos7.9
IP: 192.168.199.101
docker server版本:20.10.7
2.1 拉取镜像
docker pull elasticsearch:7.5.1
docker pull apache/skywalking-oap-server:6.6.0-es7
docker pull apache/skywalking-ui:6.6.0
注意:使用最新版本的es和skywalking会存在问题,必须使用上述版本。
下载源代码包,下面会使用 agent
https://archive.apache.org/dist/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz
2.2 Elasticsearch搭建
2.2.1 修改系统参数
cat << 'EOF' >> /etc/sysctl.conf
vm.max_map_count=262144
EOF
sysctl -p
2.2.2 启动 es
docker run -d --name=es7 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" elasticsearch:7.5.1
等待30秒左右,查看docker日志,有如下记录:
{"type": "server", "timestamp": "2023-02-21T08:16:37,977Z", "level": "INFO", "component": "o.e.c.s.MasterService", "cluster.name": "docker-cluster", "node.name": "29de38aae9c9", "message": "elected-as-master ([1] nodes joined)[{29de38aae9c9}{5XhcKzyZSDySlB7Vk-fE9A}{1DpxpZ9dTDyLShNZRx6GmQ}{172.17.0.2}{172.17.0.2:9300}
通过 curl 访问返回:
> curl localhost:9200
{
"name" : "29de38aae9c9",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "_7Nk6CLpRtCjkv50eQa7eA",
"version" : {
"number" : "7.5.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "3ae9ac9a93c95bd0cdc054951cf95d88e1e18d96",
"build_date" : "2019-12-16T22:57:37.835892Z",
"build_snapshot" : false,
"lucene_version" : "8.3.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
即为启动成功。
2.2.3 持久保存es数据
持久化 elasticsearch 方案:
mkdir -p /data/elasticsearch
docker cp es7:/usr/share/elasticsearch/data /data/elasticsearch/
docker cp es7:/usr/share/elasticsearch/logs /data/elasticsearch/
docker rm -f es7
docker run -d --name=es7 \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.5.1
2.3 安装 SkyWalking OAP
注意:等待 elasticsearch 启动完成,再启动 OAP
2.3.1 以容器启动
docker run --name oap --restart always -d \
--restart=always \
-e TZ=Asia/Shanghai \
-p 12800:12800 \
-p 11800:11800 \
--link es7:es7 \
-e SW_STORAGE=elasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 \
apache/skywalking-oap-server:6.6.0-es7
2.4 安装 SkyWalking UI
2.4.1 以容器启动
docker run -d --name skywalking-ui \
--restart=always \
-e TZ=Asia/Shanghai \
-p 8088:8080 \
--link oap:oap \
-e SW_OAP_ADDRESS=oap:12800 \
apache/skywalking-ui:6.6.0
3. spring-boot实例部署
3.1 项目地址
项目地址:https://github.com/solochen84/SpringBootDemo
3.2 制作jar包
需要安装 jdk1.8 和 maven的支持,使用 maven打包:
mvn clean package
3.3 启动jar包
原来的启动方式为:
java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar
那么使用skywalking agent,启动命令为:
java -javaagent:apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=spring-boot-demo -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar spring-boot-demo-0.0.1-SNAPSHOT.jar
说明:
- -javaagent - 指定agent包位置。这里我将apache-skywalking-apm-6.6.0.tar.gz解压到/opt目录了,因此路径为:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar
- -Dskywalking.agent.service_name - 指定服务名,服务名会在skywalking UI中显示
- -Dskywalking.collector.backend_service - 指定skywalking oap地址,由于在本机,地址为:127.0.0.1:11800
- -jar - 指定jar包的路径,这里我直接放到/opt/目录了。
4. 访问UI
http://192.168.199.101:8088/
因为机制为懒加载,所以当只有你调用该java接口时,页面上才有显示。所以第一次访问时,数据是没有的。
5. 访问demo接口
SpringBootDemo启动端口为:8080,api接口有3个:
GET /
GET /?name=hukey
GET /random
页面多刷新几次接口:
http://192.168.199.101:8080/
http://192.168.199.101:8080/?name=hukey
http://192.168.199.101:8080/random
6. 仪表盘
刷新UI页面,选择最近 15 分钟或者近1天的。
拓扑图:
7. 追踪
同样,可查看最近15分钟或1天
8. 告警
9. 指标
这里可选三个指标进行对比。