Skywalking 分布式链路追踪系统

Skywalking

概述

SkyWalking 是一款优秀的国产开源分布式应用性能监控(APM)系统,专注于微服务、云原生和基于容器架构的监控需求。项目于2015年由吴晟个人开源,2017年加入Apache孵化器,2019年4月成为Apache顶级项目。主要开发人员来自华为,社区活跃,增长势头强劲。

核心特性

1.核心功能

  • 分布式追踪:跨服务调用链路追踪
  • 性能指标分析:服务性能指标监控与分析
  • 服务依赖分析:自动生成服务拓扑图
  • 告警系统:实时异常监控与告警
  • 日志集成:分布式日志关联分析

2.技术特点

  • 多语言支持:Java、.NET、Node.js、PHP、Python、Go等
  • 无代码侵入:采用字节码注入技术实现
  • 数据存储灵活:支持Elasticsearch、MySQL、TiDB、H2等
  • 云原生友好:支持Kubernetes、Service Mesh等
  • 轻量级探针:性能损耗低(<10%)

架构组成

1.核心组件

text

├── Agent # 数据采集探针(各服务部署) ├── OAP Server # 数据接收、聚合、分析服务 ├── Storage # 数据存储(ES/MySQL等) └── UI # 可视化展示界面

2.部署模式

  • 单机模式:适用于开发测试环境
  • 集群模式:适用于生产环境
  • Kubernetes Operator:云原生部署

安装部署

1.版本说明

  • 9.0+版本中APM与Agent分开下载
  • 推荐使用最新稳定版

2.下载地址

官方下载:https://skywalking.apache.org/downloads/ GitHub Releases:https://github.com/apache/skywalking/releases

3.快速安装(Linux)

bash

# 下载最新版本 wget https://dlcdn.apache.org/skywalking/9.4.0/apache-skywalking-apm-9.4.0.tar.gz # 解压 tar -zxvf apache-skywalking-apm-9.4.0.tar.gz cd apache-skywalking-apm-bin # 修改配置文件(可选) vim config/application.yml # 启动服务 ./bin/startup.sh # 停止服务 ./bin/stop.sh

4.配置详解

OAP Server配置(config/application.yml)

yaml

cluster: selector: ${SW_CLUSTER:standalone} # 集群模式选择 storage: selector: ${SW_STORAGE:elasticsearch} # 存储选择 elasticsearch: namespace: ${SW_NAMESPACE:""} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} receiver-sharing-server: selector: ${SW_RECEIVER_SHARING_SERVER:default} default: authentication: ${SW_AUTHENTICATION:""} core: selector: ${SW_CORE:default} default: # 采样率设置 sampleRate: ${SW_CORE_SAMPLE_RATE:10000} # 采样率,默认100%
UI配置(webapp/application.yml)

yaml

server: port: 8080 # UI端口 collector: path: /graphql ribbon: ReadTimeout: 10000 listOfServers: ${SW_COLLECTOR_RIBON_LIST:127.0.0.1:12800} # OAP地址 security: user: admin: # 管理员账户 password: admin

服务集成配置

1.Agent配置

基础配置

bash

# Java应用启动参数 -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -Dskywalking.collector.backend_service=127.0.0.1:11800
完整配置示例

bash

# 微服务启动配置示例 java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \ -Dskywalking.agent.service_name=order-service \ -Dskywalking.agent.instance_name=order-service-instance-1 \ -Dskywalking.collector.backend_service=skywalking-oap:11800 \ -Dskywalking.agent.sample_n_per_3_secs=-1 \ -Dskywalking.logging.level=DEBUG \ -jar your-application.jar
Agent配置详解(agent/config/agent.config)

properties

# 服务名称配置 agent.service_name=${SW_AGENT_NAME:Your_ApplicationName} # 后端服务地址 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800} # 采样配置 agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1} # -1表示全部采样 # 日志级别 logging.level=${SW_LOGGING_LEVEL:INFO} # 忽略路径配置 agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.png,.gif,.css,.js} # 跨进程传播配置 agent.cause_exception_depth=${SW_AGENT_CAUSE_EXCEPTION_DEPTH:5}

2.插件管理

常用插件

text

