SpringCloud 集成 skywalking
skywalking 的 maven 依赖,建议放到 SpringCloud 的顶层 pom.xml 文件里面
<!-- 版本参数 -->
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<mysql.version>8.0.23</mysql.version>
<mybatis.version>2.3.2</mybatis.version>
<skywalking.version>8.8.0</skywalking.version>
</properties>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
<!-- skywalking 日志采集依赖 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>${skywalking.version}</version>
</dependency>
在 logback-spring.xml 日志配置文件新增配置
<!-- skywalking 日志采集 -->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] %level [%thread] %logger{60} [%file:%line]: %msg%n</Pattern>
</layout>
</encoder>
</appender>
<root level="info">
<!-- skywalking 追加日志配置 -->
<appender-ref ref="grpc-log"/>
</root>
SpringBoot 应用启动时新增 VM 启动参数
-javaagent:D:/develop/skywalking-agent/skywalking-agent.jar # skywalking-agent 磁盘路径
-Dskywalking.agent.service_name=${服务名称}
-Dskywalking.collector.backend_service=${skywalking 的服务 IP 地址}:11800
docker-compose 部署 skywalking
.env
# 网络名称前缀
COMPOSE_PROJECT_NAME=skywalking
# 挂载目录前缀
MOUNT_PREFIX=/opt
docker-compose.yml
services:
# SpringCloud 配置中心
nacos:
image: nacos/nacos-server:2.0.2
container_name: nacos
environment:
- MODE=standalone
ports:
- "8848:8848"
# - "9848:9848" # spring-cloud-alibaba-dependencies 2.2.7.RELEASE 及以上需开放的端口号
networks:
- skywalking
# 非必要,如果业务需求有的话
mysql:
image: mysql:8.0.23
container_name: mysql
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"
volumes:
- ${MOUNT_PREFIX}/mysql/conf/my.cnf:/etc/mysql/my.cnf
- ${MOUNT_PREFIX}/mysql/data:/var/lib/mysql
- ${MOUNT_PREFIX}/mysql/logs:/logs
networks:
- skywalking
command: --lower-case-table-names=1
elasticsearch:
image: elasticsearch:7.6.2
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
ports:
- "9200:9200"
networks:
- skywalking
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200/_cluster/health"]
interval: 5s # 每 10 秒检查一次
timeout: 5s # 5 秒内没有响应则视为失败
retries: 5 # 重试 5 次后视为失败
start_period: 10s # 容器启动后等待 20 秒再开始健康检查
oap:
image: apache/skywalking-oap-server:8.8.1
container_name: skywalking-oap
environment:
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
ports:
- "11800:11800"
- "12800:12800"
depends_on:
elasticsearch:
condition: service_healthy
networks:
- skywalking
ui:
image: apache/skywalking-ui:8.8.1
container_name: skywalking-ui
environment:
SW_OAP_ADDRESS: http://skywalking-oap:12800
SW_LANG: zh-CN
ports:
- "8080:8080"
networks:
- skywalking
networks:
skywalking:
driver: bridge
拓展:skywalking 自定义 traceId
从官网下载 skywalking 源代码,此处是 8.8.0 版本
位于 skywalking-java-agent\apm-sniffer\apm-agent-core\src\main\java\org\apache\skywalking\apm\agent\core\context\ids\GlobalIdGenerator.java
其中 generate() 方法就是 traceId 的生成策略
修改后打包整个项目(必须右键顶层 pom.xml 进行 package),会生成一个 skywalking-agent 文件夹
将 skywalking-agent 替换掉原来的目录即可