随着微服务的越来越流行,我们服务之间的调用关系就显得越来越复杂,我们急需一个 APM
工具来分析系统中存在的各种性能指标问题以及调用关系。目前主流的APM工具有 CAT
、 Zipkin
、 Pinpoint
以及 SkyWalking
,本文主要简单介绍一下 SkyWalking
的搭建。
SkyWalking
主要的几个组成模块。
1、 Agent
主要负责从系统中采集各种指标,链路数据,发送给 oap
服务。
2、 oap
服务接收 Agent
发送过来的数据,存储,执行分析,提供查询和报警功能。
3、 Storage
和 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
skywalking ├── ext-config │ └── application.yml ├── ext-libs ├── skywalking.yml └── temp.txt
http://localhost:9020
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
中
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.0.1</version> </dependency>
<?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...
使用如下命令,需要折成一行 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 服务的地址
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界面