【springcloud】快速搭建一套分布式服务springcloudalibaba(五)
第五篇 基于nacos搭建分布式项目 分布式系统日志(skywalking+es)
项目所需 maven + nacos + java8 + idea + git + mysql + redis + skywalking + es
本文主要从客户下单时扣减库存的操作,将链路日志模拟出来,网关系统/用户系统/商品系统/订单系统
上文只介绍了skywalking的使用,使用的默认配置与h2存储,本文补充为es查询。
基于nacos搭建分布式项目 分布式系统日志
- es与kibana
- 版本建议
- 配置信息
- es
- kibana
- 启动验证
- skywalking 配置更改es存储
- 重启前需要先关闭之前启动的skywalking
- 启动命令
- 校验是否与es建立连接
- 第一步(检查skywalking与es连接)
- 第二步(查看有没有自动创建es索引)
- 第三步(启动所有项目)
- 验证
- 第四步(查看日志有没有存储到es)
- 第五步(查看skywalking页面是否正常)
- 结尾
es与kibana
安装与配置本文就不写了,往上都有,需要注意的是版本使用问题。
本文使用的6.8.23
版本建议
-
Elasticsearch 5.x 和 6.x 版本与 Java 8 兼容性最好
-
Elasticsearch 7.x 需要 Java 11+,但某些早期 7.x 版本仍支持 Java 8
-
kibana与es版本保持一致即可
# 检查系统架构
uname -mwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.tar.gzwget https://artifacts.elastic.co/downloads/kibana/kibana-6.8.23-linux-x86_64.tar.gz
配置信息
es
需要修改的信息
/opt/elasticsearch/config/elasticsearch.yml
network.host: 0.0.0.0
kibana
需要修改的信息
/opt/kibana/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
启动验证
http://192.168.99.104:9200
http://192.168.99.104:5601
skywalking 配置更改es存储
重启前需要先关闭之前启动的skywalking
# 第一步先删除上一次的日志信息 方便排查启动问题
cd /youfileName/apache-skywalking-apm-bin/logsrm -rf skywalking-oap-server.log# 修改配置文件
vim /youfileName/apache-skywalking-apm-bin/config/application.yml
# 默认为h2 修改为elasticsearch 默认配置中的端口都是配置好的,如果你修改了es的用户名和密码 记得修改!
selector: ${SW_STORAGE:elasticsearch}
启动命令
因为上次已经启动部署过了,没有关闭。修改配置文件需要先关闭重启。如果直接重启配置文件不会生效。
# 先查看有没有 skywalking 的程序在跑
ps aux | grep -i 'skywalking'
# 关闭所有关于skywalking的应用
sudo pkill -f 'skywalking'
# 重新启动
sh ./oapService.sh
SkyWalking OAP started successfully!原神,启动!!!
校验是否与es建立连接
第一步(检查skywalking与es连接)
cd /youfielName/apache-skywalking-apm-bin/logs
cat skywalking-oap-server.log
# 看看日志中有没有获取到es版本信息
2025-06-15 15:14:40,077 - org.apache.skywalking.library.elasticsearch.ElasticSearch - 146 [armeria-eventloop-epoll-4-2] INFO [] - ElasticSearch version is: ElasticSearch 6.8
第二步(查看有没有自动创建es索引)
curl http://192.168.99.104:9200/_cat/indices?v
# 默认情况下 skywalking会在es中创建sw_log-20250615 看查询出来的索引信息中有没有 http://192.168.99.104:9200/sw_log-*/_mapping?pretty
# 查看skywalking索引有没有创建成功
第三步(启动所有项目)
这里我演示的是客户下单时扣减库存的操作,启动之后请求登陆然后下单。
# 这个是order服务请求
http://192.168.99.104:8070/order/goods/get?productId=1
TID: [SegmentId].[SpanId].[Timestamp]
TID:af7d7480fd8a4f4eb1273b0949ce11b6.58.17499719070320001 这个就是skywalking默认注入的tid,同一链路会通过请求头传递
-
SegmentId:唯一标识一个服务实例的调用链段
-
SpanId:标识当前调用环节在调用链中的位置
-
Timestamp:纳秒级时间戳
验证
order-service 在8070
goods-service在8090
第四步(查看日志有没有存储到es)
GET /sw_log-20250615/_search?scroll=1m&pretty
{"size": 100,"query": {"match_all": {}}
}
第五步(查看skywalking页面是否正常)
通过同一链路id可以查询到当前链路下的所有日志
小结
之后楼主会解锁更多适合初学者关于分布式系统的文章,更新自己的技术库,如果有不明白的欢迎评论留言,这里谢谢大家阅读。
结尾
第一篇快速部署一套分布式服务
第二篇 基于nacos搭建分布式项目 网关
第三篇 搭建分布式项目 分布式事务(分布式锁+事务)
第四篇 搭建分布式项目日志 skywalking初体验
希望本文可以帮到你。