从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合
🎏:你只管努力,剩下的交给时间
🏠 :小破站
"从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合
- 前言
- 准备工作
- 编写docker-compose.yml文件
- 为什么使用本机ip
- 为什么skywalking-oap-server要映射两个端口
- 启动后为什么skywalking-oap-server会挂掉
- 下载skywalking-agent
- 整合springcloud
- maven坐标实现
- logback.xml实现
- idea中配置
- 最终实现展示
前言
在当今微服务架构的世界中,了解和监控系统的运行状态至关重要。本文将带你进入一个有趣的探险,使用Docker-Compose一键搭建起SkyWalking、Elasticsearch和Spring Cloud的完整监控平台。无需复杂的配置,让我们一起开始这场容器化监控的冒险之旅。
准备工作
- 确保安装了Docker和Docker-Compose。
docker常用命令
docker-compose文件详解以及常用命令
编写docker-compose.yml文件
version: "3"services:# SkyWalking OAP server with Elasticsearch storageskywalking-oap:image: apache/skywalking-oap-server:8.9.0container_name: skywalking-oapports:- "12800:12800"- "11800:11800"networks:- skywalking-networkdepends_on:- skywalking-elasticsearchenvironment:- SW_STORAGE=elasticsearch- TZ=Asia/Shanghai- SW_STORAGE_ES_CLUSTER_NODES=192.168.100.118:19200#volumes:# - ./oap-config:/skywalking/config # 挂载本地目录到容器中# Elasticsearchskywalking-elasticsearch:image: elasticsearch:7.16.3container_name: skywalking-elasticsearchports:- "19200:9200"- "19300:9300"networks:- skywalking-networkenvironment:- discovery.type=single-node- TZ=Asia/Shanghaiulimits:memlock:soft: -1hard: -1nofile:soft: 65536hard: 65536mem_limit: 2g#volumes:# - ./es-data:/usr/share/elasticsearch/data/nodes # 挂载本地目录到容器中# SkyWalking UIskywalking-ui:image: apache/skywalking-ui:8.9.0container_name: skywalking-uiports:- "18080:8080"networks:- skywalking-networkenvironment:- SW_OAP_ADDRESS=http://192.168.100.118:12800- TZ=Asia/Shanghaivolumes:- ./ui-config:/app/config # 挂载本地目录到容器中networks:skywalking-network:driver: bridge
针对上面的yml我下面提几点
为什么使用本机ip
因为我使用的是mac系统,本机与docker不通讯,这里如果你是linux,可以直接写service
为什么skywalking-oap-server要映射两个端口
因为11800端口是服务中gRPC端口,在整合springcloud的时候需要用到
启动后为什么skywalking-oap-server会挂掉
从报错日志可以清楚的观察到,没有找到STORAGE,这里我猜测是因为es还没有完全启动导致的,即使加上depends_on好像也没作用,你也可以设置总是重启,或者手动重启一下
下载skywalking-agent
skywalking-agent,找到你对应版本即可
整合springcloud
maven坐标实现
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId>
</dependency>
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId>
</dependency>
logback.xml实现
<configuration><!-- 引用 Spring Boot 的 logback 基础配置 --><include resource="org/springframework/boot/logging/logback/defaults.xml" /><!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 --><property name="PATTERN_DEFAULT" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%thread] [%tid] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/><!-- 控制台 Appender --><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.TraceIdPatternLogbackLayout"><pattern>${PATTERN_DEFAULT}</pattern></layout></encoder></appender><!-- 文件 Appender --><!-- 参考 Spring Boot 的 file-appender.xml 编写 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><pattern>${PATTERN_DEFAULT}</pattern></layout></encoder><!-- 日志文件名 --><file>${LOG_FILE}</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 滚动后的日志文件名 --><fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern><!-- 启动服务时,是否清理历史日志,一般不建议清理 --><cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart><!-- 日志文件,到达多少容量,进行滚动 --><maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize><!-- 日志文件的总大小,0 表示不限制 --><totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap><!-- 日志文件的保留天数 --><maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30}</maxHistory></rollingPolicy></appender><!-- 异步写入日志,提升性能 --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 --><discardingThreshold>0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 --><queueSize>256</queueSize><appender-ref ref="FILE"/></appender><!-- SkyWalking GRPC 日志收集,实现日志中心。注意:SkyWalking 8.4.0 版本开始支持 --><appender name="GRPC" 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.TraceIdPatternLogbackLayout"><pattern>${PATTERN_DEFAULT}</pattern></layout></encoder></appender><!-- 本地环境 --><springProfile name="local"><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="GRPC"/> <!-- 本地环境下,如果不想接入 SkyWalking 日志服务,可以注释掉本行 --><appender-ref ref="ASYNC"/> <!-- 本地环境下,如果不想打印日志,可以注释掉本行 --></root></springProfile><!-- 其它环境 --><springProfile name="dev,test,stage,prod,default"><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="ASYNC"/><appender-ref ref="GRPC"/></root></springProfile></configuration>
idea中配置

