这篇文章讲述 Skywalking 的简单安装及使用,后续再有文章分析其背后的数据模型。
概述
Apache Skywalking 专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的 APM 系统。Apache Skywalking 通过加载探针的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。Apache Skywalking 目前支持多种语言,其中包括 Java,.Net Core,Node.js 和 Go 语言。其架构如下所示:
整个系统分为三部分:
- agent:采集 tracing(调用链数据)和 metric(指标)信息并上报;
- OAP:收集 tracing 和 metric 信息通过 analysis core 模块将数据放入持久化容器中(ES,H2(内存数据库),mysql等等),并进行二次统计和监控告警;
- webapp:前后端分离,前端负责呈现,并将查询请求封装为 graphQL 提交给后端,后端通过 ribbon 做负载均衡转发给 OAP 集群,再将查询结果渲染展示。
安装
1. 版本约定
- OS: centos 7;
- Skywalking: 8.7.0 for es7;
- Elasticsearch: 7.14.2;
- Kibana: 7.14.2
Elasticsearch 及 Kibana 安装部署参考之前的文章:Docker 下安装 ES, Kibana
2. 下载安装
1 | # 下载 skywalking |
3. 修改 Skywalking 配置
将 Skywalking 数据存储改为 Elasticsearch7, 修改 config/application.yaml 文件。
1 | storage: |
4. 启动 Skywalking
修改配置之后保存,便可启动 Skywalking.
1 | # 启动 SkyWalking OAP 服务 |
5. 修改 SkyWalking UI 服务1
2# 启动 SkyWalking UI 服务
$ bin/webappService.sh
SkyWalking UI 默认端口是 8080
, 可以通过 webapp/webapp.yaml
进行修改,在这里我们修改为 8081
. 输入地址 http://127.0.0.1:8081
便可访问 Skywalking.
集成
SkyWalking 已经部署完成,现在需要将应用 trace 及 metric 日志采集到 SkyWalking, 对于 Java 应用来说相对比较简单,使用 javaagent
便可集成 SkyWalking.
1. 使用环境变量
1 | # SkyWalking Agent 配置 |
2. 使用 java 参数1
$ java -jar -javaagent:C:/Java/skywalking-es7-8.6.0/agent/skywalking-agent.jar -Dskywalking.agent.application_code=skywalking-lab -Dskywalking.collector.servers=127.0.0.1:11800 skywalking-lab.jar
其中:
- skywalking.agent.application_code: 配置应用名称;
- skywalking.collector.servers: 配置 Collector 地址。
另外,在开发联调阶段,也可以直接在 idea 中进行设置,如下图所示:
日志采集
SkyWalking 除了可以采集 trace 及 metric 数据之外,也可以在 log 日志中加入 traceId
, 并将日志上传存储到 Elasticsearch7 中,结合 trace 一起定位问题。
1. 引入依赖
项目中使用的是 logback 框架,引入 skywalking 依赖即可,如果是其它日志框架,可以在官网中找到相关依赖。
1 | <dependency> |
2. 日志配置
在 logback.xml
文件中加入 skywalking 的 appender
, 其中 tid
表示 tracId
, 最后引用该 appender
输出日志。
1 | <!-- skywalking 通过grpc采集日志 --> |
最后输出的日志格式如下所示:
1
2
3
417:20:53.698 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - [TID:N/A] - Tomcat initialized with port(s): 8070 (http)
17:20:53.706 [main] INFO o.a.coyote.http11.Http11NioProtocol - [TID:N/A] - Initializing ProtocolHandler ["http-nio-8070"]
10:07:21.256 [http-nio-8070-exec-9] INFO o.n.n.NacosProviderApplication$EchoController - [TID:4e52987712fb42308887530e7c8361bb.84.16559500412520005] - Receive a request:skywalking
10:08:12.817 [http-nio-8070-exec-8] INFO o.n.n.NacosProviderApplication$EchoController - [TID:4e52987712fb42308887530e7c8361bb.83.16559500928140003] - Receive a request:skywalking
未收到请求时 traceId
为 [TID:N/A]
, 表示为空,收到请求之后便会正常输出。
3. 配置 agent
在本地 log 文件中包含了 traceId
之后,可以通过 gPRC 将日志传输给 skywalking, 再存储到 Elasticsearch7 中。要完成这个功能,需要在 skywalking-es7-8.6.0/agent/config/agent.config
文件中加入如下配置:1
2
3
4${SW_GRPC_LOG_SERVER_HOST:192.168.1.100} =
${SW_GRPC_LOG_SERVER_PORT:11800} =
${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760} =
${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30} =
通过参数指定日志上报服务的地址和端口,另外这些参数也可以通过环境变量进行配置。
界面
引入应用之后,现在便可采集 trace 及 log 日志,其效果如下所示:
1. trace 查询
2. log 查询
参考:
1. SkyWalking调研与初步实践
2. 使用 Apache Skywalking 做分布式跟踪
3. SkyWalking 极简入门