diff --git a/Principle.png b/Principle.png deleted file mode 100644 index 6c9e191083b35278c6ff16a604d7e05a15b2a930..0000000000000000000000000000000000000000 Binary files a/Principle.png and /dev/null differ diff --git a/README.md b/README.md index 46afd5d1506e462096d03baa9f8d1f6bf17646c8..597afdb6196f596d7577b5a49473ca971da2844c 100644 --- a/README.md +++ b/README.md @@ -3,17 +3,15 @@ ​ 云场景中基础软件/业务应用之间的边界逐渐上移,基础软件逐渐成为云场景最重要的组成部分,而操作系统又最重要的基础软件之一。 ​ 从业界公开的数据看,云场景的一些重要故障均是与基础软件密切相关。公开数据显示现有主流云厂商月平均故障150+次数,75%的故障<1H,90%<1.5H,少量故障>5H。 -云场景的基础设施、业务场景的复杂性,导致这些故障现象大量集中基础软件(尤其是操作系统)层面。 +云场景的基础设施、业务场景的复杂性,导致这些故障现象大量集中基础软件(尤其是操作系统)层面,为此openEuler社区规划&孵化A-Ops项目,该项目包括基础设施监控、应用性能监控、应用安全、自动化及监控四大块功能。 -![](./background.png) +![](./png/a-ops-arch.png) # 介绍 -​ 针对云场景的故障特点,根据故障发展阶段划分成:系统隐患、灰度故障、故障 三个阶段[1],openEuler为此针对性的推出AOps解决方案,该解决方案包括多个关键组件,本文用于介绍其中的gala-ops系列组件。 +​ 针对云场景的故障特点,根据故障发展阶段划分成:系统隐患、灰度故障、故障 三个阶段,A-Ops规划应用性能监控解决方案,该解决方案包括多个关键组件,本文用于介绍相关gala-ops系列组件。 -​ gala-ops系列组件定位:云基础设施场景中,针对基础设施**灰度故障**导致**的应用性能劣化、卡**顿系统级故障**在线诊断**。 - -[1] https://blog.acolyer.org/2017/06/15/gray-failure-the-achilles-heel-of-cloud-scale-systems/ +​ gala-ops系列组件定位:云基础设施场景中,针对基础设施**灰度故障**导致**的应用性能劣化、卡**顿系统级故障**在线诊断**。提供包括**应用性能诊断、系统性能瓶颈诊断、系统参数修复、系统实时拓扑**等功能。 # 原理 @@ -21,7 +19,7 @@ 三步骤如下: -![](./Principle.png) +![](./png/Principle.png) # 为什么选择gala-ops @@ -43,7 +41,7 @@ gala-ops具备四个组件(gala-gopher、gala-spider、gala-anteater、gala-in 下图是推荐的集群部署模式,其中gala-gopher位于生产环境Node内,其他组件则位于云厂商管理面。 -![](./csp_arch.png) +![](./png/csp_arch.png) ## gala-ops系统集成 @@ -51,7 +49,7 @@ gala-ops具备四个组件(gala-gopher、gala-spider、gala-anteater、gala-in gala-gopher与管理面可能无法直接互通,为此gala-gopher也提供多种被集成方式。 -![](./system_integration.png) +![](./png/system_integration.png) ## gala-gopher @@ -59,7 +57,7 @@ gala-gopher与管理面可能无法直接互通,为此gala-gopher也提供多 - **数据采集器**:提供应用粒度low-level的数据采集,包括网络、磁盘I/O、调度、内存、安全等方面的系统指标采集,同时负责应用KPI数据的采集。 - **系统异常检测**:提供系统异常检测能力,覆盖网络、磁盘I/O、调度、内存等方面的场景系统异常,用户可以通过阈值设置异常上下限范围。 -- **性能热点分析**:提供on-cpu、off-cpu火焰图。 +- **性能热点分析**:提供CPU、内存、IO火焰图。 ### 原理及术语 @@ -163,7 +161,7 @@ gala-anteater是一款基于AI的操作系统异常检测平台。主要涵盖 **Online**: 将线下训练好的模型,部署到线上,然后利用线上真实的数据集,对模型进行在线训练以及参数调优,然后利用训练好的模型,进行线上环境的实时异常检测。 - ![](./anteater_arch.png) + ![](./png/anteater_arch.png) ### 安装及使用 参考[这里](https://gitee.com/openeuler/gala-anteater/blob/master/README.md) @@ -190,103 +188,15 @@ gala-anteater是一款基于AI的操作系统异常检测平台。主要涵盖 # 场景介绍 -## 架构感知 +## 系统实时拓扑 ​ gala-ops将系统观测白盒化,通过定义系统观测实体以及实体间的关系,完成水平、垂直方向的拓扑结构。水平拓扑是基于进程之间的TCP/IP通信链路计算得出,可以实时呈现系统集群业务流状态;垂直拓扑是基于系统领域知识计算得出,可以实时呈现软件运行上下文状态。 ### 观测实体 -水平、垂直拓扑内展现出系统内所有观测实体,gala-ops支持的观测实体范围如下: - -主机(host) - - |----------------------------------容器(container) - - |----------------------------------|---------------容器内进程(Process) - - |----------------------------------|---------------容器网络namespace (net_ns) - - |----------------------------------|---------------容器mount namespace (mnt_ns) - - |----------------------------------|---------------容器CPU CGroup (cpu_cgp) - - |----------------------------------|---------------容器内存 CGroup (mem_cgp) - - |----------------------------------进程(Process) - - |----------------------------------|---------------进程内线程(Thread) - - |----------------------------------|---------------进程内TCP链接 (tcp_link) - - |----------------------------------|---------------进程内socket(endpoint) - - |----------------------------------|---------------进程对应的高级语言运行时(runtime) - - |----------------------------------|---------------进程对应应用的性能指标(SLI) - - |----------------------------------域名访问(DNS) - - |----------------------------------|---------------客户端IP(client_ip) - - |----------------------------------|---------------DNS Sever IP(server_ip) - - |----------------------------------Nginx - - |----------------------------------|---------------客户端IP(client_ip) - - |----------------------------------|---------------虚拟IP(virtual_ip) - - |----------------------------------|---------------虚拟端口(virtual_port) - - |----------------------------------|---------------后端服务侧IP(server_ip) - - |----------------------------------|---------------后端服务侧端口(server_port) - - |----------------------------------Haproxy +水平、垂直拓扑内展现出系统内所有观测实体,gala-ops支持的观测实体参考[这里](https://gitee.com/openeuler/gala-docs/blob/master/gopher_tech.md) - |----------------------------------|---------------客户端IP(client_ip) - - |----------------------------------|---------------虚拟IP(virtual_ip) - - |----------------------------------|---------------虚拟端口(virtual_port) - - |----------------------------------|---------------后端服务侧IP(server_ip) - - |----------------------------------|---------------后端服务侧端口(server_port) - - |----------------------------------LVS - - |----------------------------------|---------------客户端IP(client_ip) - - |----------------------------------|---------------本地IP(local_ip) - - |----------------------------------|---------------虚拟IP(virtual_ip) - - |----------------------------------|---------------虚拟端口(virtual_port) - - |----------------------------------|---------------后端服务侧IP(server_ip) - - |----------------------------------|---------------后端服务侧端口(server_port) - - |----------------------------------调度系统(sched) - - |----------------------------------网络系统(net) - - |----------------------------------文件系统(fs) - - |----------------------------------网卡(nic) - - |----------------------------------|---------------网卡队列(qdisc) - - |----------------------------------磁盘(disk) - - |----------------------------------|---------------磁盘逻辑卷/分区(block) - - |----------------------------------cpu - - |----------------------------------内存(mem) - -上述部分观测实体介绍: +部分观测实体的介绍: - **NGINX(包括LVS/HAPROXY)**:在分布式应用场景中,通常会引入LoadBalancer,以实现业务流的弹性伸缩。通过提供LoadBalancer中间件的观测信息,可以更好的展示分布式应用的实时业务流拓扑。 - **DNS**:云原生微服务场景,服务之间都以域名访问,DNS流普遍应用于各种不同云原生集群中,对其观测可以更好的展示DNS访问情况。 @@ -294,11 +204,9 @@ gala-anteater是一款基于AI的操作系统异常检测平台。主要涵盖 - **SLI**: 进程所属应用的SLI,常见的SLI包括应用性能时延,比如HTTP(S)访问时延、redis访问时延、PG访问时延等。SLI可以根据应用场景自由扩展。 - **RUNTIME**:高级语言(包括Java、golang、python等)存在进程级运行时,这些运行时存在GC、协程等机制影响应用性能。 +系统实时拓扑就是将上述观测实体以拓扑形式呈现给用户,让用户实时了解系统当前运行状态。下面我们以openGauss主备集群来说明其应用效果。 - -架构感知就是将上述观测实体以拓扑形式呈现给用户,让用户实时了解系统当前运行状态。下面我们以openGauss主备集群来说明其应用效果。 - -![](./openGauss.png) +![](./png/openGauss.png) ### 水平拓扑 @@ -310,19 +218,19 @@ gala-anteater是一款基于AI的操作系统异常检测平台。主要涵盖 - 进程层:呈现进程实例之间的TCP流实时拓扑 - 主机层:呈现主机之间的TCP/IP实时拓扑(由进程级拓扑实时计算得出) -![](./app_horizontal_topology.png) +![](./png/app_horizontal_topology.png) ​ 应用层水平拓扑 -![](./proc_horizontal_topology.png) +![](./png/proc_horizontal_topology.png) ​ 进程层水平拓扑 -![](./host_horizontal_topology.png) +![](./png/host_horizontal_topology.png) ​ 主机层水平拓扑 @@ -334,19 +242,19 @@ gala-anteater是一款基于AI的操作系统异常检测平台。主要涵盖 通过选择水平拓扑内的对象(比如上图中应用实例、进程实例或Node实例)可以从不同对象实例视角观察垂直拓扑。 -![](./app_vertical_topology.png) +![](./png/app_vertical_topology.png) ​ 选中应用实例,进入应用实例垂直视图 **注意**:进程层内的观测实体只呈现进程、容器观测实体。 -![](./proc_vertical_topology.png) +![](./png/proc_vertical_topology.png) ​ 选中进程实例,进入进程实例垂直视图 **注意**:进程内的观测实体应呈现出进程、容器及其所有关联子对象。 -![](./host_vertical_topology.png) +![](./png/host_vertical_topology.png) ​ 选中主机实例,进入主机实例垂直视图 @@ -358,7 +266,7 @@ gala-anteater是一款基于AI的操作系统异常检测平台。主要涵盖 系统运行过程中,水平/垂直拓扑会随着实时运行情况而刷新,比如某个观测实体下线(比如进程),在2小时(时间可设定)范围内,拓扑内依然能够看到,但是应将其设置成虚线,以示区分。 -![](./proc_horizontal_change.png) +![](./png/proc_horizontal_change.png) ​ 进程离线后,水平拓扑发生变化 @@ -366,50 +274,68 @@ gala-anteater是一款基于AI的操作系统异常检测平台。主要涵盖 在垂直拓扑视图内,用户可以选中任意观测实体,查看观测实体运行状态。 -![](./entity_detail.png) +![](./png/entity_detail.png) -## 异常检测 -gala-ops具备2种异常检测能力:系统异常(也叫系统隐患)、应用异常。前者覆盖网络、磁盘I/O、调度、内存、文件系统等各类系统异常场景;后者包括常见应用时延KPI异常(包括redis、HTTP(S)、PG等),并且用户可以根据自身场景扩展KPI范围(要求KPI数据符合时序数据规范)。 -异常检测结果会标识出具体的观测实体,以及异常原因。用户可以通过kafka topic获取系统实时异常信息。 +### 案例介绍 -- 样例1:主机对象内block观测实体异常: +待补充 -``` -{ - "Timestamp": 1586960586000000000, // 异常事件时间戳 - "event_id": "1586xxx_xxxx" // 异常事件ID - "Attributes": { - "entity_id": "xx", // 发生异常的观测实体ID(集群内唯一) - "event_id": "1586xxx_xxxx", // 异常事件ID(同上) - "event_type": "sys", // 异常事件类型(sys: 系统异常,app:应用异常) - "data": [....], // optional - "duration": 30, // optional - "occurred count": 6,// optional - }, - "Resource": { - "metrics": "gala_gopher_block_count_iscsi_err", // 产生异常的metrics - }, - "SeverityText": "WARN", // 异常级别 - "SeverityNumber": 13, // 异常级别编号 - "Body": "20200415T072306-0700 WARN Entity(xx) Iscsi errors(2) occured on Block(sda1, disk sda)." // 异常事件描述 -} -``` +## 应用性能诊断 +gala-ops提供针对基础应用的性能(吞吐量、时延)诊断,已支持Redis、PG(数据库)、(将发布HTTP)性能劣化诊断。 +诊断的故障原因包括网络、I/O、调度、内存等。 -用户通过kafka订阅到异常事件后,可以表格化管理,以时间段形式呈现管理,如下: +### 案例介绍 + +待补充 + +## 系统隐患诊断 + +系统隐患主要指内核、基础库、运行时等中出现的一些错误、资源不足、性能突变等情况。故障原因包括网络、I/O、调度、内存等方面原因。 + +支持范围:参考[这里](https://gitee.com/openeuler/gala-docs/blob/master/gopher_tech_abnormal.md) -| 时间 | 异常事件ID | 观测实体ID | Metrics | 描述 | -| ----------------- | ------------ | ---------- | --------------------------------- | ------------------------------------------------------------ | -| 11:23:54 CST 2022 | 1586xxx_xxxx | xxx_xxxx | gala_gopher_block_count_iscsi_err | 20200415T072306-0700 WARN Entity(xx) Iscsi errors(2) occured on Block(sda1, disk sda). | +### 案例1介绍 + +异常检测结果会标识出具体的观测实体,以及异常原因。用户可以通过kafka topic获取系统实时异常信息。 + +- 样例1:主机对象内block观测实体异常: + + ``` + { + "Timestamp": 1586960586000000000, // 异常事件时间戳 + "event_id": "1586xxx_xxxx" // 异常事件ID + "Attributes": { + "entity_id": "xx", // 发生异常的观测实体ID(集群内唯一) + "event_id": "1586xxx_xxxx", // 异常事件ID(同上) + "event_type": "sys", // 异常事件类型(sys: 系统异常,app:应用异常) + "data": [....], // optional + "duration": 30, // optional + "occurred count": 6,// optional + }, + "Resource": { + "metrics": "gala_gopher_block_count_iscsi_err", // 产生异常的metrics + }, + "SeverityText": "WARN", // 异常级别 + "SeverityNumber": 13, // 异常级别编号 + "Body": "20200415T072306-0700 WARN Entity(xx) Iscsi errors(2) occured on Block(sda1, disk sda)." // 异常事件描述 + } + ``` + + 用户通过kafka订阅到异常事件后,可以表格化管理,以时间段形式呈现管理,如下: + + | 时间 | 异常事件ID | 观测实体ID | Metrics | 描述 | + | ----------------- | ------------ | ---------- | --------------------------------- | ------------------------------------------------------------ | + | 11:23:54 CST 2022 | 1586xxx_xxxx | xxx_xxxx | gala_gopher_block_count_iscsi_err | 20200415T072306-0700 WARN Entity(xx) Iscsi errors(2) occured on Block(sda1, disk sda). | **注意**:一定时间段范围内,同一个观测实体可能会报重复上报相同异常(但事件ID不同)。所以需要基于**观测实体ID + Metrics** 去重处理。 为了更好的展示异常事件所处集群系统的位置,用户可以通过异常表格内的观测实体ID跳转至垂直拓扑视图,举例如下: -![](./host_anomaly_detection.png) +![](./png/host_anomaly_detection.png) **注意**: @@ -419,6 +345,8 @@ gala-ops具备2种异常检测能力:系统异常(也叫系统隐患)、 +### 案例2介绍 + 样例2:进程对象内tcp_link观测实体异常: ``` @@ -454,7 +382,7 @@ gala-ops具备2种异常检测能力:系统异常(也叫系统隐患)、 为了更好的展示异常事件所处集群系统的位置,用户可以通过异常表格内的观测实体ID跳转至垂直拓扑视图,举例如下: -![](./proc_anomaly_detection.png) +![](./png/proc_anomaly_detection.png) **注意**: @@ -462,53 +390,15 @@ gala-ops具备2种异常检测能力:系统异常(也叫系统隐患)、 - 用户选中存在异常的观测实体后,应跳出具体异常的metrics视图,并定位至出现异常数据的时间区间。 - 水平视图应随即进入该进程为中心的水平拓扑视图。 -## 根因定位 - -gala-ops针对应用异常,具备2种根因定位能力:**单节点、跨节点**。 - -进入根因定位视图有2种方式: - -- 通过选择具体的应用异常进入根因定位视图。 -- 通过故障列表进入根因定位视图。 - - - -### 单节点根因定位 - -方式一介绍:通过异常列表进入根因定位视图: - -| 时间 | 异常事件ID | 观测实体ID | Metrics | 描述 | -| ----------------- | ------------ | ---------- | ------------------------ | ------------------------------------------------------------ | -| 11:23:54 CST 2022 | 1586xxx_xxxx | xxx_xxxx | gala_gopher_sli_rtt_nsec | 20200415T072306-0700 WARN Entity(xx) RTT deterioration fault occurs on process (comm = redis, proc_id = 3748) . | - -用户选择“异常事件ID”,可以跳转至根因定位视图,如下(单节点根因定位): - -![](./node_root_cause.png) - -注意:单节点根因定位视图,实际就是**主机实例垂直视图 + 根因定位路径** - - - -方式二介绍:通过故障列表进入根因定位视图: - -| 时间 | 故障现象 | 故障源 | 故障拓扑 | -| ----------------- | ------------------------------------------------------------ | ------------------------ | -------------------- | -| 11:23:54 CST 2022 | 20200415T072306-0700 WARN Entity(xx) RTT deterioration fault occurs on process (comm = redis, proc_id = 3748) . | gala_gopher_sli_rtt_nsec | ![](./topo_logo.png) | - -用户通过点击![](./topo_logo.png)进入根因定位视图。 - -### 跨节点根因定位(功能待上线) - -跨节点根因定位是面向分布式集群型应用,这类应用的故障可能会出现跨节点传播的现象(目前该功能还未上线),预期效果如下: +## 系统性能瓶颈诊断 -![](./nodes_root_cause.png) +### CPU冲高诊断 -注意:跨节点根因视图包括水平、垂直2部分,可以通过在水平视图中选择进程实例进行不同节点之间的导航 +### 内存泄漏(不停增长)诊断 -- 水平部分:**进程层水平拓扑 + 根因定位路径** -- 垂直部分:**进程实例垂直视图 + 根因定位路径** +### IO瓶颈诊断 -## 全栈热点分析 +### TCP传输性能劣化诊断 diff --git a/png/Principle.png b/png/Principle.png new file mode 100644 index 0000000000000000000000000000000000000000..c40fe333b66efb9f52c792cb8e3bcbb1fd648a88 Binary files /dev/null and b/png/Principle.png differ diff --git a/png/a-ops-arch.png b/png/a-ops-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..04af4b0547c2de0794bba348b22d7a313a884c95 Binary files /dev/null and b/png/a-ops-arch.png differ diff --git a/anteater_arch.png b/png/anteater_arch.png similarity index 100% rename from anteater_arch.png rename to png/anteater_arch.png diff --git a/app_horizontal_topology.png b/png/app_horizontal_topology.png similarity index 100% rename from app_horizontal_topology.png rename to png/app_horizontal_topology.png diff --git a/app_vertical_topology.png b/png/app_vertical_topology.png similarity index 100% rename from app_vertical_topology.png rename to png/app_vertical_topology.png diff --git a/background.png b/png/background.png similarity index 100% rename from background.png rename to png/background.png diff --git a/csp_arch.png b/png/csp_arch.png similarity index 100% rename from csp_arch.png rename to png/csp_arch.png diff --git a/entity_detail.png b/png/entity_detail.png similarity index 100% rename from entity_detail.png rename to png/entity_detail.png diff --git a/horizontal_topology.png b/png/horizontal_topology.png similarity index 100% rename from horizontal_topology.png rename to png/horizontal_topology.png diff --git a/host_anomaly_detection.png b/png/host_anomaly_detection.png similarity index 100% rename from host_anomaly_detection.png rename to png/host_anomaly_detection.png diff --git a/host_horizontal_topology.png b/png/host_horizontal_topology.png similarity index 100% rename from host_horizontal_topology.png rename to png/host_horizontal_topology.png diff --git a/host_vertical_topology.png b/png/host_vertical_topology.png similarity index 100% rename from host_vertical_topology.png rename to png/host_vertical_topology.png diff --git a/node_root_cause.png b/png/node_root_cause.png similarity index 100% rename from node_root_cause.png rename to png/node_root_cause.png diff --git a/nodes_root_cause.png b/png/nodes_root_cause.png similarity index 100% rename from nodes_root_cause.png rename to png/nodes_root_cause.png diff --git a/openGauss.png b/png/openGauss.png similarity index 100% rename from openGauss.png rename to png/openGauss.png diff --git a/proc_anomaly_detection.png b/png/proc_anomaly_detection.png similarity index 100% rename from proc_anomaly_detection.png rename to png/proc_anomaly_detection.png diff --git a/proc_horizontal_change.png b/png/proc_horizontal_change.png similarity index 100% rename from proc_horizontal_change.png rename to png/proc_horizontal_change.png diff --git a/proc_horizontal_topology.png b/png/proc_horizontal_topology.png similarity index 100% rename from proc_horizontal_topology.png rename to png/proc_horizontal_topology.png diff --git a/proc_vertical_topology.png b/png/proc_vertical_topology.png similarity index 100% rename from proc_vertical_topology.png rename to png/proc_vertical_topology.png diff --git a/system_integration.png b/png/system_integration.png similarity index 100% rename from system_integration.png rename to png/system_integration.png diff --git a/topo_logo.png b/png/topo_logo.png similarity index 100% rename from topo_logo.png rename to png/topo_logo.png