SKYWALKING简介和部署方案

一.概述

SkyWalking 是一个开源可观测平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来保持分布式系统的清晰视图,甚至跨云。它是一种现代 APM,专为云原生、基于容器的分布式系统而设计。

SkyWalking 提供了在许多不同场景中观察和监控分布式系统的解决方案。首先,与传统方法一样,SkyWalking 为 Java、C#、Node.js、Go、PHP 和 Nginx LUA 等服务提供自动仪器代理。 (呼吁 Python 和 C++ SDK 贡献)。在多语言、持续部署的环境中,云原生基础设施变得更加强大,但也更加复杂。SkyWalking 的服务网格接收器允许 SkyWalking 接收来自 Istio/Envoy 和 Linkerd 等服务网格框架的遥测数据,从而使用户能够了解整个分布式系统。

SkyWalking 为服务服务实例端点进程提供可观察性功能。术语“服务”、“实例”和“端点”如今随处可见,因此有必要在 SkyWalking 的上下文中定义它们的具体含义:

  • 服务。表示一组/组工作负载,它们为传入请求提供相同的行为。您可以在使用仪器代理或 SDK 时定义服务名称。SkyWalking 还可以使用您在 Istio 等平台中定义的名称。
  • 服务实例。服务组中的每个单独的工作负载称为一个实例。就像 pods 在 Kubernetes 中一样,它不需要是单个操作系统进程,但是,如果您使用仪器代理,则实例实际上是一个真正的操作系统进程。
  • 端点。服务中用于传入请求的路径,例如 HTTP URI 路径或 gRPC 服务类 + 方法签名。
  • 过程。一个操作系统进程。在某些场景下,一个 Service Instance 并不是一个进程,比如 Kubernetes 的一个 pod 可以包含多个进程。

SkyWalking 允许用户了解服务和端点之间的拓扑关系,查看每个服务/服务实例/端点的指标并设置警报规则。

从 v9 开始,SkyWalking 引入了新的核心概念 Layer层,代表计算机科学中的一个抽象框架,例如操作系统(OS_LINUX 层)、Kubernetes(k8s 层)。所有检测到的实例都属于一个层来表示该实例的运行环境,服务将根据其实例有一个或多个层定义。

此外,还可以集成

  1. 其他分布式跟踪使用 SkyWalking 本机代理和 SDK 以及 Zipkin、Jaeger 和 OpenCensus。
  2. 其他度量系统,例如 Prometheus、Sleuth(Micrometer)、OpenTelemetry。

二.Skywalking 结构

SkyWalking 在逻辑上分为四个部分:探针、平台后端、存储和 UI。

  • Probes 收集遥测数据,包括各种格式的指标、跟踪、日志和事件(SkyWalking、Zipkin、OpenTelemetry、Prometheus、Zabbix 等)
  • Platform backend 支持数据聚合、分析和流处理,涵盖跟踪、指标、日志和事件。充当聚合者角色、接收者角色或两者兼而有之。
  • Storage 通过开放/可插拔接口保存 SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、BanyanDB,或实现您自己的。
  • UI 是一个高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。

三.Skwayking 的核心功能

  • 稳定的可观察性

无论目标系统采用何种部署方式,SkyWalking 都为其提供集成解决方案以保持可观测性。基于此,SkyWalking 提供了多种运行时表单和探针。

  • 包含拓扑、度量和跟踪

理解分布式系统的第一步是拓扑图。它以易于阅读的布局可视化整个复杂的系统。在该拓扑下,OSS 人员对服务、实例、端点、调用等指标都有更高的要求。跟踪采用详细日志的形式来理解这些指标。例如,当端点延迟变长时,您希望查看最慢的跟踪以找出原因。所以你可以看到,它们从大局到细节,都是需要的。SkyWalking 集成并提供了许多功能,使这成为可能且易于理解。

  • 轻量化

需要两个轻量的部分。

