docker 部署Skywalking

创建网络

docker network create skywalking-network

docker compose 安装SkyWalking

docker-compose.yaml 文件

yaml 复制代码
version: "3"
services:
  # SkyWalking OAP server with Elasticsearch storage
  skywalking-oap:
    image: apache/skywalking-oap-server:8.9.0
    container_name: skywalking-oap
    ports:
      - "12800:12800"
      - "11800:11800"
    networks:
      - skywalking-network
    depends_on:
      skywalking-elasticsearch:
        condition: service_healthy  # 等待ES健康检查
    environment:
      - SW_STORAGE=elasticsearch
      - TZ=Asia/Shanghai
      - SW_STORAGE_ES_CLUSTER_NODES=skywalking-elasticsearch:9200
    #volumes:
    #  - ./oap-config:/skywalking/config # 挂载本地目录到容器中
  # Elasticsearch
  skywalking-elasticsearch:
    image: elasticsearch:7.16.3
    container_name: skywalking-elasticsearch
    ports:
      - "19200:9200"
      - "19300:9300"
    networks:
      - skywalking-network
    environment:
      - discovery.type=single-node
      - TZ=Asia/Shanghai
      - ingest.geoip.downloader.enabled=false  # 禁用GeoIP下载
    healthcheck: # 添加健康检查
      test: [ "CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep -q '\"status\":\"green\"'" ]
      interval: 10s
      timeout: 10s
      retries: 20
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    mem_limit: 2g
    #volumes:
    #  - ./es-data:/usr/share/elasticsearch/data/nodes # 挂载本地目录到容器中
  # SkyWalking UI
  skywalking-ui:
    image: apache/skywalking-ui:8.9.0
    container_name: skywalking-ui
    ports:
      - "18080:8080"
    networks:
      - skywalking-network
    environment:
      - SW_OAP_ADDRESS=http://skywalking-oap:12800
      - TZ=Asia/Shanghai
    volumes:
      - ./ui-config:/app/config # 挂载本地目录到容器中
networks:
  skywalking-network:
    external:
      name: skywalking-network

详细说明

  1. Elasticsearch 服务

    • 使用 elasticsearch:7.14.0 镜像。
    • 启用单节点模式,设置 JVM 参数以优化内存使用。
    • 启用安全功能,设置 elastic 用户的密码。
    • 挂载卷 elasticsearch-data 以持久化数据。
    • 映射端口 19200 和 19300。
  2. SkyWalking OAP Server 服务

    • 使用 apache/skywalking-oap-server:8.6.0-es7 镜像。
    • 配置 Elasticsearch 作为存储,设置集群节点地址、用户名和密码。
    • 映射端口 11800 和 12800。
    • 依赖于 Elasticsearch 服务。
  3. SkyWalking UI 服务

    • 使用 apache/skywalking-ui:8.6.0 镜像。
    • 配置 OAP Server 的地址。
    • 映射端口 18080。
    • 依赖于 OAP Server 服务。
  4. 网络和卷

    • 定义了一个名为 skywalking-net 的桥接网络,确保所有服务在同一网络中。
    • 定义了一个卷 elasticsearch-data,用于持久化 Elasticsearch 的数据。

启动服务

在包含 docker-compose.yml 文件的目录中运行以下命令启动服务:

bash 复制代码
docker compose up -d

验证

  1. 检查 Elasticsearch 是否正常运行

    bash 复制代码
    curl -u elastic:elastic http://127.0.0.1:19200
  2. 检查 OAP Server 是否正常运行

    查看 OAP Server 的日志,确认它是否成功连接到 Elasticsearch:

    bash 复制代码
    docker logs skywalking-oap
  3. 访问 SkyWalking UI

    打开浏览器,访问 http://172.30.112.19:18080,您应该能够看到 SkyWalking 的界面。

2. 客户端代码集成

2.1 下载 SkyWalking Agent

从 SkyWalking 官方网站下载对应版本的 Agent。

bash 复制代码
wget https://archive.apache.org/dist/skywalking/8.6.0/apache-skywalking-apm-8.6.0.tar.gz
tar -xvzf apache-skywalking-apm-8.6.0.tar.gz
cd apache-skywalking-apm-bin
2.2 配置 SkyWalking Agent

编辑 agent/config/agent.config 文件,配置以下参数:

properties 复制代码
# SkyWalking Agent 名称
SW_AGENT_NAME=springboot-skywalking-demo
# Collector 服务地址
SW_AGENT_COLLECTOR_BACKEND_SERVICES=172.30.112.19:11800
# 链路的最大 Span 数量
SW_AGENT_SPAN_LIMIT=2000
2.3 启动应用

在启动 Spring Boot 应用时,通过 -javaagent 参数指定 SkyWalking Agent 的路径。