plugins/ ├── apm-spring-webmvc-annotations-6.x-plugin.jar # Spring MVC ├── apm-spring-cloud-gateway-3.x-plugin.jar # Spring Cloud Gateway ├── apm-feign-default-http-9.x-plugin.jar # Feign客户端 ├── apm-httpClient-4.x-plugin.jar # HttpClient ├── apm-mysql-5.x-plugin.jar # MySQL ├── apm-redis-2.x-plugin.jar # Redis ├── apm-kafka-plugin.jar # Kafka └── apm-elasticsearch-5.x-plugin.jar # Elasticsearch
插件启用/禁用

bash

# 方式1:修改agent配置 -Dskywalking.plugin.mysql.trace_sql_parameters=true # 启用MySQL参数追踪 # 方式2:配置文件 vim agent/config/agent.config # 添加配置 plugin.mysql.trace_sql_parameters=true

3.Spring Cloud集成

Maven依赖

xml

<!-- Spring Cloud集成 --> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>${skywalking.version}</version> </dependency> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>${skywalking.version}</version> </dependency>
配置文件示例

yaml

# application.yml spring: application: name: order-service skywalking: agent: service_name: ${spring.application.name} collector: backend_service: ${SKYWALKING_HOST:127.0.0.1}:11800 logging: level: DEBUG
自定义Trace

java