这里一定要注意,配置到环境变量我的没有作用,配置到vm才可行
# 第一个是你服务名称,第二个是对应的skywalking-agent.jar,第三个是你skywalking-aop-server的gRPC地址
-Dskywalking.agent.service_name=study-gateway -javaagent:/Users/xiaobo/webSoft/skywalking-agent/skywalking-agent.jar -Dskywalking.collector.backend_service=127.0.0.1:11800
🔚:springcloud项目启动实现效果图如下

最终实现展示

相关文章:
从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合
🎏:你只管努力,剩下的交给时间 🏠 :小破站 "从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合 前言准备工作编写docker-compose.yml文件为什么使用本机ip为什么skywa…...
设计模式——状态模式介绍
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。它基于对象的内部状态而改变其行为,看起来好像修改了对象的类。 状态模式的关键组件有三个:上下文(Context)、状态(State)和具体状态(Concrete State)。 下面是一个例…...
Java 多线程之 CAS(Compare and Set),实现无锁优化,自旋锁/乐观锁
文章目录 一、概述二、JDK 的 Unsafe 类三、ABA 问题 一、概述 CAS(Compare and Swap)是一种并发编程中的原子操作(synchronized 也使用了 CAS),用于实现多线程环境下的同步和数据共享。CAS提供了一种高效的并发控制机…...
python之pyqt专栏1-环境搭建
#python pyqt# python:3.11.6 pycharm:PyCharm Community Edition 2023.2.5 pyqt6 python安装 官网下载:Python Releases for Windows | Python.org pycharm社区版安装 官网地址:Download PyCharm: Python IDE for Professional…...
Spring Cloud LoadBalancer 简单介绍与实战
前言 本文为SpringCloud的学习笔记,如有错误,希望各位高手能指出,主要介绍SpringCloudLoadBalancer的基本概念和实战 文章目录 前言什么是LoadBalancer负载均衡分类服务端负载均衡客户端负载均衡服务端负载均衡和客户端负载均衡的优缺点 常见…...
私域流量解决方案分享
...
Scala---WordCount
一、创建Maven项目导入pom.xml文件 安装Maven仓库管理工具,版本要求是3.2版本以上。新建Maven项目,配置pom.xml。导入必要的包。 二、Spark-Scala版本的WordCount 1.val conf new SparkConf() 2.conf.setMaster("local") 3.conf.setAppNam…...
GTC2023全球流量大会蓄势待发,菊风在7B57展位等你!
第六届 GTC 全球流量大会(以下简称 GTC2023)将于12月5日- 6日,在深圳福田会展中心7&8号馆举办。 据悉,本届大会将是历届以来规模最大、参与人数最多、跨境出海资源最丰富的一次行业盛会。7、8 号馆共 15000 平方米&am…...
喜讯!云起无垠成为国家信息安全漏洞库(CNNVD)技术支撑单位
近日,云起无垠凭借其在漏洞挖掘、漏洞检测以及漏洞修复等领域的卓越表现,荣获“国家信息安全漏洞库(CNNVD)技术支撑单位等级证书(三级)”,正式成为CNNVD技术支撑单位。 中国国家信息安全漏洞库&…...
cc linux用root用户执行chmod 777 -R ./提示 Operation not permitted怎么办?
如果你作为 root 用户执行 chmod 777 -R ./ 命令时收到 “Operation not permitted” 错误,可能有几个原因: 不可更改 (Immutable) 文件属性: 文件可能被设置为不可更改。即使是 root 用户也不能修改这些文件的权限。使用 lsattr 命令查看文件…...
scrapy框架流程
1、Scrapy从Spider子类中提取start_url,然后构造为request请求对象 2、将request请求对象传递给爬虫中间件 3、将request请求对象传递给Scrapy引擎(核心代码) 4、将request请求对象传递给调度器(它负责对多个request安排,好比交…...
802.11 帧的Reason Code 位和Status Code 位
Reason Code 位 当对方不适合加入网络时,工作站会送出 Disassociation(解除连接)或 Deauthentication(解除身份认证)帧作为应答。这些帧当中包含一个长度 16bit 的 Reason Code(原因代码)位&am…...
骨传导能保护听力吗?为什么说骨传导耳机可以保护听力?
由于骨传导耳机的特殊传声方式,是可以保护听力的。 首先了解下骨传导耳机的传声方式是什么: 骨传导耳机是通过骨骼震动传导技术,将声音传至颅骨,然后通过颅骨传导到内耳,直接刺激听觉神经,使人感知到声音…...
【iOS】实现评论区展开效果
文章目录 前言实现行高自适应实现评论展开效果解决cell中的buttom的复用问题 前言 在知乎日报的评论区中,用到了Masonry行高自适应来实现评论的展开,这里设计许多控件的约束问题,当时困扰了笔者许久,特此撰写博客记录 实现行高自…...
POE交换机——电源解决方案-升压控制器\降压控制器\中高压降压转换器
PoE是一种有线以太网供电技术,使用于数据传输的网线同时具备直流供电的能力,PoE供电具有可靠、连接简捷、标准统一的优势。越来越多的工业物联网设备开始采用PoE供电, 如IP电话、网络视频监控以及无线以太网设备等。 PoE交换机是一种用于提供…...
[C/C++]数据结构 循环队列
前言: 队列是一种具有先进先出特性的结构,但是当数据出队列以后,前面的空间就无法再次利用了,循环队列就可以解决这个问题 一:概念及结构: 1.循环队列概念 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队…...
Cache学习(2):Cache结构 命中与缺失 多级Cache结构 直接映射缓存
1 Cache名词解释 命中(hit): CPU要访问的数据在Cache中有缓存缺失(miss): CPU要访问的数据在Cache中没有缓存Cache Size:Cache的大小,代表Cache可以缓存最大数据的大小Cache Line&a…...
vue前端前端页面权限验证方式
在Vue应用中使用Vuex(Vue的状态管理库)来存储用户组(user group)和角色(roles)信息是一种合理的做法,特别是在涉及到权限管理和用户身份的情况下。Vuex提供了一个集中式的状态管理方案ÿ…...
jenkins springCloud项目优雅下线
文章目录 场景解决下线请求效果如图贴一个可用的部署脚本 场景 在 Spring Cloud 项目的微服务实例关闭时,需要首先从注册中心设置为下线,避免该服务的消费者继续请求该服务实例,导致请求失败如果我们在服务实例从注册中心取消注册后ÿ…...
indexOf
可以通過String的indexOf判斷是否包括某個字符。 SpringBootTest Slf4j class BaseApplicationTests {Testvoid contextLoads() {log.info("01".indexOf(".")"");log.info("0.1".indexOf(".")"");log.info("…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
