FEATURED · 精选文章

Skywalking介绍和实战

发布时间 / 2026/8/2 3:34:30
来源 / 创域科博编辑部
栏目 / 资讯中心
Skywalking介绍和实战 Skywalkingskywalking是一个apm系统包含监控追踪并拥有故障诊断能力的分布式系统一、Skywalking介绍1.什么是SkyWalkingSkywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品它同时吸收了Zipkin /Pinpoint /CAT 的设计思路。特点是支持多种插件UI功能较强支持非侵入式埋点。目前使用厂商最多版本更新较快。数据存储支持Elasticsearch、MySQL、H2、TiDB。默认是H2而且是存到内存。实际我们一般将其存到ES。主页Apache SkyWalking — Observability for cloud-native and AI 下载Downloads | Apache SkyWalking githubhttps://github.com/apache/skywalking 文档skywalking/docs at master · apache/skywalking · GitHub 配置skywalking/docs/en/setup/backend at master · apache/skywalking · GitHub2.APMAPM全称Application Performance Management应用性能管理目的是通过各种探针采集数据收集关键指标同时搭配数据呈现以实现对应用程序性能管理和故障管理的系统化解决方案.Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态等而APM系统则更重视程序内部执行过程指标和服务之间链路调用情况的监控APM更有利于深入代码找到请求响应“慢”的根本问题与Zabbix之类的监控是互补关系 目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking大都是参考Google的Dapper实现的.3.链路追踪工具对比链路追踪工具一般要有如下功能心跳检测确定应用是否还在运行记录请求的执行流程、执行时间资源监控CPU、内存、带宽、磁盘告警功能监控执行时间、成功率等通过邮件、钉钉、短信、微信等进行通知可视化页面常用的工具有ZipkinTwitter开源的调用链分析工具目前基于springcloud sleuth得到了广泛的使用特点是轻量使用部署简单。Pinpoint韩国人开源的基于字节码注入的调用链分析以及应用监控分析工具。特点是支持多种插件UI功能强大接入端无代码侵入。SkyWalking本土开源的基于字节码注入的调用链分析以及应用监控分析工具。特点是支持多种插件UI功能较强接入端无代码侵入。目前已加入Apache孵化器。CAT大众点评开源的基于编码和配置的调用链分析应用监控分析日志采集监控报警等一系列的监控平台工具。各维度对比对比项ZipkinPinpointSkyWalkingCat实现方式拦截请求发送(Http,MQ)数据到Zipkin服务Java探针字节码增强Java探针字节码增强代码埋点(拦截器注解过滤器等)接入方式基于linkerd或者sleuth方式javaagent字节码javaagent字节码代码侵入agent到collector协议http,MQthriftgRPChttp/tcpOpenTracing支持不支持支持不支持颗粒度接口级方法级方法级代码级全局调用统计不支持支持支持支持traceid查询支持不支持支持不支持报警不支持支持支持支持JVM监控不支持不支持支持支持UI功能支持支持支持支持数据存储ES、MySQL等HBaseES/H2/MySQLMySQL/HDFS性能对比图4.SkyWalking的功能特性多种监控手段通过语言探针和Service mesh 获得监控的数据支持多种语言自动探针包括 Java .NET Core 和 Node.js轻量高效无需大数据平台和大量的服务器资源模块化UI存储集群管理都有多种机制可选支持报警告警优秀的可视化解决方案二、SkyWalking环境搭建1.Skywalking结构先来看看Skywalking的结构图说明Skywalking agent 和业务系统绑定在一起负责收集各种监控数据Skywalking oapservice负责处理监控数据比如接受Skywalking agent的监控数据并且存储在数据库中接受Skywalking webapp前端的请求从数据库查询数据并返回给前端Skywalking oapservice通常会以集群的方式搭建Skywalking webapp UI服务用于可视化展示数据用户持久化监控数据的数据库可以选用ElasticSearch、MySQL等2.Skywalking部署从官网提供的下载地址下载安装文件我们先通过windows操作来演示下Downloads | Apache SkyWalking点击对应的下载链接下载即可启动服务启动成功后会启动两个服务一个是Skywalking-oap-server,一个是Skywalking-web-ui:8080Skywalking-oap-server服务启动后会暴露11800和12800两个端口分别为收集监控数据的端口11800和接收前端请求的端口12800修改端口可以修改config/application.yml默认端口8080访问效果如下3.Java Agent在新版本中Agent是需要单独下载的。下载后解压出来放在了前面Skywalking的解压目录中三、服务接入然后我们就可以把我们的微服务接入到Skywalking中来监控链路的执行。1.开发环境的配置首先来看看在开发环境中的配置因为Skywalking是无侵入式的。我们只需要在启动的时候通过相关的参数配置即可# skywalking-agent.jar 的路径位置 -javaagent:d:\xxx\skywalking-agent.jar # 在Skywalking中显示的服务名称 -DSW_AGENT_NAMExxx-skywalking-service # Skywalking的collector服务的IP及端口 -DSW_AGENT_COLLECTOR_BACKEND_SERVICESlocalhost:11800注意-DSW_AGENT_COLLECTOR_BACKEND_SERVICES可以指定远程服务但是-javaagent必须是本地的jar包.2.gateway服务然后我们接入gateway的服务。在启动时设置对应的参数启动服务后我们进入Skywalking的UI服务中查看可以看到有对应的服务信息但是没有相关的链路信息主要是因为默认Skywalking中是不支持Gateway的我们需要显示的添加对应的gateway插件支持从我们下载的agent包中的 optional-plugins中把gateway的jar拷贝的对应的plugins中即可重启服务测试即可3.对接多个服务接下来我们就可以把商城系统中的各个服务都对接到Skywalking中给每个服务添加对应的配置-Xmx512m -javaagent:D:\software\apache-skywalking-apm-bin\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAMEmall-product -DSW_AGENT_COLLECTOR_BACKEND_SERVICESlocalhost:11800分别启动四、Skywalking持久化持久化数据到MySQL中。修改下配置把原来默认的H2修改为MySQL就可以了。mysql://localhost:3306/swtest?rewriteBatchedStatementstrueserverTimezoneUTCuseUnicodetruecharacterEncodingutf-8然后还需要把MySQL的驱动包拷贝到对应的目录中然后重启服务即可生成的表结构还很多五、自定义SkyWalking链路在默认情况下Skywalking是没有记录我们的业务方法的如果需要添加业务方法的链路监控我们就需要添加如下的依赖dependency groupIdorg.apache.skywalking/groupId artifactIdapm-toolkit-trace/artifactId version8.8.0/version /dependency然后在业务方法上添加Trace注解。那么该方法就会被监控重启服务并访问但是查看这个方法的详情中没有返回信息和参数这时我们可以通过Tags和Tag来解决这个问题Trace Tags({ Tag(key getCatelog2JSON,value returnedObj), Tag(key param,value arg[0]) })key:方法名 value returnedObj:是指定返回值arg[0]:参数重启测试六、集成日志框架将微服务的日志框架去集成SkyWalking我们希望在我们微服务中日志中能够记录当前调用链路的id然后我们再根据这个id去SkyWalking的前端界面中进行搜索找到对应的调用链路记录。因为springboot默认实现的日志框架是logback这里也就拿logback举例在微服务中导入maven坐标!-- skywalking 日志记录 -- dependency groupIdorg.apache.skywalking/groupId artifactIdapm-toolkit-logback-1.x/artifactId version8.5.0/version /dependency ​在项目中resources目录下创建logback-spring.xml文件?xml version1.0 encodingUTF-8? configuration ​ appender nameconsole classch.qos.logback.core.ConsoleAppender encoder classch.qos.logback.core.encoder.LayoutWrappingEncoder layout classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout pattern%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n/pattern /layout /encoder /appender ​ root levelINFO appender-ref refconsole / /root ​ /configuration ​在Skywalking UI的日志菜单中显示日志信息?xml version1.0 encodingUTF-8? configuration ​ !-- 控制台日志输出的格式中添加tid -- appender nameconsole classch.qos.logback.core.ConsoleAppender encoder classch.qos.logback.core.encoder.LayoutWrappingEncoder layout classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout pattern%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n/pattern /layout /encoder /appender ​ !-- skywalking grpc 日志收集 8.4.0版本开始支持 -- appender namegrpc-log classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender encoder classch.qos.logback.core.encoder.LayoutWrappingEncoder layout classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout Pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n/Pattern /layout /encoder /appender ​ root levelINFO appender-ref refconsole / appender-ref refgrpc-log / /root ​ /configuration ​plugin.toolkit.log.grpc.reporter.server_host${SW_GRPC_LOG_SERVER_HOST:127.0.0.1} 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}
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