(1) 在 probe 中,我们只依赖网络通信框架,更喜欢 gRPC。因此,探针应该尽可能小,以避免库冲突和 VM 的负载,例如 JVM 中的 permsize 要求。

(2) 作为一个可观测平台,它是您的项目环境中的二级和三级系统。所以我们使用我们自己的轻量级框架来构建后端核心。那么您就不需要部署大数据技术平台并维护它们。SkyWalking 的技术栈应该很简单。

  • 可插拔性

SkyWalking 核心团队提供了很多默认实现,但这绝对是不够的,而且也不适合所有场景。因此,我们提供了很多可插拔的功能。

  • 便携性

SkyWalking 可以在多种环境下运行,包括: (1)使用 eureka 等传统注册中心。 (2) 使用包括服务发现在内的 RPC 框架,如 Spring Cloud、Apache Dubbo。 (3) 在现代基础设施中使用 Service Mesh。 (4)使用云服务。 (5)跨云部署。SkyWalking 在所有这些情况下都应该运行良好。

  • 互操作性

可观测性领域如此广阔,即使有社区的支持,SkyWalking 实际上也不可能支持所有系统。目前,它支持与其他 OSS 系统的互操作性,特别是探针,例如 Zipkin、Jaeger、OpenTracing 和 OpenCensus。对于最终用户来说,SkyWalking 能够接受和读取这些数据格式非常重要,因为用户不需要切换其库。

四.版本说明

目前使用的 skywalking 为 9.2.0 版本,该版本发布日期为 2022 年 9 月 1 日,该版本支持 zipkin 兼容,支持 PostgreSQL 监控。支持 MySQL 监控。支持 Elasticsearch 列别名,以兼容存储逻辑 Sharding 模型和无逻辑 Sharding 模型。添加 tls 用于 https 网络分析的组件 ID。适应 OpenTelemetry 原生指标协议。

五.安装信息

1.安装包

apache-skywalking-apm-9.2.0.tar.gz

2.目录结构介绍

将上面的安装包解压后,会得到一个对应的 skywalking-apm-9.2.0 目录,进入该目录后就可以看到后端发行包的组成部分:

  1. bin/cmd 脚本:位于/bin 文件夹中。包括用于后端服务器和 UI 启动的启动 Linux shell 和 Windows cmd 脚本。
  2. 后端配置:位于/config 文件夹中。包括后端的设置文件,它们是:
    1. application.yml (后端配置文件目录,用于核心配置)
    2. log4j.xml(日志记录目录,用于查错)
    3. alarm-settings.yml(告警配置目录,用于告警)
  3. 后端库:位于/oap-libs 文件夹中。后端的所有依赖项都可以在那里找到。
  4. Webapp env:位于 webapp 文件夹中。UI 前端 jar 文件及其 webapp.yml 设置文件可以在此处找到。

3.环境要求

官方说明,9.2.0 版本已经经过 JDK8 至 JDK17 的全部验证

后端侦听 0.0.0.0/11800gRPC API 和 0.0.0.0/12800HTTP REST API。所以需要保证这两个端口未被防火墙关闭

后端存储默认使用 H2,但是支持 elasticsearch,h2,mysql,tidb,postgresql 和 banyandb.

在 Java、DotNetCore、Node.js 和 Istio 代理/探针中,您应该将 gRPC 服务地址设置为 ip/host:11800,IP/主机应该是您的后端所在的位置。

前端侦听 8080 端口并请求 127.0.0.1/12800 运行 GraphQL 查询。

PS:以上所有数据库要求和端口要求 可以按照实际项目要求进行修改

4.通信拓扑图

5.后端配置文件说明

SkyWalking 后端配置文件在 config/application.yml 目录下,该设置文件背后的核心概念是 SkyWalking 收集器基于纯模块化设计。最终用户可以根据自己的独特要求切换或组装收集器功能。

在配置文件中,总共就三个级别

