一、背景
随着微服务的越来越流行,我们服务之间的调用关系就显得越来越复杂,我们急需一个 APM
工具来分析系统中存在的各种性能指标问题以及调用关系。目前主流的 APM 工具有 CAT
、Zipkin
、Pinpoint
以及 SkyWalking
,本文主要简单介绍一下SkyWalking
的搭建。
二、SkyWalking 的组成
SkyWalking
主要的几个组成模块。
1、Agent
主要负责从系统中采集各种指标,链路数据,发送给 oap
服务。
2、oap
服务接收 Agent
发送过来的数据,存储,执行分析,提供查询和报警功能。
3、Storage
和 UI
负责存储数据以及查看数据。
三、使用 docker-compose 搭建一个 oap 和 ui 服务
version: '3'
services:
elasticsearch7:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
container_name: elasticsearch7
restart: always
ports:
- 9023:9200
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- TZ=Asia/Shanghai
ulimits:
memlock:
soft: -1
hard: -1
networks:
- skywalking
volumes:
- elasticsearch7:/usr/share/elasticsearch/data
oap:
image: apache/skywalking-oap-server:8.0.1-es7
container_name: oap
depends_on:
- elasticsearch7
links:
- elasticsearch7
restart: always
ports:
- 9022:11800
- 9021:12800
networks:
- skywalking
volumes:
- ./ext-config:/skywalking/ext-config
ui:
image: apache/skywalking-ui:8.0.1
container_name: ui
depends_on:
- oap
links:
- oap
restart: always
ports:
- 9020:8080
environment:
SW_OAP_ADDRESS: oap:12800
networks:
- skywalking
networks:
skywalking:
driver: bridge
volumes:
elasticsearch7:
driver: local
1、docker-compose 文件的目录
skywalking
├── ext-config
│ └── application.yml
├── ext-libs
├── skywalking.yml
└── temp.txt
2、访问
http://localhost:9020
3、注意事项
1、如果我们想覆盖 oap
镜像中的 /skywalking/config
目录下的配置文件,我们可以在 docker
中挂载一个/skywalking/ext-config
目录,将配置文件丢到此目录中即可。
2、如果我们想覆盖 oap
镜像中的 /skywalking/oap-libs
目录下的 jar,我们可以在 docker
中挂载一个/skywalking/ext-libs
目录,将新的 jar 包丢到此目录中即可,但是已经存在的 jar 包无法被覆盖。
3、使用的版本是 8.0.1
,数据持久化到 es7
中
四、全局日志追踪 traceId 的使用
方案一:
1、引入依赖
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.0.1</version>
</dependency>
2、修改 logback.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Logback Configuration. -->
<configuration debug="false">
<!-- ConsoleAppender:把日志输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern><![CDATA[%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} [%X{tid}] %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:-}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
]]></Pattern>
</layout>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
方案二(没有用过)
参考如下链接 https://github.com/apache/sky…
五、idea 或 jar 中使用
使用如下命令,需要折成一行
java -jar
-javaagent:(agentjar 包的位置)(eg: /Users/huan/soft/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar)
-Dskywalking.agent.service_name=xxxxx-service
-Dskywalking.collector.backend_service=127.0.0.1:9022 xxxx.jar
-javaagent
指定 agent jar 包的位置 -Dskywalking.agent.service_name
指定服务名 -Dskywalking.collector.backend_service
指定 oap 服务的地址
六、skywalking 的目录解释
apache-skywalking-apm-bin-es7
├── LICENSE
├── NOTICE
├── README.txt
├── agent
├── activations
├── bootstrap-plugins
├── config -- agent 的配置文件,比如我们上一步使用 -Dskywalking.agent.service_name 配置的这些
├── logs
├── optional-plugins 可选插件(将 optional-plugins 目录的 jar 包放到 plugins 目录下即可启动这些插件)├── plugins 启用的插件
└── skywalking-agent.jar 我们自己的服务需要使用 -javaagent 指定到这个 jar 的位置
├── bin oap/ui 的启动脚本
├── config 配置文件
├── licenses
├── oap-libs
├── tools
└── webapp ui 界面
七、访问 skywalking 的界面
项目源码
docker-compose.yml 文件 https://gitee.com/huan1993/co…
参考链接
SkyWalking 官网 http://skywalking.apache.org/zh/
SkyWalking 的 docker github 地址 https://github.com/apache/sky…
elasticsearch https://www.elastic.co/guide/…
skywalking 中文文档 https://skyapm.github.io/docu…