SkyWalking 分布式追踪系统
SkyWalking 是一个开源可观测平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来保持分布式系统的清晰视图,甚至跨云。它是一种现代 APM,专为云原生、基于容器的分布式系统而设计。
Apache SkyWalking 分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器的 (Kubernetes) 架构而设计。
APM, Application Performance Monitoring System
为什么使用 SkyWalking
SkyWalking 为在许多不同场景中观察和监控分布式系统提供解决方案。首先,与传统方法一样,SkyWalking 为 Java、C#、Node.js、Go、PHP 和 Nginx LUA 等服务提供自动仪器代理。
在多语言、持续部署的环境中,云原生基础架构变得更加强大,但也更加复杂。SkyWalking 的服务网格接收器允许 SkyWalking 接收来自 Istio/Envoy 和 Linkerd 等服务网格框架的遥测数据,让用户了解整个分布式系统。
SkyWalking 为服务、服务实例、端点、进程提供可观察性能力。如今,Service、Instance 和 Endpoint 等术语随处可见,因此值得在 SkyWalking 的上下文中定义它们的具体含义:
- 服务(Service)。表示为传入请求提供相同行为的一组/一组工作负载。您可以在使用仪器代理或 SDK 时定义服务名称。SkyWalking 还可以使用您在 Istio 等平台中定义的名称。
- 服务实例(Service Instance)。服务组中的每个单独的工作负载都称为一个实例。就像pods在 Kubernetes 中一样,它不需要是单个操作系统进程,但是,如果您使用仪器代理,则实例实际上是一个真正的操作系统进程。
- 端点(Endpoint)。用于传入请求的服务中的路径,例如 HTTP URI 路径或 gRPC 服务类 + 方法签名。
- Process(进程)。一个操作系统进程。在某些场景下,一个 Service Instance 不是一个进程,比如一个 Pod Kubernetes 可能包含多个进程。
SkyWalking 允许用户了解Services 和Endpoints 的拓扑关系,查看每个Service/Service Instance/Endpoint 的指标,并设置报警规则。
从 v9 开始,SkyWalking 引入了新的核心概念Layer。层代表计算机科学中的一个抽象框架,例如操作系统(OS_LINUX 层)、Kubernetes(k8s 层)。所有检测到的实例都属于一个层来表示该实例的运行环境,服务将根据其实例具有一个或多个层定义。
Architecture
SkyWalking 在逻辑上分为四个部分:Probes、Platform backend、Storage 和 UI。
- 探测器(Probes) 收集数据并根据 SkyWalking 要求重新格式化(不同的探测器支持不同的来源)。
- 平台后端(Platform backend) 支持数据聚合、分析和流式处理,包括跟踪、度量和日志。
- 存储(Storage) 通过开放/可插入接口存储 SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、InfluxDB,也可以自己实现。欢迎为新的存储实现者打补丁!
- UI 是一个高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。
SkyWalking’s backend distribution package
-
bin/cmd scripts: 定位到文件夹 /bin。 包括启动后台服务与UI的 linux shell 和 Windows cmd scripts。
-
Backend config: 定位到文件夹 /config。包括后台服务的设置文件:
- application.yml
- log4j.xml
- alarm-settings.yml
-
Libraries of backend: 定位到文件夹 /oap-libs。 包括所有后台服务依赖。
-
Webapp env: 定位到文件夹 webapp。有 UI frontend jar 文件, 还有
webapp.yml
设置文件
SkyWalking 的 OAP 后端
|
|
- 默认存储 H2
- 默认监听 0.0.0.0/11800 for gRPC APIs and 0.0.0.0/12800 for HTTP REST APIs.
默认启动脚本是 /bin/oapService.sh
OAP 服务器的地址。默认值为 http://127.0.0.1:12800
UI Setup
SkyWalking UI 分发版已经包含在我们的 Apache 官方版本中。
UI listens on 8080 port and request 127.0.0.1/12800 to run a GraphQL query.
|
|
|
|
启动脚本 /bin/webappService.sh
Java agent’s toolkits
https://skywalking.apache.org/docs/main/latest/en/setup/backend/log-analyzer/
输出 trace ID
引入对应pom
|
|
修改 log4j2.xml 文件
|
|
gRPC reporter
|
|
|
|
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}