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 | 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 安装部署完成。
请在工程./gala-anteater
目录下,执行下面的命令,将gala-anteater
工程文件打包成Docker镜像。
docker build -f Dockerfile -t gala-anteater:1.1.0 .
注:根据环境网络情况,可能需要修改Dockfile
文件中的pip
源地址
执行下面的命令,运行Docker镜像。首次运行会将配置文件gala-anteater.yaml
文件映射到宿主机/etc/gala-anteater/config
文件中,
请配置gala-anteater.yaml
里面的参数,配置方式,请参考配置文件介绍。
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
目录下执行下面命令:
python3 setup.py install
配置参数会被映射到/etc/gala-anteater/config
文件中,需要首先设置相应的参数,配置方式,请参考配置文件介绍。
注:在配置文件中,最重要的是完成配置文件中中间件的配置,如其中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
中修改配置。查看异常检测结果,具体命令如下:
./bin/kafka-console-consumer.sh --topic gala_anteater_hybrid_model --from-beginning --bootstrap-server localhost:9092
异常检测结果默认输出到Kafka
中,也可存储到ArangoDB
中,供第三方运维系统查询、集成。数据格式遵循OpenTelemetry V1
规范,具体方式请参考 Kafka to ArangoDB。如下介绍异常检测输出格式
参数 | 参数含义 | 描述 |
---|---|---|
Timestamp | 时间戳 | 异常事件上报时间戳 |
Attributes | 属性值 | 主要包括: 1. entity_id命名规则:<machine_id><table_name><keys> 2. entity_id事件ID:<timestamp>_<entity_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 | 异常事件信息 | 字符串类型,表示对当前异常事件的描述 格式:<timestamp> - <header> - <description> - <details> |
示例一:
{
"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"
}
示例二:
{
"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 |