SkyWalking 10.1.0 从零到一:一站式部署与SpringBoot集成实战

张开发
2026/4/15 20:35:59 15 分钟阅读

分享文章

SkyWalking 10.1.0 从零到一:一站式部署与SpringBoot集成实战
1. 为什么选择SkyWalking 10.1.0最近在帮团队搭建微服务监控系统时我把主流的APM工具都折腾了一遍。说实话SkyWalking 10.1.0的表现让我眼前一亮——它不仅支持全链路追踪还能监控JVM指标、SQL执行情况最关键的是对Java生态的支持非常友好。记得第一次看到服务拓扑图自动生成时那种原来我的服务是这样调用的的顿悟感现在想起来都觉得很有意思。相比其他监控工具SkyWalking有几个杀手级优势首先是零代码侵入只需要加个启动参数就能接入其次是存储方案灵活内置的H2适合快速体验生产环境可以无缝切换到ES或MySQL最重要的是可视化做得极好连我这种讨厌看日志的人都能快速定位问题。上周刚用它发现了个隐藏的N1查询问题节省了团队两天排查时间。2. 环境准备与安装2.1 硬件需求与软件依赖我的老款MacBook Pro16GB内存跑起来毫无压力官方建议最低配置是2核4G。需要特别注意JDK必须11或以上版本实测OpenJDK 11.0.15没问题如果要用ES存储需要提前装好Elasticsearch 7.x/8.x生产环境建议Linux系统开发环境Windows/Mac都行# 快速检查Java环境 java -version2.2 下载与解压实战官网下载经常遇到网络问题推荐用国内镜像。我整理了几个常用源阿里云镜像https://mirrors.aliyun.com/apache/skywalking/华为云镜像https://mirrors.huaweicloud.com/skywalking/解压时有个小技巧用-C参数指定目录避免文件散落一地tar -zxvf apache-skywalking-apm-10.1.0.tar.gz -C /opt解压后的目录结构很有意思/bin启动脚本藏在这里/config所有配置文件的归宿/oap-libs核心引擎所在/webappUI前端资源3. 服务端启动详解3.1 首次启动避坑指南第一次启动建议先用默认的H2存储模式避免踩存储配置的坑。Windows用户直接双击bin/startup.bat但要注意会弹出两个CMD窗口OAP服务和UI如果闪退查看logs目录下的报错日志Linux环境下启动更简单# 后台启动模式 bin/startup.sh 启动成功后你会在日志里看到这样的关键信息org.apache.skywalking.oap.server.starter.OAPServerBootstrap - 100% representer...3.2 访问与验证浏览器打开http://localhost:8080如果看到蓝白相间的监控面板恭喜你不过新版本有个变化要注意10.1.0的UI默认不显示菜单只有被监控的服务上报数据后相关菜单才会出现。我第一次用时还以为安装失败了盯着空白页面发了半小时呆...4. SpringBoot集成实战4.1 Agent配置的三种姿势从官网下载的agent包需要特别注意版本匹配。我推荐把这些文件放在项目根目录下方便管理。集成方式主要有三种IDEA开发模式 在VM options中添加-javaagent:skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_nameorder-service命令行启动java -javaagent:/path/to/skywalking-agent.jar \ -Dskywalking.agent.service_namepayment-service \ -jar your-app.jarDocker容器方案 在Dockerfile中加入COPY skywalking-agent /skywalking-agent ENV JAVA_OPTS-javaagent:/skywalking-agent/skywalking-agent.jar4.2 关键参数调优经验在agent.config文件中有几个参数我每次都会调整# 服务名称要有辨识度 agent.service_name${SW_AGENT_NAME:inventory-service} # 采样率生产环境建议0.1-0.5 agent.sample_n_per_3_secs${SW_AGENT_SAMPLE:5} # 忽略健康检查接口 agent.ignore_suffix${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.png,.css,.js,.html}有个坑我踩过三次服务名不要用下划线SkyWalking会用服务名作为ES索引名称而ES对下划线支持不友好。建议用中划线分隔比如user-service。5. 生产环境进阶配置5.1 存储方案选型对比H2只适合demo真实项目我推荐这些方案存储类型适用场景配置示例Elasticsearch大规模集群storage: elasticsearch7MySQL小规模稳定环境storage: mysqlTiDB超大规模分布式storage: tidbES的配置模板我通常这样改storage: selector: ${SW_STORAGE:elasticsearch} elasticsearch: nameSpace: ${SW_NAMESPACE:} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:http} trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:}5.2 高可用部署方案去年双十一前我们做了压力测试总结出几个要点OAP服务要部署至少2个节点使用Nginx做UI负载均衡ES集群分片数建议(节点数*1.5)启动多个OAP实例时需要修改cluster.ymlstandalone: selector: ${SW_CLUSTER:standalone} # 改为zookeeper或kubernetes kubernetes: namespace: ${SW_CLUSTER_K8S_NAMESPACE:default} labelSelector: ${SW_CLUSTER_K8S_LABEL:appskywalking}6. 监控效果展示与解读接入成功后最激动人心的就是看数据了。在拓扑图页面你会看到类似蜘蛛网的服务调用关系图。上周我们有个服务突然变红顺着连线追查发现是Redis连接池配置不当导致的。几个必看的监控面板Service Apdex Score应用健康度晴雨表Slow Endpoints找出性能瓶颈JVM Thread死锁问题一目了然记得第一次看到SQL监控功能时我立刻给团队定了个规矩所有慢查询超过500ms的都要优化。现在我们的平均响应时间从1.2s降到了300ms左右。7. 常见问题排查手册遇到问题别慌先检查这几点Agent没生效检查日志是否有SkyWalking Agent启动日志数据不上报确认OAP地址配置正确agent.config中的collector.backend_serviceUI显示不全清除浏览器缓存或检查Nginx配置最近遇到个典型问题某服务监控数据时有时无。最后发现是K8s的Pod重启导致Agent临时目录被清空。解决方案是在Deployment里加上env: - name: SW_AGENT_NAME value: user-service volumeMounts: - mountPath: /skywalking-agent name: skywalking-agent volumes: - name: skywalking-agent hostPath: path: /data/skywalking-agent8. 性能优化实战技巧经过多次压测我总结了几条黄金法则采样率动态调整高峰时段调低闲时调高// 通过API动态修改 ConfigService.getConfigService() .registerConfigChangeWatcher(new SamplingRateWatcher());Trace忽略策略健康检查、静态资源不走追踪日志级别控制生产环境用WARN级别有个特别实用的功能是自定义追踪。比如我们想监控优惠券计算耗时Trace(operationName coupon/calculate) public ListCoupon calculateCoupons(User user) { ActiveSpan.tag(user_level, user.getLevel()); // 业务逻辑 }现在团队已经养成习惯每次上线新功能都会先讨论监控方案。有了SkyWalking我们甚至能提前发现潜在的性能问题。上周预发布环境就拦截了个循环查询的Bug这要放到线上起码得损失好几万。

更多文章