@johnny-joster/n9e-plugin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +8 -0
- package/README.md +191 -0
- package/docs/plans/2026-02-12-n9e-plugin-design.md +377 -0
- package/docs/plans/implementation-plan.md +2338 -0
- package/index.ts +53 -0
- package/openclaw.plugin.json +41 -0
- package/package.json +24 -0
- package/skills/query-active-alerts/SKILL.md +144 -0
- package/skills/query-alert-mutes/SKILL.md +173 -0
- package/skills/query-alert-rules/SKILL.md +167 -0
- package/skills/query-historical-alerts/SKILL.md +165 -0
- package/src/config-schema.ts +9 -0
- package/src/n9e-client.ts +251 -0
- package/src/openclaw-plugin-sdk.d.ts +47 -0
- package/src/tools/active-alerts.ts +109 -0
- package/src/tools/alert-mutes.ts +123 -0
- package/src/tools/alert-rules.ts +120 -0
- package/src/tools/historical-alerts.ts +134 -0
- package/src/types.ts +180 -0
- package/tsconfig.json +19 -0
package/index.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
2
|
+
import {
|
|
3
|
+
activeAlertsToolInputSchema,
|
|
4
|
+
activeAlertsToolHandler
|
|
5
|
+
} from "./src/tools/active-alerts.ts";
|
|
6
|
+
import {
|
|
7
|
+
historicalAlertsToolInputSchema,
|
|
8
|
+
historicalAlertsToolHandler
|
|
9
|
+
} from "./src/tools/historical-alerts.ts";
|
|
10
|
+
import {
|
|
11
|
+
alertRulesToolInputSchema,
|
|
12
|
+
alertRulesToolHandler
|
|
13
|
+
} from "./src/tools/alert-rules.ts";
|
|
14
|
+
import {
|
|
15
|
+
alertMutesToolInputSchema,
|
|
16
|
+
alertMutesToolHandler
|
|
17
|
+
} from "./src/tools/alert-mutes.ts";
|
|
18
|
+
|
|
19
|
+
export default function(api: OpenClawPluginApi) {
|
|
20
|
+
// Register tool: Query active alerts
|
|
21
|
+
api.registerTool({
|
|
22
|
+
name: "n9e_query_active_alerts",
|
|
23
|
+
description: "查询夜莺平台当前活跃的告警事件。支持按严重级别(1=严重,2=警告,3=提示)、规则名称筛选。用于回答\"当前有哪些告警\"、\"最近的告警\"、\"有没有严重告警\"等问题。",
|
|
24
|
+
inputSchema: activeAlertsToolInputSchema,
|
|
25
|
+
handler: activeAlertsToolHandler
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Register tool: Query historical alerts
|
|
29
|
+
api.registerTool({
|
|
30
|
+
name: "n9e_query_historical_alerts",
|
|
31
|
+
description: "查询夜莺平台历史告警事件。支持按时间范围、严重级别、规则名称筛选。用于回答\"昨天有哪些告警\"、\"过去一周的告警趋势\"、\"历史告警记录\"等问题。",
|
|
32
|
+
inputSchema: historicalAlertsToolInputSchema,
|
|
33
|
+
handler: historicalAlertsToolHandler
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Register tool: Query alert rules
|
|
37
|
+
api.registerTool({
|
|
38
|
+
name: "n9e_query_alert_rules",
|
|
39
|
+
description: "查询夜莺平台配置的告警规则。支持按规则名称、数据源、启用状态筛选。用于回答\"有哪些告警规则\"、\"CPU相关的规则配置\"、\"查看内存监控规则\"等问题。",
|
|
40
|
+
inputSchema: alertRulesToolInputSchema,
|
|
41
|
+
handler: alertRulesToolHandler
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Register tool: Query alert mutes
|
|
45
|
+
api.registerTool({
|
|
46
|
+
name: "n9e_query_alert_mutes",
|
|
47
|
+
description: "查询夜莺平台告警屏蔽配置。用于回答\"哪些告警被屏蔽了\"、\"查看告警屏蔽规则\"、\"为什么没有收到告警\"等问题。",
|
|
48
|
+
inputSchema: alertMutesToolInputSchema,
|
|
49
|
+
handler: alertMutesToolHandler
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
api.logger.info("N9e plugin loaded successfully");
|
|
53
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "n9e-plugin",
|
|
3
|
+
"skills": ["./skills"],
|
|
4
|
+
"configSchema": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"apiBaseUrl": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"format": "uri",
|
|
10
|
+
"description": "夜莺API基础地址"
|
|
11
|
+
},
|
|
12
|
+
"apiKey": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "API访问密钥"
|
|
15
|
+
},
|
|
16
|
+
"timeout": {
|
|
17
|
+
"type": "integer",
|
|
18
|
+
"minimum": 1000,
|
|
19
|
+
"maximum": 120000,
|
|
20
|
+
"default": 30000,
|
|
21
|
+
"description": "请求超时时间(毫秒)"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"required": ["apiBaseUrl", "apiKey"]
|
|
25
|
+
},
|
|
26
|
+
"uiHints": {
|
|
27
|
+
"apiBaseUrl": {
|
|
28
|
+
"label": "API基础地址",
|
|
29
|
+
"placeholder": "https://n9e-dev.inner.youdao.com/api/n9e"
|
|
30
|
+
},
|
|
31
|
+
"apiKey": {
|
|
32
|
+
"label": "API密钥",
|
|
33
|
+
"sensitive": true,
|
|
34
|
+
"placeholder": "输入您的API密钥"
|
|
35
|
+
},
|
|
36
|
+
"timeout": {
|
|
37
|
+
"label": "超时时间(毫秒)",
|
|
38
|
+
"placeholder": "30000"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@johnny-joster/n9e-plugin",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Nightingale alert platform query plugin for OpenClaw",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.ts",
|
|
7
|
+
"openclaw": {
|
|
8
|
+
"extensions": ["./index.ts"]
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev": "openclaw plugins install -l .",
|
|
12
|
+
"test": "echo \"No tests yet\""
|
|
13
|
+
},
|
|
14
|
+
"keywords": ["openclaw", "plugin", "nightingale", "n9e", "alerts"],
|
|
15
|
+
"author": "Youdao",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"zod": "^3.23.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^20.11.0",
|
|
22
|
+
"typescript": "^5.3.3"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: query-active-alerts
|
|
3
|
+
description: 查询夜莺平台当前活跃的告警事件
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 查询活跃告警
|
|
7
|
+
|
|
8
|
+
## 何时使用
|
|
9
|
+
|
|
10
|
+
当用户询问当前系统告警状态时使用此工具。典型场景包括:
|
|
11
|
+
|
|
12
|
+
- 用户询问"当前有哪些告警"、"最近的告警"、"帮我查一下告警"
|
|
13
|
+
- 用户询问特定严重级别的告警:"有没有严重告警"、"warning级别的告警"、"严重级别的问题"
|
|
14
|
+
- 用户询问特定规则的告警:"CPU相关的告警有哪些"、"内存告警"
|
|
15
|
+
- 用户想了解当前系统健康状态
|
|
16
|
+
|
|
17
|
+
## 使用方法
|
|
18
|
+
|
|
19
|
+
调用 `n9e_query_active_alerts` 工具,根据用户意图填充参数:
|
|
20
|
+
|
|
21
|
+
### 参数说明
|
|
22
|
+
|
|
23
|
+
- **severity** (可选): 严重级别筛选
|
|
24
|
+
- 1 = 严重 (critical)
|
|
25
|
+
- 2 = 警告 (warning)
|
|
26
|
+
- 3 = 提示 (info)
|
|
27
|
+
- **rule_name** (可选): 从用户消息中提取的规则名称关键词,支持模糊匹配
|
|
28
|
+
- **query** (可选): 通用搜索关键词
|
|
29
|
+
- **limit** (可选): 返回数量,默认50条
|
|
30
|
+
|
|
31
|
+
### 调用示例
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
// 查询所有活跃告警
|
|
35
|
+
{
|
|
36
|
+
"limit": 10
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// 查询严重级别告警
|
|
40
|
+
{
|
|
41
|
+
"severity": 1,
|
|
42
|
+
"limit": 20
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// 查询CPU相关告警
|
|
46
|
+
{
|
|
47
|
+
"rule_name": "CPU",
|
|
48
|
+
"limit": 10
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 返回数据结构
|
|
53
|
+
|
|
54
|
+
工具返回JSON格式,包含两部分:
|
|
55
|
+
|
|
56
|
+
### summary 摘要
|
|
57
|
+
- total: 总告警数
|
|
58
|
+
- showing: 当前显示数量
|
|
59
|
+
- severity_distribution: 各严重级别分布统计
|
|
60
|
+
|
|
61
|
+
### alerts 告警列表
|
|
62
|
+
每条告警包含:
|
|
63
|
+
- id: 告警事件ID
|
|
64
|
+
- rule_name: 触发的规则名称
|
|
65
|
+
- severity: 严重级别(数字)
|
|
66
|
+
- severity_label: 严重级别(中文标签)
|
|
67
|
+
- trigger_time: 触发时间(格式化)
|
|
68
|
+
- target_ident: 目标标识(如主机名)
|
|
69
|
+
- trigger_value: 触发值
|
|
70
|
+
- tags: 标签信息(对象)
|
|
71
|
+
- rule_note: 规则说明
|
|
72
|
+
- group_name: 所属业务组
|
|
73
|
+
|
|
74
|
+
## 如何回答用户
|
|
75
|
+
|
|
76
|
+
1. **总结关键信息**
|
|
77
|
+
- 首先说明总共有多少条活跃告警
|
|
78
|
+
- 按严重级别分类汇总:"其中X条严重、Y条警告、Z条提示"
|
|
79
|
+
|
|
80
|
+
2. **重点展示严重告警**
|
|
81
|
+
- 优先列出严重级别(severity=1)的告警
|
|
82
|
+
- 每条告警说明: 规则名称、触发时间、影响目标
|
|
83
|
+
|
|
84
|
+
3. **提供建议**
|
|
85
|
+
- 如果结果很多,建议用户缩小范围:"可以通过严重级别或规则名称进一步筛选"
|
|
86
|
+
- 如果没有结果,确认:"当前没有活跃告警"
|
|
87
|
+
|
|
88
|
+
## 使用示例
|
|
89
|
+
|
|
90
|
+
### 示例 1: 查询所有告警
|
|
91
|
+
|
|
92
|
+
**用户**: "查一下最近的告警"
|
|
93
|
+
|
|
94
|
+
**操作**: 调用 `n9e_query_active_alerts({ limit: 10 })`
|
|
95
|
+
|
|
96
|
+
**回答模板**:
|
|
97
|
+
> 当前有5条活跃告警,其中2条严重级别、3条警告级别。
|
|
98
|
+
>
|
|
99
|
+
> 严重告警:
|
|
100
|
+
> 1. **CPU使用率过高** - 触发时间: 2026-02-12 14:30:00, 影响主机: server-01
|
|
101
|
+
> 2. **内存不足** - 触发时间: 2026-02-12 14:25:00, 影响主机: server-02
|
|
102
|
+
>
|
|
103
|
+
> 警告告警:
|
|
104
|
+
> 1. **磁盘空间不足** - 触发时间: 2026-02-12 14:20:00, 影响主机: server-03
|
|
105
|
+
> ...
|
|
106
|
+
|
|
107
|
+
### 示例 2: 查询严重告警
|
|
108
|
+
|
|
109
|
+
**用户**: "有严重级别的告警吗"
|
|
110
|
+
|
|
111
|
+
**操作**: 调用 `n9e_query_active_alerts({ severity: 1 })`
|
|
112
|
+
|
|
113
|
+
**回答模板**:
|
|
114
|
+
> 有2条严重告警:
|
|
115
|
+
> 1. **CPU使用率过高** (server-01) - 触发于 2026-02-12 14:30:00, 当前CPU使用率: 95%
|
|
116
|
+
> 2. **内存不足** (server-02) - 触发于 2026-02-12 14:25:00, 可用内存: 512MB
|
|
117
|
+
|
|
118
|
+
### 示例 3: 查询特定规则告警
|
|
119
|
+
|
|
120
|
+
**用户**: "CPU相关的告警有哪些"
|
|
121
|
+
|
|
122
|
+
**操作**: 调用 `n9e_query_active_alerts({ rule_name: "CPU" })`
|
|
123
|
+
|
|
124
|
+
**回答模板**:
|
|
125
|
+
> 找到3条CPU相关的活跃告警:
|
|
126
|
+
> 1. **CPU使用率过高** - server-01, 触发时间: 14:30, 当前值: 95%
|
|
127
|
+
> 2. **CPU负载过高** - server-03, 触发时间: 14:15, 当前值: 8.5
|
|
128
|
+
> 3. **CPU温度异常** - server-04, 触发时间: 14:10, 当前值: 85°C
|
|
129
|
+
|
|
130
|
+
### 示例 4: 无告警情况
|
|
131
|
+
|
|
132
|
+
**用户**: "有告警吗"
|
|
133
|
+
|
|
134
|
+
**操作**: 调用 `n9e_query_active_alerts({})`
|
|
135
|
+
|
|
136
|
+
**回答模板**:
|
|
137
|
+
> 当前没有活跃告警,系统运行正常✅
|
|
138
|
+
|
|
139
|
+
## 注意事项
|
|
140
|
+
|
|
141
|
+
1. **时间格式**: 返回数据中的时间已格式化为北京时间,直接使用即可
|
|
142
|
+
2. **数量限制**: 如果total > showing,提醒用户:"显示前N条,共M条结果"
|
|
143
|
+
3. **标签信息**: tags字段已解析为对象,可以提取关键标签展示
|
|
144
|
+
4. **错误处理**: 如果工具返回错误,向用户说明错误原因并建议检查配置
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: query-alert-mutes
|
|
3
|
+
description: 查询夜莺平台告警屏蔽配置
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 查询告警屏蔽
|
|
7
|
+
|
|
8
|
+
## 何时使用
|
|
9
|
+
|
|
10
|
+
当用户想了解哪些告警被屏蔽或为什么没收到告警时使用。典型场景:
|
|
11
|
+
|
|
12
|
+
- "哪些告警被屏蔽了"
|
|
13
|
+
- "查看告警屏蔽规则"
|
|
14
|
+
- "为什么没有收到告警"
|
|
15
|
+
- "有屏蔽规则吗"
|
|
16
|
+
- "维护窗口期的屏蔽配置"
|
|
17
|
+
|
|
18
|
+
## 使用方法
|
|
19
|
+
|
|
20
|
+
调用 `n9e_query_alert_mutes` 工具查询屏蔽配置。
|
|
21
|
+
|
|
22
|
+
### 参数说明
|
|
23
|
+
|
|
24
|
+
- **query** (可选): 搜索关键词,在cause(原因)和tags中搜索
|
|
25
|
+
- **limit** (可选): 返回数量,默认50条
|
|
26
|
+
|
|
27
|
+
### 调用示例
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
// 查询所有屏蔽规则
|
|
31
|
+
{
|
|
32
|
+
"limit": 50
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 搜索维护相关的屏蔽
|
|
36
|
+
{
|
|
37
|
+
"query": "维护"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 搜索特定主机的屏蔽
|
|
41
|
+
{
|
|
42
|
+
"query": "server-01"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 返回数据结构
|
|
47
|
+
|
|
48
|
+
### summary 摘要
|
|
49
|
+
- total: 总屏蔽规则数
|
|
50
|
+
- showing: 当前显示数量
|
|
51
|
+
- active_count: 生效中的规则数
|
|
52
|
+
- disabled_count: 已禁用的规则数
|
|
53
|
+
- past_count: 已过期的规则数
|
|
54
|
+
- future_count: 未生效的规则数
|
|
55
|
+
|
|
56
|
+
### mutes 屏蔽规则列表
|
|
57
|
+
每条规则包含:
|
|
58
|
+
- id: 屏蔽规则ID
|
|
59
|
+
- cause: 屏蔽原因(重要!)
|
|
60
|
+
- tags: 匹配标签(对象)
|
|
61
|
+
- status: 状态("生效中"/"已禁用"/"已过期"/"未生效")
|
|
62
|
+
- disabled: 是否禁用(布尔)
|
|
63
|
+
- begin_time: 生效开始时间
|
|
64
|
+
- end_time: 生效结束时间
|
|
65
|
+
- group_id: 业务组ID
|
|
66
|
+
- cluster: 集群名称
|
|
67
|
+
- created_at / created_by: 创建信息
|
|
68
|
+
- updated_at / updated_by: 更新信息
|
|
69
|
+
|
|
70
|
+
## 状态说明
|
|
71
|
+
|
|
72
|
+
屏蔽规则有4种状态:
|
|
73
|
+
1. **生效中**: disabled=0 且当前时间在 [begin_time, end_time] 内
|
|
74
|
+
2. **已禁用**: disabled=1
|
|
75
|
+
3. **已过期**: end_time < 当前时间
|
|
76
|
+
4. **未生效**: begin_time > 当前时间
|
|
77
|
+
|
|
78
|
+
## 如何回答用户
|
|
79
|
+
|
|
80
|
+
1. **总结屏蔽状态**
|
|
81
|
+
- 有多少条规则、多少生效中、多少已过期
|
|
82
|
+
|
|
83
|
+
2. **重点展示生效中的规则**
|
|
84
|
+
- 屏蔽原因
|
|
85
|
+
- 匹配的标签范围
|
|
86
|
+
- 生效时间范围
|
|
87
|
+
|
|
88
|
+
3. **解释为什么没收到告警**
|
|
89
|
+
- 如果有匹配的屏蔽规则,说明原因
|
|
90
|
+
- 提示屏蔽的时间范围
|
|
91
|
+
|
|
92
|
+
## 使用示例
|
|
93
|
+
|
|
94
|
+
### 示例 1: 查询所有屏蔽规则
|
|
95
|
+
|
|
96
|
+
**用户**: "哪些告警被屏蔽了"
|
|
97
|
+
|
|
98
|
+
**操作**: 调用 `n9e_query_alert_mutes({})`
|
|
99
|
+
|
|
100
|
+
**回答模板**:
|
|
101
|
+
> 当前共有5条告警屏蔽规则:
|
|
102
|
+
> - 生效中: 2条
|
|
103
|
+
> - 已过期: 2条
|
|
104
|
+
> - 未生效: 1条
|
|
105
|
+
>
|
|
106
|
+
> **生效中的屏蔽规则:**
|
|
107
|
+
>
|
|
108
|
+
> 1. **机房维护窗口**
|
|
109
|
+
> - 屏蔽范围: datacenter=A, 所有告警
|
|
110
|
+
> - 生效时间: 2026-02-12 02:00 - 2026-02-12 06:00
|
|
111
|
+
> - 原因: 机房设备升级维护
|
|
112
|
+
>
|
|
113
|
+
> 2. **测试环境屏蔽**
|
|
114
|
+
> - 屏蔽范围: env=test, 所有告警
|
|
115
|
+
> - 生效时间: 2026-02-01 00:00 - 2026-03-01 00:00
|
|
116
|
+
> - 原因: 测试环境告警不需要通知
|
|
117
|
+
|
|
118
|
+
### 示例 2: 为什么没收到告警
|
|
119
|
+
|
|
120
|
+
**用户**: "为什么server-01的告警没有收到通知"
|
|
121
|
+
|
|
122
|
+
**操作**: 调用 `n9e_query_alert_mutes({ query: "server-01" })`
|
|
123
|
+
|
|
124
|
+
**回答模板**:
|
|
125
|
+
> 找到1条相关的屏蔽规则:
|
|
126
|
+
>
|
|
127
|
+
> **server-01维护屏蔽** (生效中)
|
|
128
|
+
> - 屏蔽范围: host=server-01
|
|
129
|
+
> - 生效时间: 2026-02-12 14:00 - 2026-02-12 18:00
|
|
130
|
+
> - 原因: 服务器系统升级
|
|
131
|
+
> - 创建人: ops-admin, 创建时间: 2026-02-12 13:50
|
|
132
|
+
>
|
|
133
|
+
> 这条屏蔽规则导致server-01的所有告警都不会发送通知,预计18:00后恢复通知。
|
|
134
|
+
|
|
135
|
+
### 示例 3: 查询维护相关屏蔽
|
|
136
|
+
|
|
137
|
+
**用户**: "查看维护窗口期的屏蔽配置"
|
|
138
|
+
|
|
139
|
+
**操作**: 调用 `n9e_query_alert_mutes({ query: "维护" })`
|
|
140
|
+
|
|
141
|
+
**回答模板**:
|
|
142
|
+
> 找到3条维护相关的屏蔽规则:
|
|
143
|
+
>
|
|
144
|
+
> **1. 机房维护窗口** (生效中)
|
|
145
|
+
> - 范围: datacenter=A
|
|
146
|
+
> - 时间: 2026-02-12 02:00 - 06:00
|
|
147
|
+
>
|
|
148
|
+
> **2. 数据库维护** (已过期)
|
|
149
|
+
> - 范围: service=database
|
|
150
|
+
> - 时间: 2026-02-10 22:00 - 2026-02-11 02:00
|
|
151
|
+
> - 状态: 已结束
|
|
152
|
+
>
|
|
153
|
+
> **3. 网络设备维护** (未生效)
|
|
154
|
+
> - 范围: device_type=switch
|
|
155
|
+
> - 时间: 2026-02-15 01:00 - 05:00
|
|
156
|
+
> - 状态: 计划中
|
|
157
|
+
|
|
158
|
+
### 示例 4: 没有屏蔽规则
|
|
159
|
+
|
|
160
|
+
**用户**: "有屏蔽规则吗"
|
|
161
|
+
|
|
162
|
+
**操作**: 调用 `n9e_query_alert_mutes({})`
|
|
163
|
+
|
|
164
|
+
**回答模板**:
|
|
165
|
+
> 当前没有配置告警屏蔽规则,所有告警都会正常发送通知。
|
|
166
|
+
|
|
167
|
+
## 注意事项
|
|
168
|
+
|
|
169
|
+
1. **时间范围**: 明确告知用户屏蔽的开始和结束时间
|
|
170
|
+
2. **标签匹配**: 解释tags字段,说明哪些告警会被匹配
|
|
171
|
+
3. **过期清理**: 提示已过期的规则可以清理
|
|
172
|
+
4. **状态区分**: 清楚区分"生效中"、"已过期"、"未生效"、"已禁用"
|
|
173
|
+
5. **原因说明**: cause字段很重要,帮助用户理解为什么要屏蔽
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: query-alert-rules
|
|
3
|
+
description: 查询夜莺平台配置的告警规则
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 查询告警规则
|
|
7
|
+
|
|
8
|
+
## 何时使用
|
|
9
|
+
|
|
10
|
+
当用户想了解系统配置的告警规则时使用。典型场景:
|
|
11
|
+
|
|
12
|
+
- "有哪些告警规则"
|
|
13
|
+
- "CPU相关的规则配置"
|
|
14
|
+
- "查看内存监控规则"
|
|
15
|
+
- "这个规则是怎么配置的"
|
|
16
|
+
- "有多少告警规则是禁用的"
|
|
17
|
+
|
|
18
|
+
## 使用方法
|
|
19
|
+
|
|
20
|
+
调用 `n9e_query_alert_rules` 工具查询规则配置。
|
|
21
|
+
|
|
22
|
+
### 参数说明
|
|
23
|
+
|
|
24
|
+
- **rule_name** (可选): 规则名称关键词,支持模糊匹配
|
|
25
|
+
- **datasource_ids** (可选): 数据源ID列表,筛选特定数据源的规则
|
|
26
|
+
- **disabled** (可选): 规则状态
|
|
27
|
+
- 0 = 仅查询启用的规则
|
|
28
|
+
- 1 = 仅查询禁用的规则
|
|
29
|
+
- 不传 = 查询所有规则
|
|
30
|
+
- **limit** (可选): 返回数量,默认50条
|
|
31
|
+
|
|
32
|
+
### 调用示例
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
// 查询所有规则
|
|
36
|
+
{
|
|
37
|
+
"limit": 50
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 查询CPU相关规则
|
|
41
|
+
{
|
|
42
|
+
"rule_name": "CPU"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// 查询禁用的规则
|
|
46
|
+
{
|
|
47
|
+
"disabled": 1
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// 查询特定数据源的规则
|
|
51
|
+
{
|
|
52
|
+
"datasource_ids": [1, 2, 3]
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 返回数据结构
|
|
57
|
+
|
|
58
|
+
### summary 摘要
|
|
59
|
+
- total: 总规则数
|
|
60
|
+
- showing: 当前显示数量
|
|
61
|
+
- enabled_count: 启用规则数
|
|
62
|
+
- disabled_count: 禁用规则数
|
|
63
|
+
- severity_distribution: 严重级别分布
|
|
64
|
+
|
|
65
|
+
### rules 规则列表
|
|
66
|
+
每条规则包含:
|
|
67
|
+
- id: 规则ID
|
|
68
|
+
- name: 规则名称
|
|
69
|
+
- note: 规则说明
|
|
70
|
+
- severity / severity_label: 严重级别
|
|
71
|
+
- disabled: 是否禁用(布尔)
|
|
72
|
+
- status: 状态文本("启用"/"禁用")
|
|
73
|
+
- prom_ql: Prometheus查询语句(核心配置)
|
|
74
|
+
- prom_for_duration: 持续时长(秒)
|
|
75
|
+
- prom_eval_interval: 评估间隔(秒)
|
|
76
|
+
- notify_channels: 通知渠道
|
|
77
|
+
- datasource_ids: 关联的数据源ID列表
|
|
78
|
+
- group_id: 业务组ID
|
|
79
|
+
- cluster: 集群名称
|
|
80
|
+
- created_at / created_by: 创建信息
|
|
81
|
+
- updated_at / updated_by: 更新信息
|
|
82
|
+
|
|
83
|
+
## 如何回答用户
|
|
84
|
+
|
|
85
|
+
1. **总结规则概况**
|
|
86
|
+
- 总数、启用/禁用数量、严重级别分布
|
|
87
|
+
|
|
88
|
+
2. **展示规则详情**
|
|
89
|
+
- 规则名称和说明
|
|
90
|
+
- 核心查询语句(prom_ql)
|
|
91
|
+
- 触发条件(持续时长)
|
|
92
|
+
- 通知配置
|
|
93
|
+
|
|
94
|
+
3. **突出重要信息**
|
|
95
|
+
- 如果查询禁用规则,说明为什么可能被禁用
|
|
96
|
+
- 如果查询特定规则,详细解释其配置逻辑
|
|
97
|
+
|
|
98
|
+
## 使用示例
|
|
99
|
+
|
|
100
|
+
### 示例 1: 查询所有规则
|
|
101
|
+
|
|
102
|
+
**用户**: "有哪些告警规则"
|
|
103
|
+
|
|
104
|
+
**操作**: 调用 `n9e_query_alert_rules({ limit: 20 })`
|
|
105
|
+
|
|
106
|
+
**回答模板**:
|
|
107
|
+
> 系统共配置了45条告警规则,其中:
|
|
108
|
+
> - 启用: 38条
|
|
109
|
+
> - 禁用: 7条
|
|
110
|
+
>
|
|
111
|
+
> 严重级别分布:
|
|
112
|
+
> - 严重: 15条
|
|
113
|
+
> - 警告: 22条
|
|
114
|
+
> - 提示: 8条
|
|
115
|
+
>
|
|
116
|
+
> 部分规则列表:
|
|
117
|
+
> 1. **CPU使用率过高** (严重) - 当CPU使用率 > 80% 持续5分钟时触发
|
|
118
|
+
> 2. **内存不足** (严重) - 当可用内存 < 10% 持续3分钟时触发
|
|
119
|
+
> 3. **磁盘空间不足** (警告) - 当磁盘使用率 > 85% 持续10分钟时触发
|
|
120
|
+
> ...
|
|
121
|
+
|
|
122
|
+
### 示例 2: 查询特定规则
|
|
123
|
+
|
|
124
|
+
**用户**: "CPU相关的规则配置"
|
|
125
|
+
|
|
126
|
+
**操作**: 调用 `n9e_query_alert_rules({ rule_name: "CPU" })`
|
|
127
|
+
|
|
128
|
+
**回答模板**:
|
|
129
|
+
> 找到3条CPU相关的告警规则:
|
|
130
|
+
>
|
|
131
|
+
> **1. CPU使用率过高** (严重级别, 已启用)
|
|
132
|
+
> - 查询语句: `100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80`
|
|
133
|
+
> - 触发条件: 持续5分钟
|
|
134
|
+
> - 评估间隔: 每1分钟
|
|
135
|
+
> - 通知渠道: 企业微信、邮件
|
|
136
|
+
> - 最后更新: 2026-01-15, 更新人: admin
|
|
137
|
+
>
|
|
138
|
+
> **2. CPU负载异常** (警告级别, 已启用)
|
|
139
|
+
> - 查询语句: `node_load5 / count(node_cpu_seconds_total{mode="idle"}) without (cpu, mode) > 4`
|
|
140
|
+
> - 触发条件: 持续3分钟
|
|
141
|
+
> - 评估间隔: 每1分钟
|
|
142
|
+
>
|
|
143
|
+
> **3. CPU温度过高** (提示级别, 已禁用)
|
|
144
|
+
> - 说明: 此规则已被禁用,可能是因为监控项不适用于虚拟化环境
|
|
145
|
+
|
|
146
|
+
### 示例 3: 查询禁用的规则
|
|
147
|
+
|
|
148
|
+
**用户**: "有多少告警规则是禁用的"
|
|
149
|
+
|
|
150
|
+
**操作**: 调用 `n9e_query_alert_rules({ disabled: 1 })`
|
|
151
|
+
|
|
152
|
+
**回答模板**:
|
|
153
|
+
> 共有7条规则处于禁用状态:
|
|
154
|
+
>
|
|
155
|
+
> 1. **CPU温度过高** - 禁用原因可能: 虚拟化环境不支持
|
|
156
|
+
> 2. **网卡丢包率** - 禁用时间: 2025-12-20
|
|
157
|
+
> 3. **TCP连接数过高** - 禁用时间: 2025-11-15
|
|
158
|
+
> ...
|
|
159
|
+
>
|
|
160
|
+
> 如需启用这些规则,请联系系统管理员。
|
|
161
|
+
|
|
162
|
+
## 注意事项
|
|
163
|
+
|
|
164
|
+
1. **PromQL解释**: 对于复杂的Prometheus查询,用通俗语言解释其含义
|
|
165
|
+
2. **时间单位**: prom_for_duration和prom_eval_interval是秒,转换为分钟展示
|
|
166
|
+
3. **规则说明**: 优先使用note字段的说明,如果没有则根据prom_ql推断
|
|
167
|
+
4. **数据源**: 如果有datasource_ids,可以说明规则关联的数据源
|