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
相关推荐
辰海Coding7 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
仙柒4158 小时前
Docker存储原理
运维·docker·容器
快乐的哈士奇11 小时前
LangFuse 自托管实战:选型理由、Docker 部署与常用配置全解析
运维·人工智能·docker·容器
Maiko Star12 小时前
* SpringBoot整合LangChain4j
java·spring boot·后端·langchain4j
weixin_4492900113 小时前
Docker + MySQL 在 Windows 11 上的本地安装部署文档
mysql·docker·容器
Ysn071913 小时前
中文乱码:在 Docker 容器中设置中文语言环境
运维·python·docker·容器
绝知此事13 小时前
【产品更名】通义灵码升级为 Qoder CN:AI 编码助手新时代,附大模型收费与 Spring Boot 支持全对比
人工智能·spring boot·后端·idea·ai编程
zxd02031113 小时前
EFK(Elasticsearch + Fluentd + Kibana) 日志收集系统
运维·docker·jenkins
linmoo198614 小时前
Agent应用实践之四 - 基础:AgentScope-SpringBoot集成源码解析
人工智能·spring boot·agent·agentscope·openclaw
终端行者14 小时前
Jenkins Pipeline 企业级用法 参数化构建+Ansible发布---上
docker·ansible·jenkins·cicd