1 SkyWalking
1.1 概述
SkyWalking 是什么?
SkyWalking是一款分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器的 (Kubernetes) 架构而设计。
1.2 功能列表
既然这么强大,那么SkyWalking 有哪些功能呢?
- 跟踪、指标和日志记录:SkyWalking 旨在实现一致的可观察性。在浏览器中监控您的应用程序发生的一切
- 服务网格和 FaaS 准备就绪:内置服务网格和 FaaS 可观察性。从 Istio + Envoy Service Mesh 和 OpenFunction 作为 FaaS 平台收集和分析数据。
- 可插拔存储:SkyWalking 支持广泛的后端存储解决方案,支持(H2、OpenSearch、ElasticSearch 6, 7, 8、MySQL、TiDB、PostgreSQL、BanyanDB)并且它们是可插拔的。
- 多种监控手段:通过语言探针和 Service Mesh 等手段,获得链路、日志、指标等监控数据
- 多个语言探针:Java、.Net Core、PHP、NodeJS、Golang、LUA、Rust、C++ 等
- 轻量级高性能:无需大数据组件,无需大量的硬件资源,且对应用实例的负载消耗极低
- 模块化架构:数据传输、数据存储,注册发现等模块,可替换不同的基础设施实现
- 端到端的监控:SkyWalking 提供本地代理并与全球可观察性工具配合使用以支持所有堆栈监控,前端:Vue、React 等,后端:Java、.Net Core、PHP、NodeJS、Golang、Istio 等
- 告警支持:内置 webhook 支持通过 HTTP、gRPC、Slack 等自动发送事件通知
- 可视化界面:好用的监控后台,可支持自定义配置,或是进一步自定义它或集成您自己的。
1.3 整体架构
SkyWalking 整体架构如何?
SkyWalking 在逻辑上分为四个部分:Probes、Platform backend、Storage 和 UI。
- Agent:在应用中,收集 Trace、Log、Metrics 等监控数据,使用 RPC、RESTful API、Kafka 等 Transport 传输方式,发送给 OAP 服务,包括各种格式的指标、跟踪、日志和事件(SkyWalking、Zipkin、OpenTelemetry、Prometheus、Zabbix 等)
- 平台后端:支持数据聚合、分析和流式处理,涵盖跟踪、指标、日志和事件。作为聚合者角色、接收者角色或两者兼而有之。
- Storage:通过开放/可插入接口存储 SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、BanyanDB,也可以自己实现。
- Web UI:是一个高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。
1.4 官方文档
在 https://skywalking.apache.org/docs/main/latest/readme/ 地址下,提供了 SkyWalking 的英文文档。
考虑英语水平有限,推荐先阅读 https://github.com/SkyAPM/document-cn-translation-of-skywalking 地址,提供了 SkyWalking 的中文文档。
2. 搭建skywalking 单机环境
2.1 环境
本次搭建基于容器环境,如果有不了解容器的,请先阅读之前我写过的两篇文章
2.2 skywalking docker-compose 准备
- 新建skywalking目录
mkdir skywalking
cd skywalking
mkdir elasticsearch && cd elasticsearch
mkdir config && cd config
touch elasticsearch.yml
- 编辑elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
# In tracing scenario, consider to set more than this at least.
# thread_pool.index.queue_size: 1000 # Only suitable for ElasticSearch 6
thread_pool.write.queue_size: 1000 # Suitable for ElasticSearch 6 and 7
然后保存
3. 新建docker-compose.yaml
version: '3.3'
services:
elasticsearch:
image: elasticsearch:7.17.5
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch"
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms1g -Xmx2g"
volumes:
- ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
- ./elasticsearch/data:/usr/share/elasticsearch/data
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
restart: always
oap:
image: apache/skywalking-oap-server:9.1.0
container_name: oap
depends_on:
- elasticsearch
links:
- elasticsearch:elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
volumes:
- ./config:/skywalking/config
environment:
SW_STORAGE: elasticsearch
SW_NAMESPACE: sk-es
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
SW_STORAGE_ES_ADVANCED: "{\"index.translog.durability\":\"request\",\"index.translog.sync_interval\":\"5s\"}"
SW_STORAGE_ES_INDEX_SHARDS_NUMBER: 2
SW_STORAGE_ES_BULK_ACTIONS: 2000
SW_STORAGE_ES_BULK_SIZE: 20
SW_STORAGE_ES_FLUSH_INTERVAL: 10
SW_STORAGE_ES_CONCURRENT_REQUESTS: 2
SW_STORAGE_DAY_STEP: 15
SW_CORE_RECORD_DATA_TTL: 15
SW_CORE_METRICS_DATA_TTL: 20
skywalking-ui:
image: apache/skywalking-ui:9.1.0
container_name: skywalking-ui
depends_on:
- oap
links:
- oap
restart: always
ports:
- 9090:8080
environment:
SW_OAP_ADDRESS: http://oap:12800
SW_TIMEOUT: 5000
编辑完保存
- 运行容器
在skywalking目录下运行容器
docker-compose up -d
出现以下代表安装成功
- 访问 UI 界面
浏览器输入http://127.0.0.1:9090/,出现以下界面
2.3 SkyWalking Java Agent
-
进入skywalking 下载页面,下载Java Agent最新包
-
解压缩skywalking-agent.jar
- 配置 Java 启动脚本
- idea 启动
jvm 参数
-javaagent:/Users/zhangsan/skywalking/agent/skywalking-agent.jar
SkyWalking Agent 配置
SW_AGENT_NAME=sparkzxl-auth-server;SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_SPAN_LIMIT=3000
参数 | 说明 | 示例值 |
---|---|---|
SW_AGENT_NAME | 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 spring.application.name |
sparkzxl-auth-server |
SW_AGENT_COLLECTOR_BACKEND_SERVICES | 配置 Collector 地址(OAP连接地址) | 127.0.0.1:11800 |
SW_AGENT_SPAN_LIMIT | 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕 | 2000 |
- 启动 Spring Boot 项目
idea 启动项目,在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下:
EBUG 2022-07-27 17:22:43.915 main AgentPackagePath : The beacon class location is jar:file:/Users/zhouxinlei/skywalking/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
INFO 2022-07-27 17:22:43.916 main SnifferConfigInitializer : Config file found in /Users/zhouxinlei/skywalking/agent/config/agent.config.
同时,也可以在 /Users/zhangsan/skywalking-agent/logs/skywalking-api.log 查看对应的 SkyWalking Agent 日志。
2.4 简单测试
启动完成后,可以去 SkyWalking UI 查看是否链路收集成功。
① 打开 http://127.0.0.1:9090/ 地址,进入 SkyWalking UI 界面。
② 点击service names
可以看到很多指标
③ 点击Trace,追踪接口请求
④其他tab
3 彩蛋
本文仅仅是简单的 SkyWalking 入门文章,如果想要更好的使用 SkyWalking,推荐通读下《SkyWalking 文档》 。
😈 最后弱弱的问一句,上完 SkyWaling 之后,有没发现自己系统各种地方慢慢慢!嘻嘻!
下一节讲解skywalking 日志追踪分析,先上个效果图: