SkyWalking怎么集成?

wen python案例 3

本文目录导读:

SkyWalking怎么集成?

  1. 整体架构图(先看全局)
  2. Java 应用集成(最主流,无侵入)
  3. 非 Java 应用集成(修改代码或配置)
  4. 部署 OAP Server 与 UI(后端必须)
  5. 核心配置详解
  6. 验证集成的 3 个步骤
  7. 最佳实践建议

SkyWalking 的集成主要分为 Agent 端(数据采集)和 后端服务(数据存储与展示)两部分,下面按照通用流程和几种主流技术栈分别说明。


整体架构图(先看全局)

[业务服务]  ———(gRPC/HTTP)—→  [SkyWalking OAP Server]  ———→  [存储 (ES/MySQL)]  —→  [SkyWalking UI]
   (挂载 Agent)            (接收数据、分析、聚合)              (持久化)               (可视化)
  • Agent:挂载在业务服务上,无需修改代码(Java)或少量修改(其他语言),自动采集链路、指标、日志。
  • OAP Server:核心后端,负责数据接收、处理、告警。
  • UI:前端展示。

Java 应用集成(最主流,无侵入)

这是 SkyWalking 最成熟的场景,无需修改代码,只需启动时增加 -javaagent 参数。

下载 Agent

# 从官网或 GitHub 下载
wget https://dlcdn.apache.org/skywalking/java-agent/9.3.0/apache-skywalking-java-agent-9.3.0.tgz
tar -zxvf apache-skywalking-java-agent-9.3.0.tgz
# 解压后得到 skywalking-agent 目录

配置 Agent(可选,但推荐)

修改 skywalking-agent/config/agent.config

# 你的服务名称(在 UI 中标识该应用)
agent.service_name=my-java-app
# 后端 OAP Server 地址(gRPC 端口,默认 11800)
collector.backend_service=127.0.0.1:11800

启动业务服务(Java)

java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
     -Dskywalking.agent.service_name=my-java-app \
     -Dskywalking.collector.backend_service=127.0.0.1:11800 \
     -jar your-application.jar

说明-D 参数优先级高于 agent.config 文件。

验证

访问业务服务一次,过几秒查看 SkyWalking UI(默认 http://localhost:8080),应能看到服务拓扑和调用链。


非 Java 应用集成(修改代码或配置)

Go

使用官方提供的 Go Agent(需要修改代码):

import "github.com/apache/skywalking-go"
func main() {
    // 初始化 Agent,传入服务名和 OAP 地址
    sk, _ := skywalking.New(
        skywalking.WithServiceName("my-go-app"),
        skywalking.WithOAPServer("127.0.0.1:11800"),
    )
    defer sk.Close()
    // ... 你的业务代码
}

编译时需加入 Tag:-tags=agent

Node.js

使用 skywalking-backend-js(需要引入并配置):

// 在应用入口最顶部加载(必须第一行)
require('skywalking-backend-js').start({
    serviceName: 'my-node-app',
    collectorAddress: '127.0.0.1:11800',
});

Python

安装 apache-skywalking 包,在入口脚本中导入:

from skywalking import agent, config
config.service_name = 'my-python-app'
config.collector_address = '127.0.0.1:11800'
agent.start()

C++ / .NET / Lua

  • C++:使用 C++ Agent 库(需源码集成)。
  • .NET:使用 SkyAPM.Agent.AspNetCore NuGet 包。
  • Lua(Nginx/OpenResty):使用 nginx-lua-skywalking 模块。

部署 OAP Server 与 UI(后端必须)

Agent 采集的数据需要发送到 OAP Server,然后持久化到存储(推荐 ES,也可用 MySQL)。

使用 Docker Compose(推荐开发/测试)

version: '3.8'
services:
  oap:
    image: apache/skywalking-oap-server:9.7.0
    environment:
      - SW_STORAGE=elasticsearch  # 存储后端
      - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
    ports:
      - "11800:11800"   # gRPC 端口(Agent 上报)
      - "12800:12800"   # HTTP 端口(UI 查询)
    depends_on:
      - elasticsearch
  ui:
    image: apache/skywalking-ui:9.7.0
    environment:
      - SW_OAP_ADDRESS=http://oap:12800
    ports:
      - "8080:8080"
  elasticsearch:   # 存储
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    ports:
      - "9200:9200"

启动:

docker-compose up -d

如何修改 Agent 的上报地址?

如果你使用 Docker 部署业务应用,Agent 配置的 collector.backend_service 应指向 宿主机 IP(非 localhost),

-Dskywalking.collector.backend_service=192.168.1.100:11800

核心配置详解

配置项 作用 默认值
agent.service_name 应用在 SkyWalking 的显示名称 Your_ApplicationName
collector.backend_service OAP Server 的 gRPC 地址 0.0.1:11800
agent.sample_n_per_3_secs 每秒采样数(减少性能消耗) -1(全量采样)
agent.span_limit_per_segment 单个 Trace 最大 Span 数 300
plugin.mount 是否自动挂载插件(如 Spring、MySQL) true

验证集成的 3 个步骤

  1. 确认 Agent 启动日志:业务应用日志中应出现:

    SkyWalking agent initialized successfully.
  2. 检查 OAP Server 接收状态:访问 http://<OAP_IP>:12800/graphql,若返回 200 说明 UI 可连接。

  3. 触发一次请求并查看 UI

    • 访问你的业务接口(如 GET /api/user/1)。
    • 打开 SkyWalking UI -> 拓扑图,应显示服务节点。
    • 进入 追踪 页面,应能看到该请求的完整调用链。

最佳实践建议

  1. 生产环境使用 ES 存储:MySQL 仅适用于小规模演示,Elasticsearch 是推荐的存储后端。
  2. 配置采样率:高并发场景下建议设置 agent.sample_n_per_3_secs=1(每秒采 1 条),避免性能损耗。
  3. 将 Agent 与业务镜像打包:在 Docker 构建时将 Agent 文件 COPY 进镜像,启动命令挂载 javaagent
  4. 使用 Kubernetes 部署:通过 operatorinit-container 注入 Agent,无需修改业务镜像。

如果你能告诉我你使用的编程语言部署环境(如 Docker、K8s、物理机),我可以给出更具体的配置命令和脚本。

抱歉,评论功能暂时关闭!