目录
1、安装部署skywalking
1.1 环境准备
1.2 部署步骤
2、微服务整合skywalking实现链路监控
2.1 下载skywalking官方版本
2.2 将微服务引入skywalking监控
2.3 以上配置完成后启动服务即可实现链路监控
3、通过logback+ELFK实现全链路日志追踪
3.1 安装ELFK
3.2 添加依赖
3.3 logback文件配置
3.4 重启项目,调用测试接口
3.5 filebeat采集日志文件通过logstash输出到es
3.6 按上述配置启动filebeat,重新调用测试接口
4、tranceId在异步线程和feign调用过程中的传递
4.1 异步链路监控
4.2 feign调用的链路监控
1、安装部署skywalking
本节介绍通过docker-compose安装skywalking+es
1.1 环境准备
- 安装docker和compose
1.2 部署步骤
- 创建目录
mkdir -p /usr/local/skywalking/
cd /usr/local/skywalking/
- 编写compose文件
vim docker-compose.yml
version: '3.8'
services:
elasticsearch:
image: elasticsearch:7.14.1
container_name: elasticsearch
restart: always
ports:
- 9200:9200
healthcheck:
test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- TZ=Asia/Shanghai
ulimits:
memlock:
soft: -1
hard: -1
oap:
image: apache/skywalking-oap-server:8.1.0-es7
container_name: oap
depends_on:
- elasticsearch
links:
- elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
healthcheck:
test: ["CMD-SHELL", "/skywalking/bin/swctl"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
environment:
TZ: Asia/Shanghai
SW_STORAGE: elasticsearch7
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
ui:
image: apache/skywalking-ui:8.1.0
container_name: ui
depends_on:
- oap
links:
- oap
restart: always
ports:
- 8080:8080
environment:
TZ: Asia/Shanghai
SW_OAP_ADDRESS: oap:12800
- 启动
docker-compose up -d
- 访问首页(localhost:8080)
mkdir -p /usr/local/skywalking/
cd /usr/local/skywalking/
vim docker-compose.yml
docker-compose up -d
2、微服务整合skywalking实现链路监控
2.1 下载skywalking
https://archive.apache.org/dist/skywalking/8.1.0/apache-skywalking-apm-es7-8.1.0.tar.gz
2.2 微服务引入skywalking监控
- 将下载的安装包解压到/usr/local/skywalking目录,找到skywalking-agent.jar
apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
https://archive.apache.org/dist/skywalking/8.1.0/apache-skywalking-apm-es7-8.1.0.tar.gz
2.2 微服务引入skywalking监控
- 将下载的安装包解压到/usr/local/skywalking目录,找到skywalking-agent.jar
apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
- 将上述agent路径配置到微服务启动参数中,并配置环境变量如下:
-javaagent:/usr/local/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -Dskywalking.agent.service_name=art-mall-1 -Dskywalking.collector.backend_service=localhost:11800
参数解释:
| /usr/local/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar | 本地agent的jar包位置 |
| -Dskywalking.agent.service_name=art-mall-1 | 注册到skywalking上的服务名称 |
| -Dskywalking.collector.backend_service=localhost:11800 | skywalking接收agent发送采集数据的服务及端口 |
2.3 以上配置完成后启动服务即可实现链路监控
- 仪表盘
- 拓扑图
- 追踪
3、通过logback+ELFK实现全链路日志追踪
3.1 安装ELFK
es在第一节中已安装,其他请自行百度安装!
3.2 添加依赖
版本号与前面的skywalking对应
org.apache.skywalking apm-toolkit-logback-1.x8.1.0 org.apache.skywalking apm-toolkit-trace8.1.0
3.3 logback文件配置
art-logback
${CONSOLE_LOG_MDC_PATTERN}
INFO
${LOG_HOME_LINUX}/info/info.%d{yyyy-MM-dd}.log
30
20GB
UTF-8
${FILE_LOG_PATTERN}
error
${LOG_HOME_LINUX}/error/error.%d{yyyy-MM-dd}.log
30
20GB
UTF-8
${FILE_LOG_PATTERN}
配置项解释:
- org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout
logback通过配置该layout可获取skywalking生成的tranceId
- [%X{tid}]
可在日志的对应位置打印出tranceId,如:
[TID:5f6c5312b8e7445187565b1cb7368cd7.94.16340474835950001]
3.4 重启项目,调用测试接口
- 测试接口
@PostMapping(value = "/test")
public ArtMallResult testTranceId(@RequestParam String id){
log.info("测试日志打印tranceId");
return ArtMallResultBuild.buildSuccess("success");
}
- 日志打印如下:
2021-10-12 22:17:18.297 [TID:5ccddc5f4d364a38bcad8e9ebbd3e18e.93.16340482375740001] INFO 3417 --- [nio-8085-exec-1] c.y.y.a.m.c.c.PCCommodityController : 测试日志打印tranceId
3.5 filebeat采集日志文件通过logstash输出到es
中间通过logstash中转是因为其有更好的过滤功能,可视情况决定是否使用logstash。
- filebeat.yml配置文件
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/logs/info
@PostMapping(value = "/test1")
public ArtMallResult testTranceId(@RequestParam String id){
ActiveSpan.tag("type", "异步任务多线程任务");
testThreadPool.submit(RunnableWrapper.of(() -> {
ActiveSpan.tag("type", "测试异步1");
log.info("1-testThreadPool 测试一下tranceId的异步传递...");
}));
testThreadPool.submit(CallableWrapper.of(() -> {
ActiveSpan.tag("type", "测试异步2");
log.info("2-testThreadPool 测试一下tranceId的异步传递...");
return null;
}));
return ArtMallResultBuild.buildSuccess("success");
}
4、打印日志如下:
2021-10-13 10:31:53.605 [TID:2096e377f09744ac8004aaa0877bc707.91.16340923134680001] INFO 4404 --- [nio-8085-exec-1] com.yun.ying.art.mall.filter.CorsFilter : request path : /pc/commodity/test1 2021-10-13 10:31:54.348 [TID:2096e377f09744ac8004aaa0877bc707.91.16340923134680001] INFO 4404 --- [testThreadPool1] c.y.y.a.m.c.c.PCCommodityController : 1-testThreadPool 测试一下tranceId的异步传递... 2021-10-13 10:31:54.365 [TID:2096e377f09744ac8004aaa0877bc707.91.16340923134680001] INFO 4404 --- [testThreadPool2] c.y.y.a.m.c.c.PCCommodityController : 2-testThreadPool 测试一下tranceId的异步传递...
5、链路追踪展示
4.2 feign调用的链路监控
参考第2节内容,为每个微服务都整合skywalking的链路监控即可



