• Spring Boot 链路追踪 SkyWalking 入门


    1 SkyWalking

    1.1 概述

    SkyWalking 是什么?

    SkyWalking是一款分布式系统的应用程序性能监控工具,专为 微服务 、 云原生 和基于 容器 的 (Kubernetes) 架构而设计。

    1.2 功能列表

    既然这么强大,那么SkyWalking 有哪些功能呢?

    • 跟踪、指标和日志记录:SkyWalking 旨在实现一致的可观察性。在浏览器中监控您的应用程序发生的一切
    • 服务网格和 FaaS 准备就绪:内置服务网格和 FaaS 可观察性。从 Istio + Envoy Service Mesh 和 OpenFunction 作为 FaaS 平台收集和分析数据。
    • 可插拔存储:SkyWalking 支持广泛的后端存储解决方案,支持(H2、OpenSearch、ElasticSearch 6, 7, 8、MySQL、TiDB、PostgreSQL、BanyanDB)并且它们是可插拔的。
    • 多种监控手段:通过语言探针和 Service Mesh 等手段,获得链路、日志、指标等监控数据
    • 多个语言探针:Java、.Net Core、PHP、NodeJS、Golang、LUA、Rust、C++ 等
    • 轻量级高性能:无需大数据组件,无需大量的硬件资源,且对应用实例的负载消耗极低
    • 模块化架构:数据传输、数据存储,注册发现等模块,可替换不同的基础设施实现
    • 端到端的监控:SkyWalking 提供本地代理并与全球可观察性工具配合使用以支持所有堆栈监控,前端:Vue、React 等,后端:Java、.Net Core、PHP、NodeJS、Golang、Istio 等
    • 告警支持:内置 webhook 支持通过 HTTP、gRPC、Slack 等自动发送事件通知
    • 可视化界面:好用的监控后台,可支持自定义配置,或是进一步自定义它或集成您自己的。

    1.3 整体架构

    SkyWalking 整体架构如何?

    SkyWalking 在逻辑上分为四个部分:Probes、Platform backend、Storage 和 UI。

    • Agent:在应用中,收集 Trace、Log、Metrics 等监控数据,使用 RPC、RESTful API、Kafka 等 Transport 传输方式,发送给 OAP 服务,包括各种格式的指标、跟踪、日志和事件(SkyWalking、Zipkin、OpenTelemetry、Prometheus、Zabbix 等)
    • 平台后端:支持数据聚合、分析和流式处理,涵盖跟踪、指标、日志和事件。作为聚合者角色、接收者角色或两者兼而有之。
    • Storage:通过开放/可插入接口存储 SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、BanyanDB,也可以自己实现。
    • Web UI:是一个高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。

    2. 搭建skywalking 单机环境​​​​

    2.1 skywalking docker-compose 准备

    1. 新建skywalking目录
    1. mkdir skywalking
    2. cd skywalking
    3. mkdir elasticsearch && cd elasticsearch
    4. mkdir config && cd config
    5. touch elasticsearch.yml
    1. 编辑elasticsearch.yml
    1. cluster.name: "docker-cluster"
    2. network.host: 0.0.0.0
    3. # In tracing scenario, consider to set more than this at least.
    4. # thread_pool.index.queue_size: 1000 # Only suitable for ElasticSearch 6
    5. thread_pool.write.queue_size: 1000 # Suitable for ElasticSearch 6 and 7

    然后保存

    3. 新建docker-compose.yaml

    1. version: '3.3'
    2. services:
    3. elasticsearch:
    4. image: elasticsearch:7.17.5
    5. container_name: elasticsearch
    6. environment:
    7. - "cluster.name=elasticsearch"
    8. - "discovery.type=single-node"
    9. - "ES_JAVA_OPTS=-Xms1g -Xmx2g"
    10. volumes:
    11. - ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
    12. - ./elasticsearch/data:/usr/share/elasticsearch/data
    13. - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    14. ports:
    15. - 9200:9200
    16. restart: always
    17. oap:
    18. image: apache/skywalking-oap-server:9.1.0
    19. container_name: oap
    20. depends_on:
    21. - elasticsearch
    22. links:
    23. - elasticsearch:elasticsearch
    24. restart: always
    25. ports:
    26. - 11800:11800
    27. - 12800:12800
    28. volumes:
    29. - ./config:/skywalking/config
    30. environment:
    31. SW_STORAGE: elasticsearch
    32. SW_NAMESPACE: sk-es
    33. SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
    34. SW_STORAGE_ES_ADVANCED: "{\"index.translog.durability\":\"request\",\"index.translog.sync_interval\":\"5s\"}"
    35. SW_STORAGE_ES_INDEX_SHARDS_NUMBER: 2
    36. SW_STORAGE_ES_BULK_ACTIONS: 2000
    37. SW_STORAGE_ES_BULK_SIZE: 20
    38. SW_STORAGE_ES_FLUSH_INTERVAL: 10
    39. SW_STORAGE_ES_CONCURRENT_REQUESTS: 2
    40. SW_STORAGE_DAY_STEP: 15
    41. SW_CORE_RECORD_DATA_TTL: 15
    42. SW_CORE_METRICS_DATA_TTL: 20
    43. skywalking-ui:
    44. image: apache/skywalking-ui:9.1.0
    45. container_name: skywalking-ui
    46. depends_on:
    47. - oap
    48. links:
    49. - oap
    50. restart: always
    51. ports:
    52. - 9090:8080
    53. environment:
    54. SW_OAP_ADDRESS: http://oap:12800
    55. SW_TIMEOUT: 5000

    编辑完保存

    1. 运行容器

    在skywalking目录下运行容器

    docker-compose up -d

    出现以下代表安装成功

    1. 访问 UI 界面

    浏览器输入http://127.0.0.1:9090/,出现以下界面

    2.2 SkyWalking Java Agent

    1. 进入skywalking 下载页面 ,下载Java Agent最新包

    2. 解压缩skywalking-agent.jar

    1. 配置 Java 启动脚本
    • idea 启动

      jvm 参数

    SW_AGENT_NAME=sparkzxl-auth-server;SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_SPAN_LIMIT=3000
    SW_AGENT_NAME=sparkzxl-auth-server;SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_SPAN_LIMIT=3000

    SkyWalking Agent 配置

    SW_AGENT_NAME=sparkzxl-auth-server;SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_SPAN_LIMIT=3000
    参数说明示例值
    SW_AGENT_NAME配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 spring.application.namesparkzxl-auth-server
    SW_AGENT_COLLECTOR_BACKEND_SERVICES配置 Collector 地址(OAP连接地址)127.0.0.1:11800
    SW_AGENT_SPAN_LIMIT配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕2000
    1. 启动 Spring Boot 项目

      idea 启动项目,在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下:

    1. EBUG 2022-07-27 17:22:43.915 main AgentPackagePath : The beacon class location is jar:file:/Users/zhouxinlei/skywalking/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
    2. INFO 2022-07-27 17:22:43.916 main SnifferConfigInitializer : Config file found in /Users/zhouxinlei/skywalking/agent/config/agent.config.

    同时,也可以在 /Users/zhangsan/skywalking-agent/logs/skywalking-api.log 查看对应的 SkyWalking Agent 日志。

    2.3 简单测试

    启动完成后,可以去 SkyWalking UI 查看是否链路收集成功。

    ① 打开 http://127.0.0.1:9090/ 地址,进入 SkyWalking UI 界面。

    ② 点击service names

    可以看到很多指标

    ③ 点击Trace,追踪接口请求

    ④其他tab

    3 彩蛋

    下一节讲解skywalking 日志追踪分析,先上个效果图:

  • 相关阅读:
    HDFS 短路读的实现(全网最全面深入讲解)
    CPU状态信息us,sy,ni,id,wa,hi,si,st含义
    setContentView源码解析
    在Ubuntu20.04安装Kylin4 On Docker并在DataGrip配置JDBC协议连接容器内Hive1.2.1及Kylin4.0.0
    网络通信基本原理
    智慧民政解决方案-最新全套文件
    OpenGL原理与实践——核心模式(三):Texture-纹理系统理论与应用
    聊聊ChatGLM-6B医疗数据微调
    Maven入门到掌握(一套打通任督二脉)
    买错票基本上就是要错过2天行情
  • 原文地址:https://blog.csdn.net/Q54665642ljf/article/details/126081819