import org.apache.skywalking.apm.toolkit.trace.Trace; import org.apache.skywalking.apm.toolkit.trace.TraceContext; @Service public class OrderService { @Trace(operationName = "createOrder") public Order createOrder(OrderRequest request) { // 获取Trace ID String traceId = TraceContext.traceId(); // 添加标签 ActiveSpan.tag("order_type", request.getType()); ActiveSpan.tag("user_id", request.getUserId()); // 记录日志 ActiveSpan.info("Creating order for user: " + request.getUserId()); return processOrder(request); } @Trace private Order processOrder(OrderRequest request) { // 业务逻辑 return new Order(); } }

功能详解

1.服务监控

仪表板概览
  • 服务健康状态
  • 服务响应时间统计
  • 服务吞吐量(QPS)
  • 服务SLA(服务等级协议)
服务详情

json

{ "service": "order-service", "type": "HTTP", "cpm": 150, // 每分钟调用次数 "avgResponseTime": 45, // 平均响应时间(ms) "p95ResponseTime": 120, // P95响应时间 "p99ResponseTime": 250, // P99响应时间 "successRate": 99.8, // 成功率 "apdex": 0.95 // 应用性能指数 }

2.拓扑结构图

功能特性
  • 自动发现:自动识别服务间依赖关系
  • 动态更新:实时更新拓扑结构
  • 深度分析:支持多层调用链路展示
  • 异常标识:高亮显示异常服务节点
拓扑图元素
  • 节点:服务实例、数据库、缓存等
  • 连线:调用关系和流量方向
  • 颜色标识:绿色(正常)、红色(异常)
  • 流量指标:线条粗细表示流量大小

3.链路追踪(Trace)

Trace详情结构

text

Trace ID: a1b2c3d4e5f6 Duration: 245ms Status: Success ├── Span 1: gateway入口 [15ms] │ ├── HTTP请求: GET /api/orders │ └── Tags: http.method=GET, http.status_code=200 ├── Span 2: order-service [120ms] │ ├── 数据库查询: 查询订单 │ ├── Redis操作: 获取缓存 │ └── RPC调用: 调用product-service └── Span 3: product-service [85ms] └── 数据库查询: 查询商品信息
Span类型
  1. Entry Span:服务入口Span
  2. Local Span:本地方法Span
  3. Exit Span:服务出口Span
Trace查询语法

sql

-- 基本查询 service(order-service) and endpoint(/api/orders/*) -- 状态查询 trace.status = error -- 时间范围查询 trace.start_time > '2024-01-01 00:00:00' -- 标签查询 trace.tag.http.method = 'GET' -- 组合查询 service(order-service) and trace.duration > 1000 and trace.status = error

4.数据库监控

支持的数据库
  • MySQL、PostgreSQL、Oracle
  • Elasticsearch、MongoDB
  • Redis、Memcached
  • Kafka、RocketMQ
监控指标

yaml

database_monitoring: sql_execution: slow_sql_threshold: 100ms # 慢SQL阈值 max_sql_length: 2048 # SQL最大长度 trace_sql_parameters: true # 是否追踪参数 connection_pool: max_connections: 100 active_connections: 45 idle_connections: 55 performance: queries_per_second: 1200 avg_query_time: 25ms error_rate: 0.05%

5.告警功能

告警规则配置

yaml

rules: - name: service_slow_response metrics-name: service_resp_time op: ">" threshold: 1000 period: 10 count: 2 silence-period: 5 message: Service {name} response time is over 1000ms - name: service_error_rate metrics-name: service_cpm op: ">" threshold: 50 period: 5 count: 3 message: Service {name} error rate is high
告警通知渠道
  • Webhook通知
  • 邮件通知
  • Slack/钉钉/企业微信
  • 短信通知

高级配置

1.集群部署

OAP集群配置

yaml

# application.yml cluster: selector: ${SW_CLUSTER:standalone} standalone: # 或使用其他协调器 zookeeper: hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181} sessionTimeout: ${SW_CLUSTER_ZK_SESSION_TIMEOUT:100000} storage: selector: ${SW_STORAGE:elasticsearch} elasticsearch: namespace: ${SW_NAMESPACE:""} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} user: ${SW_ES_USER:""} password: ${SW_ES_PASSWORD:""}
UI负载均衡

nginx

# Nginx配置示例 upstream skywalking_ui { server ui1:8080; server ui2:8080; server ui3:8080; } server { listen 80; server_name skywalking.example.com; location / { proxy_pass http://skywalking_ui; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

2.安全配置

认证配置

yaml

# OAP认证配置 receiver-sharing-server: default: authentication: ${SW_AUTHENTICATION:secret-token} # Agent认证配置 agent.authentication=${SW_AGENT_AUTHENTICATION:secret-token}
SSL/TLS配置

yaml

# SSL配置示例 receiver-sharing-server: default: ssl: enabled: ${SW_SSL_ENABLED:false} key_path: ${SW_SSL_KEY_PATH:""} cert_chain_path: ${SW_SSL_CERT_CHAIN_PATH:""}

3.性能调优

Agent调优

properties

# 缓冲区配置 buffer.channel_size=${SW_BUFFER_CHANNEL_SIZE:5} buffer.buffer_size=${SW_BUFFER_BUFFER_SIZE:300} # 发送配置 agent.force_reconnection_period=${SW_AGENT_FORCE_RECONNECTION_PERIOD:1} # 采样配置 agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1} # 日志配置 logging.level=${SW_LOGGING_LEVEL:INFO} logging.dir=${SW_LOGGING_DIR:logs} logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log}
OAP调优

yaml

# JVM参数建议 -Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError # OAP核心配置 core: default: # 线程池配置 gRPCThreadPoolSize: ${SW_CORE_GRPC_THREAD_POOL_SIZE:4} gRPCThreadPoolQueueSize: ${SW_CORE_GRPC_THREAD_POOL_QUEUE_SIZE:10000} # 缓存配置 cacheLayer: ${SW_CORE_CACHE_LAYER:guava} guavaCacheSize: ${SW_CORE_GUAVA_CACHE_SIZE:10000}

故障排除

1.常见问题

Agent无法连接OAP

bash

# 检查网络连通性 telnet <oap-host> 11800 # 检查防火墙 firewall-cmd --list-all # 查看Agent日志 tail -f logs/skywalking-api.log
数据不显示
  1. 检查Agent配置是否正确
  2. 确认OAP服务正常运行
  3. 验证存储服务(如ES)状态
  4. 检查采样率配置
性能问题
  1. 调整缓冲区大小
  2. 优化采样策略
  3. 检查网络延迟
  4. 监控存储性能

2.日志分析

Agent日志级别

bash

# 修改日志级别 -Dskywalking.logging.level=DEBUG # 查看详细日志 grep "ERROR\|WARN" logs/skywalking-api.log
OAP日志分析

bash

# 查看启动日志 tail -f logs/oap.log # 错误日志分析 grep -A 5 -B 5 "Exception" logs/oap.log

最佳实践

1.生产环境部署

yaml

# 生产环境配置示例 environment: mode: production agent: service_naming_strategy: ${SW_AGENT_NAMING:default} instance_properties_json: '{"host.ip":"${SW_AGENT_IP}","os.name":"${SW_AGENT_OS}"}' collector: keep_tracing: ${SW_COLLECTOR_KEEP_TRACING:true} analysis_register_period: ${SW_ANALYSIS_REGISTER_PERIOD:3} storage: elasticsearch: index_shards_number: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2} index_replicas_number: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}

2.Kubernetes部署

Sidecar模式

yaml

apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: template: spec: containers: - name: order-service image: order-service:latest env: - name: JAVA_TOOL_OPTIONS value: "-javaagent:/skywalking/agent/skywalking-agent.jar" - name: SW_AGENT_NAME value: "order-service" - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES value: "skywalking-oap.skywalking.svc.cluster.local:11800" volumeMounts: - name: skywalking-agent mountPath: /skywalking/agent volumes: - name: skywalking-agent configMap: name: skywalking-agent-config

3.监控指标集成

Prometheus集成

yaml

# OAP Prometheus配置 prometheus-fetcher: selector: ${SW_PROMETHEUS_FETCHER:default} default: active: ${SW_PROMETHEUS_FETCHER_ACTIVE:true} # 导出指标 core: default: enableEndpointNameGroupingByOpenapi: true enableDatabaseStatementGroupingByOpenapi: true

版本升级

1.升级步骤

  1. 备份现有配置和数据
  2. 阅读新版本文档和变更说明
  3. 测试环境验证
  4. 生产环境灰度升级
  5. 监控升级过程

2.兼容性说明

  • Agent与OAP版本需匹配
  • 配置语法可能变更
  • 存储结构可能调整

总结

SkyWalking作为一款功能强大的国产APM系统,具有以下优势:

  1. 功能全面:覆盖链路追踪、性能监控、告警等完整APM功能
  2. 性能优异:低性能损耗,适合高并发场景
  3. 生态丰富:支持多种语言和框架
  4. 易于使用:安装配置简单,界面友好
  5. 社区活跃:持续更新,问题响应及时

建议在生产环境中根据实际需求合理配置,定期监控系统性能,及时调整优化参数,确保系统稳定高效运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1126019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习MOF材料!!

https://mp.weixin.qq.com/s/1pI33dnMc-Vmqznw0H4QOA 点击此链接查看详情&#xff01;​​​​​​ https://mp.weixin.qq.com/s/1pI33dnMc-Vmqznw0H4QOA 点击此链接查看详情&#xff01;

港科校友|潘异:AI创业的弄潮儿

机器人兴起汇川技术&#xff0c;这家坐落于深圳的世界领先自动化机械制造公司&#xff0c;正在引领一场机器人革命。从电梯到塑料&#xff0c;从电动汽车到机器人&#xff0c;他们无所不包&#xff0c;生产流水线上覆蓋了从低压交流驱动器到智能控制器、工业机器人、电动汽车逆…

企业微信如何管理部门群(组图)

企业微信如何管理部门群&#xff08;组图&#xff09; 1、部门群支持操作开启/关闭。 2、开启时&#xff0c;加入部门的成员会自动进群&#xff0c;离开部门的成员会自动退群&#xff0c;“限制查看所有人”和“隐藏”的成员不会加入部门群。 3、若需要解散部门群&#xff0c;…

那个永远积极的人升职了

办公室走廊尽头的茶水间,每天下午都会上演同一出戏:抱怨版图又要重画、感慨这个项目必死无疑。待久了你会发现,这种集体性的悲观已经成了芯片行业的职业病。很多人好像天生就要端着一副”看透一切”的架势。聊起项目永远是”时间不够”、“资源不足”、“技术方案有问题”。整个…

竞赛毕业设计定制作品---【芳心科技】F. 驾辅盲区预警雷达系统

实物效果图&#xff1a;实现功能&#xff1a;该系统作为车辆核心主动安全装置&#xff0c;专为破解行车盲区风险设计&#xff0c;通过雷达与视觉融合感知技术&#xff0c;实现对车辆侧后方、后视镜盲区等关键区域的全方位监测。其核心功能聚焦盲区检测与智能预警&#xff0c;且…

竞赛毕业设计定制作品---【芳心科技】F. 家庭厨房的防火预警系统

实物效果图&#xff1a;实现功能&#xff1a;本研究课题旨在设计并实现一套全面、智能的家庭厨房防火预警系统。针对厨房火灾的主要诱因&#xff0c;本设计设计了四大检测模块&#xff1a;烟雾检测、明火检测、温度检测以及燃气泄露检测。烟雾检测采用高灵敏度的烟雾传感器&…

产品多租户功能上新:一份写给开发者的集成与适配指南

多租户架构不是简单的技术选择&#xff0c;而是一场关于产品商业化命运的架构革命引言&#xff1a;为什么多租户功能决定了你的SaaS能走多远&#xff1f;最近&#xff0c;我们团队刚刚完成了产品的多租户架构改造。上线第一天&#xff0c;就有一位企业客户反馈&#xff1a;“我…

Python OOP 设计思想 08:继承不是类型建模

在许多面向对象语言中&#xff0c;“继承”&#xff08;Inheritance&#xff09;被视为类型建模的起点&#xff1a;现实世界的分类关系被直接映射为类层次结构。然而在 Python 中&#xff0c;这一路径并非主流实践&#xff0c;在复杂系统中甚至可能适得其反。要正确理解 Python…

Eureka在大数据架构中的核心作用与最佳实践

Eureka在大数据架构中的核心作用与最佳实践:构建高可用大数据服务发现体系 摘要/引言 在大数据架构中,服务之间的相互调用与发现是确保系统高效稳定运行的关键环节。随着大数据应用规模的不断扩大,如何实现服务的动态注册、发现与管理成为了亟待解决的问题。Eureka作为Net…

autogen能做到但langgraph做不到的能力有哪些

AutoGen 相比 LangGraph&#xff0c;在原生对话驱动协同、开箱即用角色模板、内置代码执行与安全沙箱、灵活人在回路交互、Azure 生态深度适配这五个方面具备 LangGraph 难以直接实现的能力&#xff0c;以下是详细解析。核心能力差异&#xff08;AutoGen 独有 / 显著领先&#…

从选题到定稿:7 款 AI 毕业论文工具实测,paperzz 为何是毕业生首选?

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 毕业论文创作的 “痛点清单”&#xff0c;几乎是所有毕业生的共同记忆&#xff1a;选题没方向、文献找不全…

【毕业设计】SpringBoot+Vue+MySQL 小徐影城管理系统平台源码+数据库+论文+部署文档

&#x1f4a1;实话实说&#xff1a;有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着互联网技术的快速发展和数字化娱乐需求的增长&#xff0c;传统影院管理模式面临诸多挑战&#xff0c;如人工售票效率低、数据管理混乱、用户体…

从标题到成稿:paperzz 毕业论文功能如何让学术写作 “少走弯路”

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 对于高校毕业生而言&#xff0c;毕业论文写作的痛点从来不是 “写不出内容”&#xff0c;而是 “不知道怎么…

从 “选题卡壳” 到 “答辩通关”:paperzz 毕业论文 AI 功能的学术写作 “四步解法”

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 当毕业论文的 “文献堆” 和 “格式坑” 同时砸来&#xff0c;不少学生都会陷入 “写了删、删了写” 的循环…

【2025最新】基于SpringBoot+Vue的阿博图书馆管理系统管理系统源码+MyBatis+MySQL

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着信息技术的快速发展&#xff0c;图书馆管理系…

硕士论文不用愁:paperzz 毕业论文功能,4 步搞定 3 万字原创范文

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿当研究生们还在为 “论文选题太泛”“文献找不齐”“框架理不清” 熬夜时&#xff0c;paperzz 平台的paperzz 毕业论文功能&#xff0c;正以 “流程化 定制化” 的工具链&#xff0c;把学术写作从 “摸着石…

六维力矩传感器深度解析:机器人力控技术的关键 内参

深夜的调校实验室内&#xff0c;工程师屏气凝息&#xff0c;等待着新的解耦算法加载完毕&#xff0c;测试台上机械手稳稳抓起异构形态的易碎品所体现出来的实时力反馈曲线在屏幕上呈现完美状态。这种既保证了能把异构形态物品稳稳抓起&#xff0c;又不会把其抓碎的力控制便是六…

SpringBoot+Vue 小徐影城管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着互联网技术的快速发展&#xff0c;在线影城管…

SpringBoot+Vue 网上购物商城系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着互联网技术的快速发展&#xff0c;电子商务已…