• SkyWalking快速上手(二)——架构剖析1


    介绍

    SkyWalking是一个开源的分布式系统追踪、监控和诊断工具,它能够帮助开发人员和运维人员实时监控和诊断分布式系统的性能问题。本文将深入剖析SkyWalking的架构,并介绍其核心组件及其功能。

    架构概述

    SkyWalking的架构由以下几个核心组件组成:

    1. Agent:在被监控的应用程序中嵌入的代理组件,用于收集应用程序的性能数据,并将其发送给Collector。

    2. Collector:用于接收和处理来自Agent的监控数据的组件,可以将数据存储到不同的存储介质中,如Elasticsearch、MySQL等。

    3. UI:提供用户界面,用于展示监控数据和性能指标,以及进行系统的配置和管理。

    4. Storage:用于存储和索引监控数据的组件,可以选择使用Elasticsearch、MySQL等作为存储介质。

    一、Agent组件

    介绍

    Agent是SkyWalking的核心组件之一,它负责在被监控的应用程序中收集性能数据,并将其发送给Collector。Agent可以嵌入到应用程序的代码中,或者通过Java Agent的方式进行加载。

    Agent的配置

    Agent的配置文件使用properties格式,可以通过配置文件指定Agent的相关参数。

    Agent的配置代码示例:

    # SkyWalking Agent 配置
    agent.service_name=my-application
    agent.sample_n_per_3_secs=100
    agent.namespace=default
    agent.collector.backend_service=localhost:11800
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在配置中,你需要指定应用程序的名称(service_name)、采样率(sample_n_per_3_secs)、命名空间(namespace)以及Collector的地址(collector.backend_service)。

    配置参数详解

    下面对Agent的配置参数进行详细解释:

    service_name

    • 描述:指定应用程序的名称。
    • 类型:字符串。
    • 示例:agent.service_name=my-application

    sample_n_per_3_secs

    • 描述:指定采样率,即每3秒钟采样的次数。
    • 类型:整数。
    • 示例:agent.sample_n_per_3_secs=100

    namespace

    • 描述:指定命名空间,用于区分不同的应用程序。
    • 类型:字符串。
    • 示例:agent.namespace=default

    collector.backend_service

    • 描述:指定Collector的地址。
    • 类型:字符串。
    • 示例:agent.collector.backend_service=localhost:11800

    Agent的工作原理

    Agent在应用程序中嵌入的代码中,通过字节码增强技术来收集性能数据。它会拦截应用程序的关键方法,如HTTP请求、数据库访问等,记录方法的调用信息、耗时等数据,并将这些数据发送给Collector进行处理。

    Agent的工作流程如下:

    1. Agent启动时,会加载配置文件,并初始化相关组件。

    2. Agent会通过字节码增强技术,修改应用程序的字节码,插入性能数据收集的代码。

    3. 当应用程序执行被拦截的方法时,Agent会收集相关的性能数据,并将其发送给Collector。

    4. Collector接收到Agent发送的数据后,会进行处理和存储,以便后续的查询和分析。

    二、Collector组件

    什么是Collector组件?

    在SkyWalking分布式系统监控工具中,Collector组件是起到收集和存储追踪数据的关键角色。它负责接收来自各个服务实例的追踪数据,并将其存储在后端的存储介质中,以供后续分析和查询使用。

    Collector组件的配置

    以下是一个示例的Collector组件的配置文件:

    # skywalking collector配置
    server:
      port: 12800  # Collector的监听端口
      jetty:
        acceptors: -1  # 接受连接的线程数,默认为-1(取决于CPU核心数量)
    
    storage:
      elasticsearch:   # 存储使用的后端数据库(此处以Elasticsearch为例)
        nameSpace: skywalking-oap  # 存储的命名空间
        clusterNodes: localhost:9200  # Elasticsearch集群节点地址
    
    receiver-register:
      backendService:
        # 其他Collector或者接收追踪数据的第三方组件的地址
        addresses: 127.0.0.1:11800
    
    exporter:
      grpc:
        host: 127.0.0.1  # Exporter服务的主机地址
        port: 11800  # Exporter服务的端口号
    
    logging:
      level: debug  # 日志级别
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上述配置文件中,我们可以看到Collector组件的一些重要配置项:

    • server.port:指定Collector的监听端口,默认为12800。
    • storage.elasticsearch.nameSpace:设置存储的命名空间,用于在Elasticsearch中区分不同的SkyWalking数据。
    • storage.elasticsearch.clusterNodes:配置连接Elasticsearch集群的节点地址。

    除此之外,配置文件中还有其他可选的配置项,如receiver-register.backendService.addresses用于指定其他Collector或接收追踪数据的第三方组件的地址,以及exporter.grpc.hostexporter.grpc.port用于指定Exporter服务的主机和端口。

    配置Collector组件示例

    以下是一个配置Collector组件的示例:

    # skywalking-collector-config.yaml
    
    server:
      port: 12800
    
    storage:
      elasticsearch:
        nameSpace: skywalking-oap
        clusterNodes: localhost:9200
    
    receiver-register:
      backendService:
        addresses: 127.0.0.1:11800
    
    exporter:
      grpc:
        host: 127.0.0.1
        port: 11800
    
    logging:
      level: debug
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    将上述配置保存为名为skywalking-collector-config.yaml的文件。然后,在启动Collector组件时,指定配置文件路径:

    ./bin/startup.sh -c skywalking-collector-config.yaml
    
    • 1

    这样就完成了Collector组件的配置,并可以通过以上所示的配置文件进行自定义修改。

    总结

    通过本文的介绍,你对SkyWalking的架构有了更深入的了解。Agent负责收集应用程序的性能数据,Collector负责接收和处理这些数据,UI提供了一个用户界面进行数据展示和配置管理,Storage用于存储和索引监控数据。希望本文对你有所帮助,如果你有任何问题或疑问,请随时提问。如果想对UI组件和Storage组件进行了解,请看下一篇文章:SkyWalking快速上手(二)——架构剖析2

  • 相关阅读:
    算法竞赛备赛之动态规划训练提升,DP基础掌握
    SpringBoot自动装配源码解析
    支持Python的新版vTESTstudio测试用例编写方法大集合(下)
    【毕业设计】基于STM32的天气预报盒子 - 嵌入式 单片机 物联网
    神经网络在故障诊断中的应用
    2023-09-20 事业-代号z-个人品牌-数据库内核专家-分析
    关于Redis集群的一些问题的理解
    (九)笔记.net学习之委托和事件、多播委托、观察者模式
    一步步来,如何提高语言表达能力,提高说服能力
    【PyCharm中PIL/Pillow的安装】
  • 原文地址:https://blog.csdn.net/yangsimo/article/details/132947968