• skywalking 6.4 分布式链路跟踪 使用笔记


    介绍(摘自上一篇 “skywalking5.X 使用笔记”):

    skywalking 简介(链路跟踪与分析)

    随着业务越来越复杂,企业应用也进入了分布式服务化的阶段,随着模块的不断增多,一次请求可能会涉及到十几个甚至几十个服务的协同处理,那么如何准确快速的定位到线上故障和性能瓶颈,便成为我们不得不面对的棘手问题,传统的日志监控等方式无法很好达到跟踪调用,排查问题等需求。在谷歌论文《 Dapper,大规模分布式系统的跟踪系统》的指导下,许多优秀的 APM 应运而生。

    分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果您希望切换追踪系统,往往会带来较大改动。OpenTracing 为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序 / 类库和追踪或日志分析程序之间。详细介绍见

    Skywalking 是一款国内开源的应用性能监控工具,支持对分布式系统的监控、跟踪和诊断。

    Skywalking 是一款 APM(应用程序性能监视器),尤其适用于微服务,Cloud Native 和基于容器的架构系统。也称为分布式跟踪系统。它提供了一种自动检测应用程序的方法:无需更改目标应用程序的任何源代码;以及具有高效流媒体模块的收集器。

    针对分布式系统的 APM(应用性能监控)系统,特别针对微服务、cloud native 和容器化 (Docker, Kubernetes, Mesos) 架构, 其核心是个分布式追踪系统。

    该项目由国人吴晟基于 OpenTracking 实现的开源项目 skywalking(码云、github)

    2017 年 12 月 8 日,Apache 软件基金会孵化器项目管理委员会 ASF IPMC 宣布 “SkyWalking 全票通过,进入 Apache 孵化器”

    官方的首页的图片上可以到 skywalking 大致架构;

    特性:

    存储,集群管理多种机制可选;

    优秀的可视化方案;

    多种监控手段,语言探针和服务网格;

    轻量高效,不需要大数据(官网这句没懂);

    支持告警;

    多语言自动探针,Java,.NET Core 和 Node.JS;

    模块化,用户界面化;

    目前最新版的能够支持 jdk1.9;

    国内众多一线大厂在采用 skywalking 做为监控与链路性能分析平台,如:华为、当当、小米、招商等;

    2019 年 4 月 SkyWalking 已毕业成为 Apache 顶级项目,有多位大牛技术支撑以及社区有大量受众参与;

    性能好,针对单实例 5000tps 的应用,在全量采集的情况下,只增加 10% 的 CPU 开销。详细评测见《skywalking agent performance test》。

    采用探针技术,在使用过程中,完全是 0 代码,无侵入,分布式自动采集与监控系统运行;

    支持自动及手动探针;

        自动探针:Java 支持的中间件、框架与类库列表;

        手动探针:OpenTrackingApi、@Trace 注解、trackId 集成到日志中。

    总体特性(来源于官网博客):

        1.Skywalking Agent:使用 Javaagent 做字节码植入,无侵入式的收集,并通过 HTTP 或者 gRPC 方式发送数据到 Skywalking Collector。

        2. Skywalking Collector :链路数据收集器,对 agent 传过来的数据进行整合分析处理并落入相关的数据存储中。

        3. Storage:Skywalking 的存储,时间更迭,sw 已经开发迭代到了 6.x 版本,在 6.x 版本中支持以 ElasticSearch、Mysql、TiDB、H2、作为存储介质进行数据存储。

        4. UI :Web 可视化平台,用来展示落地的数据。

    参见官方(博客):http://skywalking.apache.org/zh/blog/2019-01-03-monitor-microservice.html

    官网

    apache 官网:http://skywalking.apache.org/zh/

    github:https://github.com/apache/skywalking/

    官方示例:http://122.112.182.72:8080/

    官方文档(可用谷歌翻译看):https://github.com/apache/skywalking/tree/master/docs

    下载

    全文检索引擎:elasticsearch-6.6.2

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz

    elasticsearch-head 管理插件

    wget https://codeload.github.com/mobz/elasticsearch-head/zip/master

    apache-skywalking6.4 安装包

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/6.4.0/apache-skywalking-apm-6.4.0.zip

    注意:skywalking6.4 使用数据源 elasticsearch-6.x 系统版本(我下载最新的 elasticsearch-7.x 版本折腾了半天,最后放弃,因 skywalking 会向 elasticsearch 创建大量 template 索引模板,因 elasticsearch-7.x 的版本过新,其中部份字段配置有变化,导制无法创建成功)

    安装步骤

    安装数据源与插件(相关安装与使用,网上资料众多)

    elasticsearch-6.6.2 (安装过程省略,请自行百度)

    elasticsearch-head (安装过程省略,请自行百度)

    解压 apache-skywalking-apm-6.4.0.zip,目录说明:

    agent:监控代理程序,请在系统服务所在的主机保留该目录内所有内容(该目录做为独立程序);

    bin:启动脚本

    webapp:UI 程序与服务目录

    config:相关数据源、注册中心等配置存放目录

    配置数据源

    使用 elasticsearch

    打开 config/application.yml 配置文件 ,在 storage 节点,注释 h2 数据源,启用 elasticsearch 全文检索引擎做为数据源存储;

    h2 是默认自带的内嵌式数据库(有兴趣可自行百度)

    注意其中的几个核心参数:

    1. # 配置你的elasticsearch服务的IP和端口,集群IP请用“,”逗号隔开
    2. clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.110.35:9200}
    3. #存储最多7天的内容,过期数据将会清理。因此请根据实际需求进行调整
    4. recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
    5. # 每10秒刷新数据到收集器中
    6. flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10}
    7. # 提供2个并发请求,如果系统业务量大,日志产生的非常快,请根据实况调整
    8. concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}

    使用 mysql

    打开 config/application.yml 配置文件 ,在 storage 节点,同样将 h2 注释掉,将 mysql 的配置打开

    打开 config/datasource-settings.properties 配置文件,根据自身的配置进行修改

    后续本文演示的内容均基于 elasticsearch 数据源进行展示;

    修改 agent 代理配置

    注意以下修改:

    1. # 将Your_ApplicationName修改为自已的项目名称
    2. agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
    3. # 将代理程序的指向收集器服务的IP和端口
    4. collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.110.35:11800}

    运行

    运行收集器与 UI 程序

    进入 bin 目录(我是上传到 linux 环境下运行,如果是 windows 请双击运行 startup.bat)

    ./startup.sh

    也可以分别单独启动

    单独启动 collector,运行

    ./oapService.sh

    单独启动 UI, 运行

    ./webappService.sh

    使用 agnet

    在 apache-skywalking-apm-bin 解压包下的 agent 目录中为代理程序独立包目录。该 agent 文件夹,可以单独复制出放在项目系统所在服务器的任意目录下。

    agent 文件夹下的 skywalking-agent.jar 即为监控代理程序,只需要在 jvm 的启动命令中加载该 jar 包,即可完成监控代理;

    部署 java agent

    Linux Tomcat 7, Tomcat 8

    修改 tomcat/bin/catalina.sh, 在首行加入如下信息:

    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS

    Windows Tomcat 7, Tomcat 8

    修改 tomcat/bin/catalina.bat, 在首行加入如下信息:

    set "CATALINA_OPTS=-javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"

    JAR file

    在启动你的应用程序的命令行中添加 -javaagent 参数。并确保在 - jar 参数之前添加它。例如:

    java -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar -jar yourApp.jar

    IDAE 配置 Agent

    在 IDEA 中配置本地程序 agent 代理,在 VM options 中 - javaagent:D:\test\apache-skywalking-apm-bin\agent\skywalking-agent.jar,配置完毕直接运行即可;

    运行项目系统后,打开系统界面进行业务操作,则 skywalking-agent.jar 会根据代理计划,收集相关日志发送到 skywalking 收集器服务中。

    skywalkingUI 界面

    打开 skywalking 管理界面(skywalking 服务部署的 IP):

    http://localhost:8080

    刷新界面,即可获取 agent 发送的监控数据;

    界在相对比较简洁,功能不多,但都比较实用,可以在多个项目与数据库之间切换,相关指标可以看懂,不在本文详细描述,具体操作如下:

    首页概览

    URL 链路追踪

    连接拓扑图

    当前数据库

    全局信息

    当前服务

    当前实例

    总结

          简洁又好用的软件,比大众点评的 cat 要容易上手(个人认为不如 cat 功能强大与复杂),已经满足对于系统的链路跟踪与分析需求,最后再次向 skywalking 原始作者大牛吴晟致敬;

         附上我的《skywalking 5.X 分布式链路跟踪 使用笔记》里面有关于项目代码中使用手动探针:OpenTrackingApi、@Trace 注解、trackId 集成到日志中。

    skywalking 5.X 分布式链路跟踪 使用笔记

  • 相关阅读:
    Win11 22000.1279(KB5019157)微软ISO镜像
    同源策略,跨域,请求,网络安全详细知识
    typescript在vue3中的使用。
    【K8S系列】深入解析k8s网络插件—Calico
    【笔记】从零开始大模型开发与微调:基于PyTorch与ChatGLM
    【云原生】Docker网络
    二进制安装minio 并实现主从同步
    Springboot学习笔记——1
    HCIA网络基础7-VRP和命令行基础
    计算机毕业设计Java“传情旧物”网站(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/jilo88/article/details/125515892