bash 复制代码
java -javaagent:/path/to/skywalking-agent.jar \
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=172.30.112.19:11800 \
-DSW_AGENT_NAME=springboot-skywalking-demo \
-jar your-springboot-app.jar

jar包地址(官网):https://skywalking.apache.org/downloads/

阿里云:https://mirrors.aliyun.com/apache/skywalking/

运行起来就是这样

自己可以进行调用,然后记得修改时间(有的版本在下面):

使用文档

SkyWalking UI 使用文档

SkyWalking UI 提供了丰富的功能,用于监控和分析分布式系统的性能和调用链路。以下是 SkyWalking UI 的主要功能和使用方法:

1. 仪表盘 (Dashboard)

仪表盘提供了全局和当前服务的运行状态和监控指标,包括:

  • 调用热力图 (Calls HeatMap):显示请求数量和响应时间。
  • 应用平均告警 (Avg Application Alarm):显示应用的告警信息。
  • 慢服务 (Slow Service):显示响应时间最长的服务。
  • 应用吞吐量 (Application Throughput):显示每分钟的调用次数 (CPM)。
2. 拓扑图 (Topology)

拓扑图以图形化方式展示服务之间的依赖关系和调用链路,包括:

  • 拓扑结构图 (Topology Map):显示服务之间的调用关系。
  • 概览 (Overview):显示服务的总体运行状态。
  • SLA (Service Level Agreement):显示服务的可用率。
  • 每分钟调用 (Calls Per Minute):显示每分钟的调用次数。
  • 平均响应时间 (Avg Response Time):显示服务的平均响应时间。
3. 服务 (Service)

服务页面提供了特定服务的详细信息,包括:

  • 平均吞吐量 (Avg Throughput):显示服务的平均吞吐量。
  • 平均响应时间 (Avg Response Time):显示服务的平均响应时间。
  • 平均可用率 (Avg SLA):显示服务的平均可用率。
  • 依赖图 (Dependency Map):显示服务的依赖关系。
4. 端点 (Endpoint)

端点页面提供了特定端点的详细调用数据,包括:

  • 调用次数 (Call Count):显示端点的调用次数。
  • 平均响应时间 (Avg Response Time):显示端点的平均响应时间。
  • 错误率 (Error Rate):显示端点的错误率。
  • 调用链路 (Trace):显示端点的调用链路。
5. 追踪 (Trace)

追踪页面提供了具体的调用链路数据,包括:

  • Trace ID:唯一标识一次调用的 ID。
  • 调用链路:显示每次调用的详细链路,包括每个节点的响应时间、调用顺序等。
6. 性能剖析 (Performance Analysis)

性能剖析页面提供了对特定端点的性能分析,包括:

  • 采样分析:对端点进行采样分析,查看详细的堆栈信息。
  • 任务列表:显示当前的性能分析任务。
  • 任务详情:查看任务的详细信息,包括实例信息、操作类型、操作时间等。
7. 日志 (Log)

日志页面提供了服务的日志信息,包括:

  • 服务日志:显示服务的日志信息。
  • 浏览器日志:显示浏览器的日志信息。
  • 追踪 ID:通过追踪 ID 查看跨服务的整体流程日志。
8. 告警 (Alarm)

告警页面展示了触发告警的列表,包括:

  • 实例告警:显示实例相关的告警信息。
  • 请求超时:显示请求超时相关的告警信息。
9. 事件 (Event)

事件页面展示了服务实例的启动和端点的调用等事件信息。

10. 时间选择器 (Time Selector)

时间选择器用于设定统计指标的时间范围,所有指标数据展示都依赖于这个时间范围。

官方文档

SkyWalking 的官方文档提供了详细的使用指南和配置说明,建议参考以下链接:

通过这些功能和文档,您可以全面监控和分析分布式系统的性能和调用链路,快速定位和解决性能问题。

相关推荐
斯普信云原生组6 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
喵了几个咪6 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
工具罗某人6 小时前
docker compose部署kafka集群搭建
docker·容器·kafka
开心码农1号8 小时前
k8s中service和ingress的区别和使用
云原生·容器·kubernetes
L1624769 小时前
Kubernetes 完整学习手册(1 主多从 + 纯 YAML 部署 + 访问原理)
学习·容器·kubernetes
sbjdhjd12 小时前
Docker | 核心概念科普 + 保姆级部署
linux·运维·服务器·docker·云原生·面试·eureka
摇滚侠12 小时前
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 一键安装 Docker 1Panel 一键安装 MySQL Redis OpenClaw
linux·docker·centos
comedate12 小时前
【OpenClaw】 Open-WebUI Docker 部署连接本地 Ollama 技术文档
docker·ollama·openwebui·openclaw
川trans13 小时前
基于 Docker & K8s 的 MySQL 容器化部署与应用关联实践
mysql·docker·kubernetes
BullSmall13 小时前
Prometheus 可以监控docker 部署的Nginx 吗?
nginx·docker·prometheus