第一级.代表着这个模块是用来控制什么的

第二级.代表着选择器和组件的类目,可以由选择器来控制选择使用哪些组件,未选择的可以视作为删除,不影响服务正常使用

第三级.代表着具体的配置

例如:

storage:
  selector: mysql 
  h2:
    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
    user: ${SW_STORAGE_H2_USER:sa}
    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
  mysql:
    properties:
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}
      dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
      dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
      dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
      dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
    metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}

当然作为可插拔的结构,有必选模块和可选模块,可选模块如果异常可正常启动,必选模块需要仔细配置

必选模块如下:

  1. Core. 提供所有数据分析和流调度的基本和主要框架。
  2. Cluster. 管理集群中的多个后端实例,可以提供高吞吐量的处理能力。
  3. Storage. 持久化分析结果。
  4. Query. 为 UI 提供查询接口。
  5. Receiver and Fetcher. 将服务公开给代理和探测器,或从通道读取遥测数据。

所以在我们使用过程中,主要关注选择器和对应的配置就可以,其他的配置文件详解可见附录

6.IP和端口设置

后端使用IP和端口绑定,以允许操作系统拥有多个IP。绑定/监听的IP和端口由核心模块指定

core:
  default:
    restHost: 0.0.0.0
    restPort: 12800
    restContextPath: /
    gRPCHost: 0.0.0.0
    gRPCPort: 11800

gRPC 和 HTTP REST 服务有两个 IP/端口对。

  • 大多数代理和探测器使用 gRPC 服务来获得更好的性能和代码可读性。
  • 某些代理使用 REST 服务,因为该语言可能不支持 gRPC。
  • UI使用REST服务,但数据始终为GraphQL格式。

六.单体安装和集群安装

1.单体安装

单体安装比较简单

下面是我安装的执行语句

# 解压和进入文件目录
tar -zxvf apache-skywalking-apm-9.2.0.tar.gz
cd skywalking-apm-9.2.0/
# 修改IP,端口和存储介质的相关配置
vim ./config/application.yml
# (若有)修改IP,端口等相关配置
vim ./webapp/webapp.yml
# 初始化启动脚本,初始化数据库,创建表
sh bin/oapServiceInit.sh
# 启动服务
sh bin/startup.sh

2.集群安装

集群安装涉及到zookeeper或者nacos,需要有额外配置,我主要使用Nacos作为注册中心,我的配置如下:

core:
  default:
    role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
    restHost: ${SW_CORE_REST_HOST:0.0.0.0}
    restPort: ${SW_CORE_REST_PORT:12800}
    restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
    gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
    gRPCPort: ${SW_CORE_GRPC_PORT:11800}

如上:修改对应的IP和端口。

cluster:
  # 注意,务必注释掉standalone这一行。默认情况下用的单机模式(standalone),现在要改成集群模式,所以得注释掉。否则Skywalking将无法启动!
  # standalone:
  nacos:
    # Skywalking在Nacos Server的服务名称
    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
    # Nacos Server地址用http://ip:端口的形式
    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}
    # Nacos的namespace
    namespace: 'public'

如上:修改对应的Nacos相关信息。

配置上修改以上两个就可以,其余的可以按照单体配置执行,若有什么需要定制化的需求,可以看附录中的配置详解,修改对应的配置即可

七.对应agent使用

这里使用Java代理举例

1.安装包

apache-skywalking-java-agent-8.13.0.tgz

2.相关设置

  1. 代理适用于 JDK 8 - 17。
  2. agent在 SkyWalking 发布包中查找文件夹
  3. 设置agent.service_nameconfig/agent.config.可以是任何英文字符串。
  4. 设置collector.backend_serviceconfig/agent.config.默认指向127.0.0.1:11800,仅适用于本地后端。
  5. 添加-javaagent:/path/to/skywalking-package/agent/skywalking-agent.jar到 JVM 参数。并确保将其添加在-jar参数之前。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值