# gala-anteater **Repository Path**: wangfenglai/gala-anteater ## Basic Information - **Project Name**: gala-anteater - **Description**: A time-series anomaly detection platform for operating system - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 25 - **Created**: 2022-10-25 - **Last Updated**: 2025-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gala-anteater ## 介绍 gala-anteater 是一款基于 AI 的操作系统灰度故障的异常检测平台,其集成了多种异常检测算法,针对不同场景和应用,实现实时地系统级故障发现、以及故障点的上报。 anteater 基于系统历史数据,进行自动化模型预训练、线上模型的增量学习和模型更新,能够很好地适应多场景、多指标型数据,实现分钟级模型推理能力。 ## 支持的异常检测场景汇总 当前 anteater 支持 3 大故障类别,13 种不同子场景的异常检测。 | 类别 | 诊断场景 | KPI | 故障注入方式 | |-----------------|------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------| | 应用级 | 应用时延(RTT) | gala_gopher_sli_rtt_nsec | chaosblade: network loss/delay, disk fill/burn, cpu | | | 应用吞吐量(TPS) | gala_gopher_sli_tps | chaosblade: network loss/delay, disk fill/burn, cpu | | 系统级 | TCP建链性能 | gala_gopher_tcp_link_syn_srtt | chaosblade: network delay | | | TCP传输性能 | gala_gopher_tcp_link_srtt | chaosblade: network loss | | | 系统I/O性能 | gala_gopher_block_latency_req_max | chaosblade: disk burn | | | 进程I/O性能 | gala_gopher_proc_bio_latency
gala_gopher_proc_less_4k_io_read
gala_gopher_proc_less_4k_io_write
gala_gopher_proc_greater_4k_io_read
gala_gopher_proc_greater_4k_io_write | chaosblade: disk burn | | | 磁盘吞吐量 | gala_gopher_disk_r_await
gala_gopher_disk_w_await | chaosblade: disk full | | | 网卡发送丢包 | gala_gopher_nic_tc_sent_drop | chaosblade: network loss | | [JVM OutOfMemory](docs/jvm_oom_introduction.md) | Heapspace | gala_gopher_jvm_mem_bytes_used
gala_gopher_jvm_mem_pool_bytes_used | java code: JavaOOMHttpServer | | | GC Overhead | gala_gopher_jvm_mem_bytes_used
gala_gopher_jvm_mem_pool_bytes_used | java code: JavaOOMHttpServer | | | Metaspace | gala_gopher_jvm_class_current_loaded | java code: JavaOOMHttpServer | | | Unable to create new native thread | gala_gopher_jvm_threads_current | java code: JavaOOMHttpServer | | | Direct buffer memory | gala_gopher_jvm_buffer_pool_used_bytes | java code: JavaOOMHttpServer | ## 安装部署 ### 前置条件 * 支持的python版本:3.7+; * anteater 依赖于 gopher 采集的数据,请先完成 gopher 的安装部署; * anteater 直接从 Prometheus 中获取时序指标型数据,需要完成 Prometheus 的安装部署; * anteater 依赖于 gopher 上报的 meta 数据(上报至 Kafka),因为需要确保 Kafka 安装部署完成。 ### 方法一:Docker镜像安装(适用于普通用户) #### Docker镜像制作 请在工程`./gala-anteater`目录下,执行下面的命令,将`gala-anteater`工程文件打包成Docker镜像。 ``` docker build -f Dockerfile -t gala-anteater:1.1.0 . ``` 注:根据环境网络情况,可能需要修改`Dockfile`文件中的`pip`源地址 #### Docker镜像运行 执行下面的命令,运行Docker镜像。首次运行会将配置文件`gala-anteater.yaml`文件映射到宿主机`/etc/gala-anteater/config`文件中, 请配置`gala-anteater.yaml`里面的参数,配置方式,请参考[配置文件介绍](https://gitee.com/openeuler/gala-anteater/blob/master/docs/conf_introduction.md)。 ``` docker run -v /etc/gala-anteater:/etc/gala-anteater -it gala-anteater:1.1.0 ``` ### 方法二:从本仓库源码安装运行(适用于开发者) #### 下载源码 ``` git clone https://gitee.com/openeuler/gala-anteater.git ``` #### 安装 工程`./gala-anteater`目录下执行下面命令: ```bash python3 setup.py install ``` #### 参数配置 配置参数会被映射到`/etc/gala-anteater/config`文件中,需要首先设置相应的参数,配置方式,请参考[配置文件介绍](https://gitee.com/openeuler/gala-anteater/blob/master/docs/conf_introduction.md)。 注:在配置文件中,最重要的是完成配置文件中中间件的配置,如其中`Kafka server/port`、`Prometheus server/port`。 #### 运行 ``` systemctl start gala-anteater ``` ### 日志 日志文件默认路径:`/var/gala-anteater/logs/`,也可以根据配置文件`log.settings.ini`去修改日志文件的路径。 ### 异常上报 gala-anteater输出异常检测结果到`Kafka`,如果检测到异常,检测结果输出到`Kafka`中,默认`Topic`为:`gala_anteater_hybrid_model`,也可以在`gala-anteater.yaml`中修改配置。查看异常检测结果,具体命令如下: ```bash ./bin/kafka-console-consumer.sh --topic gala_anteater_hybrid_model --from-beginning --bootstrap-server localhost:9092 ``` ## 异常检测结果 异常检测结果默认输出到`Kafka`中,也可存储到`ArangoDB`中,供第三方运维系统查询、集成。数据格式遵循`OpenTelemetry V1`规范,具体方式请参考 [Kafka to ArangoDB](docs/kafka_to_arangodb.md)。如下介绍异常检测输出格式 ### 输出数据 #### 输出数据格式 | 参数 | 参数含义 | 描述 | |:---:|:------:|---| | Timestamp | 时间戳 | 异常事件上报时间戳 | | Attributes | 属性值 | 主要包括:
1. entity_id命名规则:\_\_\
2. entity_id事件ID:\_\
3. event_type: 事件主要类型(APP/SYS/JVM)
4. event_source:事件上报来源
5. keywords(optional):事件关键词,用于快速搜索| | Resource | 资源 | 异常检测模型输出的信息,主要包括:
1. metric: 异常检测的主指标
2. labels: 异常metric标签信息(例如:Host/PID/COMM/IP)
3. score:事件的异常分数
4. root_causes (optional): 推荐的 Top N 根因信息
| | SeverityText | 异常事件类型 | INFO, WARN, ERROR, FATAL | | SeverityNumber | 异常事件编号 | 9, 13, 178, 21 ... | | Body | 异常事件信息 | 字符串类型,表示对当前异常事件的描述
格式:\ - \ - \ - \| #### 输出数据示例 示例一: ```json { "Timestamp": 1669343170074, "Attributes": { "entity_id": "7c2fbaf8-xxx-xxx-xxx-xxx_sli_xxx_16859_POSTGRE_0", "event_id": "1669343170074_7c2fbaf8-xxx-xxx-xxx-xxx_sli_2187425_16859_POSTGRE_0", "event_type": "app", "event_source": "gala-anteater", "keywords": [ "sli", "tcp" ] }, "Resource": { "metric": "gala_gopher_sli_tps", "labels": { "Host": "110f3138-xxx-xxx-xxx-xxxx-xxx", "PID": "1188486", "COMM": "xxx-server", "IP": "xx.xxx.xxx.xxx" }, "score":0.36, "root_causes": [ { "metric": "gala_gopher_net_tcp_retrans_segs", "labels": { "instance": "xxx.xxx.xxx.xxx:x", "job": "prometheus-xxx.xxx.xxx.xxx:x", "machine_id": "7c2fbaf8-xxx-xxx-xxx-xxx", "origin": "/proc/dev/snmp" }, "score": 16.9 }, { "metric": "gala_gopher_cpu_user_total_second", "labels": { "cpu": "6", "instance": "10.xxx.xxx.xxx:18001", "job": "prometheus-10.xxx.xxx.xxx:8001", "machine_id": "7c2fbaf8-xxx-xxx-xxx-xxx" }, "score": 6.1 } ] }, "SeverityText": "WARN", "SeverityNumber": 13, "Body": "2023-xx-xx xx:xx:xx - System Failure - xxx协议请求RTT" } ``` 示例二: ```json { "Timestamp": 1693385669409, "Attributes": { "entity_id": "110f3138-xxx-xxx-xxx-xxx-xxx.xxx.xxx.xxx_jvm_xxx", "event_id": "1693385669409_110f3138-xxx-xxx-xxx-xxx_jvm_xxx", "event_type": "jvm", "event_source": "gala-anteater", "keywords": [ "jvm" ] }, "Resource": { "metric": "gala_gopher_jvm_mem_pool_bytes_used","labels": { "PID": "xxx", "COMM": "java" }, "score": 0.1, "root_causes": [] }, "SeverityText": "WARN", "SeverityNumber": 13, "Body": "2023-08-30 08:54:29 - JVM OutOfMemory - 给定JVM内存池的已使用字节数 - {'PS Old Gen Usage': 0.99}" } ``` ## 项目路线图 ### 异常检测能力 | 特性 | 发布时间 | 发布版本 | | ------------------------------------------------- | -------- | ------------------------------------ | | 单维时序数据异常检测(Redis / PG应用性能劣化) | 22.12 | openEuler 22.03 SP1 | | 多维时序数据异常检测(TCP建链 / 传输 / 系统IO ) | 22.12 | openEuler 22.03 SP1 | | 多维阈值异常检测(JAVA OOM类异常) | 23.09 | openEuler 22.03 SP1, openEuler 23.09 | | 异常检测准确率提升(训练集压缩感知离群点过滤技术 + 多指标重构技术 + 异常度动态阈值技术) | 23.09 | openEuler 22.03 SP1, openEuler 23.09 | | 异常检测泛化能力提升(平稳 / 非平稳背景流自适应技术) | 23.09 | openEuler 22.03 SP1, openEuler 23.09 | | 异常检测泛化能力提升(在线学习 + 增量学习技术) | 23.09 | openEuler 22.03 SP1, openEuler 23.09 | | 白名单应用性能劣化异常检测 | 24.03 | openEuler 24.03 | ### 根因定位能力 | 特性 | 发布时间 | 发布版本 | | ------------------------------------------------------------ | -------- | ------------------------------------ | | 基于专家规则的应用性能劣化根因定位(虚拟化、分布式存储场景网络IO / 磁盘IO类故障) | 22.12 | openEuler 22.03 SP1 | | 基于因果图构建、因果传播分析的根因定位(根因传播推导技术 + 根因路径溯源技术) | 23.09 | openEuler 22.03 SP1, openEuler 23.09 | | 根因定位准确率提升(PC算法因果图 + 专家经验) | 24.03 | openEuler 24.03 | | 资源类异常通用根因定位(基于图谱的多变量时间序列) | 24.03 | openEuler 24.03 | | 多模态应用性能劣化根因定位(基于Metric、Logging、Tracing) | 24.09 | openEuler 24.09 |