🎏:你只管努力,剩下的交給時間
🏠 :小破站
"從零開始,用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項目啟動實現效果圖如下