智能运维
前置操作
在使用智能运维之前,需要先注册集群,注册集群后绑定用户需要诊断的集群。另外,还需要绑定用户需要使用的大语言模型。
以用户ID为test_user,会话ID为test_session,集群实例地址为10.x.x.x:1为例。
注册、绑定集群
注册集群
curl -X 'POST' 'https://x.x.x.x:x/v1/api/clusters/register' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt -d '{ "cluster_name": "cluster1", "host": "10.x.x.x", "port": "1", "username": "user", "password": "db_password"}' --pass "***"绑定集群
curl -X 'PUT' 'https://x.x.x.x:x/v1/api/clusters?instance=10.x.x.x:1&user_id=test_user&session_id=test_session' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"如果返回结果中data值为True,说明绑定成功。如果需要换绑其他集群,仅需修改instance参数值,重新调用该接口即可。如果用户创建新会话,不重新绑定集群的话,默认使用上次绑定的集群。
注意:user_id和session_id需满足一定的复杂度要求,(1)长度:2 ~ 120 个字符;(2)字符集 :仅字母、数字、下划线( [a-zA-Z0-9_] );(3)不允许空格、中文、特殊符号( - . @ 等都不行)。
绑定大语言模型
查询可用的大语言模型
curl -X 'GET' 'https://x.x.x.x:x/v1/api/llms' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"绑定大语言模型
curl -X 'PUT' 'https://x.x.x.x:x/v1/api/llms?name=xxx&user_id=xxx&session_id=xxx' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"如果返回结果中data值为True,说明绑定成功。如果需要换绑其他大语言模型,仅需修改name参数值,重新调用该接口即可。
如果不绑定大语言模型,直接调用app/intelligent-interaction接口,使用配置文件中默认配置的大语言模型。
工具交互
在用户进行工具交互前,需要先执行完成前置操作,之后可以使用问答的方式对GaussMaster服务进行提问,后台接口为/v1/api/app/intelligent-interaction。此接口参数“mode”的值必须为“tool_interaction”,即当前模式为工具交互,API详情请参考API: /v1/api/app/intelligent-interaction。工具交互默认支持多轮对话,对话记录长度为1轮。用户可以通过参数"history_len"指定对话记录的长度,可支持的对话记录长度为[1-3],即大语言模型最多可以记住3轮对话历史。
工具交互的流程图如下图1所示:
工具交互约束
- 用户可以使用华为云提供的pangu-38b开源模型工具,识别准确率为90%。也可以指定其他开源模型,通过接口的形式进行调用,使用其他开源模型做工具交互时,识别准确率无法保证。
- 智能运维中工具交互支持参数追问,参数不全时可基于历史内容进行补全。
- DBMind/openGauss组件不可用/升级等场景下,GaussMaster服务会受到影响。
- GaussMaster智能运维不提供前台页面,且目前只支持中文问答。
当前内部已支持的DBmind工具(API)共22个(其中告警查询需要用到DBMind的两个API),如下表:
表 1 API列表
工具交互参考示例
工具交互调用API详情如下:
curl -X 'POST' 'https://x.x.x.x:x/v1/api/app/intelligent-interaction' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{
"query":"数据库test_db中有条sql语句select* from t1 where id = 10000;请帮我进行一下索引推荐",
"mode":"tool_interaction",
"user_id":"user123",
"session_id":"session123",
"history_len ":1
}' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"工具交互的结果以流式返回,结果中包含多行,每行以“data:”开头,以“\n\n”结尾:
data:{"data":[{"content":"工具匹配中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"content":"提取参数中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"content":"工具调用中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"color":"black","content":"推荐的索引如下表所示:","type":"str"},{"content":{"headers":["索引描述","预计占用","预计提升"],"rows":[["CREATEINDEX idx_t1_id ON public.t1(id);","2.49MB","99.91%"]]},"type":"table"}],"success":true}\n\n
data:{"data":[{"content":"DONE","type":"progress"}],"success":true}\n\n说明
在工具交互的过程中,会在日志中记录各阶段的耗时,包括如下4个阶段:
- 推理工具。
- 推理参数。
- 调用工具。
- 调用大语言模型。 日志级别为INFO,用户可以根据需要查看各阶段的耗时。
API接口说明
本章节介绍智能运维模块提供的RESTful API接口。
API: /v1/api/app/intelligent-interaction
功能描述:通过交互的方式使用运维工具。
请求方式:POST
参数及其解释:如下表所示:
表 1 接口参数说明
交互类型,可选范围为['tool_interaction', 'fault_diagnostic']。
| |||
返回结果类型:流式event
测试接口样例1:
curl -X 'POST' 'https://x.x.x.x:x/v1/api/app/intelligent-interaction' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{
"query":"数据库test_db中有条sql语句select* from t1 where id = 10000;请帮我进行一下索引推荐",
"mode":"tool_interaction",
"user_id":"user123",
"session_id":"session123",
"history_len":1
}' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"参考返回结果格式:
data:{"data":[{"content":"工具匹配中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"content":"提取参数中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"content":"工具调用中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"color":"black","content":"推荐的索引如下表所示:","type":"str"},{"content":{"headers":["索引描述","预计占用","预计提升"],"rows":[["CREATEINDEX idx_t1_id ON public.t1(id);","2.49MB","99.91%"]]},"type":"table"}],"success":true}\n\n
data:{"data":[{"content":"DONE","type":"progress"}],"success":true}\n\n测试接口样例2(query参数值可通过工具交互的告警查询结果获取):
curl -X 'POST' 'https://x.x.x.x:x/v1/api/app/intelligent-interaction' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{
"query":"{\"history_alarm_id\": \"c_190471\", \"metric_name\": \"gaussdb_cluster_state\", \"instance\": \"10.90.56.xx\", \"alarm_type\": \"ALARM\", \"alarm_level\": 20, \"start_time\": \"2024-09-05 15:28:56\", \"alarm_content\": \"10.90.56.xx(dn ): {\\\"ping\\\": 0, \\\"dn_status\\\": 1, \\\"bind_ip_failed\\\": 0, \\\"dn_ping_standby\\\": 0, \\\"ffic_updated\\\": 0, \\\"cms_phonydead_restart\\\": 0, \\\"cms_restart_pending\\\": 0, \\\"dn_read_only\\\": 0, \\\"dn_manual_stop\\\": 0, \\\"dn_disk_damage\\\": 0, \\\"dn_nic_down\\\": 0, \\\"dn_port_conflict\\\": 0, \\\"dn_writable\\\": 0} Unknown\", \"source\": \"dbmind\", \"status\": 0}",
"mode":"fault_diagnostic",
"model_name":"pangu",
"user_id":"user123",
"session_id":"session123"
}' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"参考返回结果格式:
data:{"data":[{"content":"查询故障树...","type":"progress"}],"success":true}
data:{"data":[{"content":"异常告警信息识别中...","type":"progress"}],"success":true}
data:{"data":[{"content":"参数识别中...","type":"progress"}],"success":true}
data:{"data":[{"color":"black","content":"'cluster_feature'","type":"str"}],"success":true}
data:{"data":[{"content":"DONE","type":"progress"}], "success": true}异常情况:
data:{"data":[{"content":"工具执行异常","type":"str"}],"success":true}\n\n
data:{"data":[{"content":"大模型服务异常","type":"str"}],"success":true}\n\n
data:{"data":[{"content":"运维知识库异常","type":"str"}],"success":true}\n\nAPI: /v1/api/llms
功能描述:获取所有可用的大语言模型列表。
请求方式:GET
参数及其解释:无
测试接口样例:
curl -X 'GET' 'https://x.x.x.x:x/v1/api/llms' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"参考返回结果格式:
获取成功1:
{"data":{"local":[],"online":["pangu_cloud_sigma_unify_plugin_38b","Llama3-8B-Chinese-Chat"]},"success":true}获取成功2:
{"data":true,"success":true}API: /v1/api/llms
功能描述:切换大模型。
请求方式:PUT
参数及其解释:如下表所示:
表 2 接口参数说明
测试接口样例:
curl -X 'PUT' 'https://x.x.x.x:x/v1/api/llms?name=pangu&user_id=xxx&session_id=xxx' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"参考返回结果格式:
切换成功:
{"data":true,"success":true}切换失败1(模型切换失败的详细原因记录在日志中):
{"data":false,"success":true}切换失败2:
{"msg":"Internal server error.","success":false}API: /v1/api/clusters
功能描述:获取DBMind纳管的所有数据库集群信息。
请求方式:GET
参数及其解释:无
测试接口样例:
curl -X 'GET' 'https://x.x.x.x:x/v1/api/clusters' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"参考返回结果格式:
获取成功1:
{"data":{"x.x.x.x:x":{"cluster_name":"cluster1","intances":["x.x.x.x:x","x.x.x.x:x"],"managed":true},"x.x.x.x:x":{"cluster_name":"cluster2","intances":["x.x.x.x:x","x.x.x.x:x"],"managed":false}},"success":true}获取成功2:
{"data":{},"success":true}获取失败:
{"msg":"Internal server error.","success":false}API: /v1/api/clusters
功能描述:切换当前监控的数据库集群
请求方式:PUT
参数及其解释:如下表所示:
表 3 接口参数说明
测试接口样例:
curl -X 'PUT' 'https://x.x.x.x:x/v1/api/clusters?instance=x.x.x.x:x&user_id=xxx&session_id=xxx' -H 'accept: application/json' -H 'Content-Type: application/json' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"参考返回结果格式:
切换成功:
{"data":true,"success":true}切换失败1:
{"data":false,"success":true}切换失败2:
{"msg":"Internal server error.","success":false}API: /v1/api/clusters/register
功能描述:注册dbmind纳管范围的数据库集群。
请求方式:POST
参数及其解释:如下表所示:
表 4 接口参数说明
测试接口样例:
curl -X 'POST' 'https://x.x.x.x:x/v1/api/clusters/register' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{ "cluster_name": "cluster1", "host": "db_host_ip", "port": "5432", "username": "db_user", "password": "db_password"}' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"参考返回结果格式
注册成功:
{"data":{"msg":"注册成功","status":0},"success":true}注册集群的账号密码错误:
{"data":{"msg":"无法连接到此集群","status":503},"success":true}注册集群不在dbmind纳管范围:
{"data":{"msg":"dbmind没有纳管此集群,无法注册","status":1001},"success":true}注册集群的名字重复:
{"data":{"msg":"该集群名已被占用","status":1002},"success":true}说明
注册成功后,集群信息存储在集群管理表,表接口参考附录中表6。
