Docker+rancher部署SkyWalking8.5并应用在springboot服务中

1.Skywalking介绍

Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。

Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。

2.Skywalking优势

国内开源项目,社区成熟,且可与作者直接沟通

支持语言更多:Java、.NET Core、PHP、Node.JS、Golang

支持java自动探针,代码无侵入,只要简单配置,就可以自动实现各种指标、调用链的埋点

众多存储选择:ElasticSearch、MySql、TiDB、H2、Sharding Sphere

扩展性:支持模块、插件的可拔插

支持java语言的几十种插件,例如:Tomcat、RabbitMq、Kafka,且易于二次开发

性能:比其他开源软件性能都强

3.官网

复制代码
官网地址: http://skywalking.apache.org/
中文官网 http://skywalking.apache.org/zh/
下载地址: https://skywalking.apache.org/downloads/
git地址:https://github.com/apache/skywalking

4.部署

4.1 下载skywalking

复制代码
https://archive.apache.org/dist/skywalking/

因为我们使用的是es链接的,所以可以选用es版本的包进行下载。这里主要是为了使用下载后的agent包

解压后:

4.2 docker+rancher部署 oap-server

4.3 docker+rancher部署 skywalking-ui

ip为oap-server所在的ip

12800是oap-server的ip

4.4服务器放置agent文件夹

agent这个就是我们下载解压后得到的

进入/agent/config目录下在agent.config中添加配置

复制代码
//oap-server服务ip
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1} 

//oap-server服务端口
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

5.应用服务中的配置

5.1 在Rancher对应的服务下配置数据卷

主机路径配置 agent文件绝对路径

5.2 项目服务修改pom

skywalking-agent.jar路径为服务器agent的绝对路径;启动镜像时一起启动agent的jar包,如果是使用Dockerfile打镜像那么就将这些命令写入到Dockefile

复制代码
FROM java:8
MAINTAINER demo
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java  -Dspring.profiles.active=prod -javaagent:/opt/agent/skywalking-agent.jar -Dskywalking.agent.service_name=${project.artifactId} -Dskywalking.collector.backend_service=127.0.0.1:11800 $PARAMS","-jar","demo.jar"]

5.3 项目服务配置logback日志

只有配置了logback日志才能在页面的日志模块看到操作日志,否则是看不到日志的。(这些配置是在具体使用监控的服务中配置的,那些服务用那些服务配置)

pom.xml配置

复制代码
<dependency>
  <groupId>org.apache.skywalking</groupId>
  <artifactId>apm-toolkit-trace</artifactId>
  <version>8.5.0</version>
</dependency>
<dependency>
  <groupId>org.apache.skywalking</groupId>
  <artifactId>apm-toolkit-logback-1.x</artifactId>
  <version>8.5.0</version>
</dependency>

新增一个logback-skywalking.xml文件,用于定义日志和将日志发送到skywalking页面。

复制代码
<?xml version="1.0" encoding="UTF-8"?>

<configuration scanPeriod=" 5 seconds" scan="true">
    <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.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>


    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="STDOUT"/>
    </appender>
    <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} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="grpc-log"/>
        <appender-ref ref="ASYNC"/>
    </root>
</configuration>

yml配置

logging:

config: classpath:logback-skywalking.xml

使用ip:18080直接可以访问前端页面

日志的保存时间

直接使用 SkyWalking 进行配置,如下代码所示:

这个直接在 skywalking-oap-server环境变量中配置

复制代码
recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day
metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:7} # Unit is day
相关推荐
一水鉴天3 分钟前
整体设计 逻辑系统程序 之18 Source 容器(Docker)承载 C/P/D 三式的完整设计与双闭环验证 之2
docker·架构·认知科学·公共逻辑
Terio_my1 小时前
Spring Boot 虚拟 MVC 调用
spring boot
飞快的蜗牛2 小时前
利用linux系统自带的cron 定时备份数据库,不需要写代码了
java·docker
香吧香3 小时前
Docker Registry 使用总结
docker
赵渝强老师3 小时前
【赵渝强老师】Docker容器的资源管理机制
linux·docker·容器·kubernetes
GEMjay3 小时前
对于SpringBoot的三层缓存的思考
spring boot
泉城老铁4 小时前
导出大量数据时如何优化内存使用?SXSSFWorkbook的具体实现方法是什么?
spring boot·后端·excel
泉城老铁4 小时前
springboot实现对接poi 导出excel折线图
java·spring boot·后端
haicome5 小时前
deepseek部署
docker·ragflow·deepseek 部署
稚辉君.MCA_P8_Java5 小时前
kafka解决了什么问题?mmap 和sendfile
java·spring boot·分布式·kafka·kubernetes