# 在线服务健康检查
#### 场景描述
ModelArts 在线服务健康检查是保障AI推理服务稳定运行、高可用交付的核心能力，通过对服务实例的启动状态、就绪状态、运行健康状态进行周期性探测，自动识别异常实例并触发修复或隔离操作，避免无效流量转发、服务卡顿、进程崩溃等问题，适用于以下核心场景：
- 模型加载慢场景：大模型（如千亿参数LLM、多模态模型）部署时加载耗时久，避免服务状态显示 "运行中" 但实际无法响应请求的 "假活" 问题；
- 流量精准分发场景：确保仅将推理请求转发至已就绪、可正常处理任务的实例，避免请求失败、超时；
- 故障自动自愈场景：实例进程崩溃、资源耗尽、依赖缺失等异常时，自动重启实例，无需人工干预，提升服务可用性；
- 滚动升级保障场景：服务升级过程中，通过健康检查验证新实例可用性，实现零停机、无中断升级；
- 自定义镜像部署场景：基于自定义镜像开发的推理服务，通过健康检查验证镜像内服务进程是否正常运行。
 
#### 约束限制
- 接口 / 脚本约束：配置健康检查前，必须在镜像中提前部署健康检查接口（HTTP/HTTPS）或探测脚本，否则会直接导致模型部署失败。
- 停止延迟约束：配置健康检查的服务，收到停止指令后强制延后3分钟停止，避免请求中断。
- 资源池约束：公共资源池、专属资源池均支持配置健康检查。
 
#### 前提条件
镜像内已部署健康检查接口（默认路径/health）或探测脚本（如/home/ma-user/health.sh）。
#### 健康检查配置
登录[ModelArts管理控制台](https://console.huaweicloud.com/modelarts/)，在左侧菜单栏中选择"模型推理\>在线推理"，进入在线服务管理页面。部署在线服务时，在"单元配置"中勾选"健康检查"，具体操作请参见[推理在线服务单机部署](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0004.html)。此处重点介绍健康检查参数设置。
健康检查支持以下三种探针，根据业务需求选择1种或多种，支持单独配置或组合配置（配置启动探针时，其他探针失效）：
- 启动探针：用于检测实例是否已经启动。如果配置了启动探针，在启动探针成功之前不执行存活探针或就绪探针，从而为应用留出足够的时间完成初始化。如果启动探针失败，将会重启实例。如果没有配置启动探针，则服务调度成功后会立即设置状态为成功，可能存在服务处于"运行中"因模型正在加载而无法预测的情况。建议用于大模型、启动耗时久的服务。
- 就绪探针：用于检测实例是否已经准备好接收流量。如果就绪探针失败，即实例未准备好，会从服务负载均衡的池中剔除该实例，不会将流量路由到该实例，直到探测成功。建议用于流量分发敏感场景。
- 存活探针：用于检测实例内应用程序的健康状态。如果存活探针失败，即应用程序不健康，将会自动重启实例。建议用于高可用、故障自愈场景。
表1启动探针配置参数说明 
| 参数名       | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 示例                        |
|:---|:---|:---|
| 检查方式       | 选择健康检查的实现方法。二选一，与自定义镜像内的健康检查能力匹配： - "HTTP请求检查"：适用于提供HTTP/HTTPS服务的容器，集群会周期性地对容器发起HTTP/HTTPS GET请求，若返回码在200\~399范围内则成功。  - "执行命令检查"：要求在容器内指定一个可执行命令（即探测脚本），集群会周期性地执行该命令，若返回值为0则成功。   | HTTP请求检查                  |
| 健康检查URL     | 检查方式选择"HTTP请求检查"时，会体现此此参数。表示健康检查探针发起HTTP GET请求的路径。 应确保容器内应用在此路径上监听了健康检查请求，并能根据健康状态返回适当的HTTP状态码（200\~399表示成功）。 需符合正则：\^\[/\]\[a-zA-Z0-9-_/:\]{0,1024}                                                                                                                                                                                                                                                                         | /health                   |
| 健康检查命令                                 | 检查方式选择"执行命令检查"时，会体现此参数。填写检测容器健康情况的探测命令。 使用健康检查命令时，必须将程序/工具提前打包到容器镜像中。由于集群直接在容器内执行命令，因此无法访问宿主机或其他容器的文件系统。若命令依赖的程序/工具（如curl、nc、自定义脚本）未包含在镜像中，会报错"Command not found"。 如果执行的命令是一个Shell脚本，需明确指定脚本解析器。由于集群执行探针时不处于交互式终端环境中，不能直接将脚本文件作为命令执行，必须通过脚本编辑器调用脚本。例如，如果脚本位于/home/ma-user/health.sh，使用执行命令检查时，应指定的程序为sh /home/ma-user/health.sh。                                                                                                                                                                                    | /                                                    |
| 健康检查周期（秒）  | 执行探测的时间间隔（单位是秒）。 此值决定探针检测的频率。缩短周期能更快发现问题，但会增加系统资源消耗；延长周期可减少开销，但可能延长故障发现时间。 取值范围：1\~2147483647。                                                                                                                                                                                                                                                                                                                             | 10                        |
| 延时时间（秒） | 表示容器启动后需要等待多少秒才启动探针。 取值范围：1\~2147483647。 如果定义了启动探针，则存活探针和就绪探针的延迟将在启动探针已成功之后才开始计算。 如果"健康检查周期"的值大于"延时时间"，则 "延时时间"将被忽略。                                                                                                                                                                                                                                | 60                       |
| 超时时间 （秒）   | 发起检查请求探测超时后等待多少秒。 超过此时间未收到响应，本次检查即视为失败。对于处理耗时较长或网络环境不佳的应用，应适当调大此值以避免因响应慢而误判。 取值范围：1\~2147483647。                                                                                                                                                                                                                                                                                                                           | 30                       |
| 最大失败次数    | 健康检查连续失败多少次后，才最终判定容器不健康。 此机制可防止因网络瞬时抖动或应用短暂高负载导致的偶发性失败误判。例如，默认值3表示连续3次检查失败才会触发重启或摘流。 取值范围：1\~2147483647。 在服务启动阶段，当健康检查请求连续失败达到所填次数后，服务会进入异常状态。 在服务运行阶段，当健康检查请求连续失败达到所填次数后，服务会进入告警状态。                                                                                 | 1800（大模型加载时间较长，需要更长的容忍时间） |
| 协议       | 进行健康检查时使用的网络协议。与在线推理服务协议保持一致。 - HTTP：使用HTTP协议进行探测。  - HTTPS：使用HTTPS协议进行探测，适用于需要加密传输的场景。                                                                                               | HTTP                      |
   
表2就绪探针配置参数说明 
| 参数名        | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 示例       |
|:---|:---|:---|
| 检查方式       | 选择健康检查的实现方法。二选一，与自定义镜像内的健康检查能力匹配： - "HTTP请求检查"：适用于提供HTTP/HTTPS服务的容器，集群会周期性地对容器发起HTTP/HTTPS GET请求，若返回码在200\~399范围内则成功。  - "执行命令检查"：则要求在容器内指定一个可执行命令，集群会周期性地执行该命令，若返回值为0则成功。   | HTTP请求检查 |
| 健康检查URL   | 检查方式选择HTTP请求检查时，会体现此此参数。表示健康检查探针发起HTTP GET请求的路径。 应确保容器内应用在此路径上监听了健康检查请求，并能根据健康状态返回适当的HTTP状态码（200\~399表示成功）。 需符合正则：\^\[/\]\[a-zA-Z0-9-_/:\]{0,1024}                                                                                                                                                                                                                                                             | /health |
| 健康检查命令                                | 检查方式选择"执行命令检查"时，会体现此参数。填写检测容器健康情况的探测命令。 使用健康检查命令时，必须将程序/工具提前打包到容器镜像中。由于集群直接在容器内执行命令，因此无法访问宿主机或其他容器的文件系统。若命令依赖的程序/工具（如curl、nc、自定义脚本）未包含在镜像中，会报错"Command not found"。 如果执行的命令是一个Shell脚本，需明确指定脚本解析器。由于集群执行探针时不处于交互式终端环境中，不能直接将脚本文件作为命令执行，必须通过脚本编辑器调用脚本。例如，如果脚本位于/home/ma-user/health.sh，使用执行命令检查时，应指定的程序为sh /home/ma-user/health.sh。                                                                                                                                                                | /                                   |
| 健康检查周期（秒） | 执行探测的时间间隔（单位是秒）。 此值决定探针检测的频率。缩短周期能更快发现问题，但会增加系统资源消耗；延长周期可减少开销，但可能延长故障发现时间。 取值范围：1\~2147483647。                                                                                                                                                                                                                                                                                                                | 10       |
| 延时时间（秒）    | 表示容器启动后需要等待多少秒才启动探针。 取值范围：1\~2147483647。 如果定义了启动探针，则就绪探针的延迟将在启动探针已成功之后才开始计算。 如果"健康检查周期"的值大于"延时时间"，则 "延时时间"将被忽略。                                                                                                                                                                                                                     | 60       |
| 超时时间 （秒） | 发起检查请求探测超时后等待多少秒。 超过此时间未收到响应，本次检查即视为失败。对于处理耗时较长或网络环境不佳的应用，应适当调大此值以避免因响应慢而误判。 取值范围：1\~2147483647。                                                                                                                                                                                                                                                                                                              | 30       |
| 最大失败次数     | 健康检查连续失败多少次后，才最终判定容器不健康。 此机制可防止因网络瞬时抖动或应用短暂高负载导致的偶发性失败误判。例如，默认值12表示连续12次检查失败才会触发重启或摘流。 取值范围：1\~2147483647。 在服务启动阶段，当健康检查请求连续失败达到所填次数后，服务会进入异常状态。 在服务运行阶段，当健康检查请求连续失败达到所填次数后，服务会进入告警状态。                                                                | 3       |
| 协议          | 进行健康检查时使用的网络协议。与在线推理服务协议保持一致。 - HTTP：使用HTTP协议进行探测。  - HTTPS：使用HTTPS协议进行探测，适用于需要加密传输的场景。                                                                                  | HTTP     |
   
表3存活探针配置参数说明 
| 参数名        | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 示例     |
|:---|:---|:---|
| 检查方式     | 选择健康检查的实现方法。二选一，与自定义镜像内的健康检查能力匹配： - "HTTP请求检查"：适用于提供HTTP/HTTPS服务的容器，集群会周期性地对容器发起HTTP/HTTPS GET请求，若返回码在200\~399范围内则成功。  - "执行命令检查"：则要求在容器内指定一个可执行命令，集群会周期性地执行该命令，若返回值为0则成功。   | HTTP请求检查 |
| 健康检查URL    | 检查方式选择HTTP请求检查时，会体现此此参数。表示健康检查探针发起HTTP GET请求的路径。 应确保容器内应用在此路径上监听了健康检查请求，并能根据健康状态返回适当的HTTP状态码（200\~399表示成功）。 需符合正则：\^\[/\]\[a-zA-Z0-9-_/:\]{0,1024}                                                                                                                                                                                                                                                               | /health  |
| 健康检查命令                               | 检查方式选择"执行命令检查"时，会体现此参数。填写检测容器健康情况的探测命令。 使用健康检查命令时，必须将程序/工具提前打包到容器镜像中。由于集群直接在容器内执行命令，因此无法访问宿主机或其他容器的文件系统。若命令依赖的程序/工具（如curl、nc、自定义脚本）未包含在镜像中，会报错"Command not found"。 如果执行的命令是一个Shell脚本，需明确指定脚本解析器。由于集群执行探针时不处于交互式终端环境中，不能直接将脚本文件作为命令执行，必须通过脚本编辑器调用脚本。例如，如果脚本位于/home/ma-user/health.sh，使用执行命令检查时，应指定的程序为sh /home/ma-user/health.sh。                                                                                                                                                                   | /                                   |
| 健康检查周期（秒） | 执行探测的时间间隔（单位是秒）。 此值决定探针检测的频率。缩短周期能更快发现问题，但会增加系统资源消耗；延长周期可减少开销，但可能延长故障发现时间。 **对于存活探针，检查周期不宜过短，否则可能导致容器被过早重启。** 取值范围：1\~2147483647。                                                                                                                                                                                                    | 10        |
| 延时时间（秒）   | 表示容器启动后需要等待多少秒才启动探针。 取值范围：1\~2147483647。 如果定义了启动探针，则存活探针的延迟将在启动探针已成功之后才开始计算。 如果"健康检查周期"的值大于"延时时间"，则 "延时时间"将被忽略。                                                                                                                                                                                                                       | 60      |
| 超时时间 （秒）    | 发起检查请求探测超时后等待多少秒。 超过此时间未收到响应，本次检查即视为失败。对于处理耗时较长或网络环境不佳的应用，应适当调大此值以避免因响应慢而误判。 取值范围：1\~2147483647。                                                                                                                                                                                                                                                                                                              | 30       |
| 最大失败次数    | 健康检查连续失败多少次后，才最终判定容器不健康。 此机制可防止因网络瞬时抖动或应用短暂高负载导致的偶发性失败误判。例如，默认值12表示连续12次检查失败才会触发重启或摘流。 取值范围：1\~2147483647。 在服务启动阶段，当健康检查请求连续失败达到所填次数后，服务会进入异常状态。 在服务运行阶段，当健康检查请求连续失败达到所填次数后，服务会进入告警状态。                                                             | 6       |
| 协议         | 进行健康检查时使用的网络协议。与在线推理服务协议保持一致。 - HTTP：使用HTTP协议进行探测。  - HTTPS：使用HTTPS协议进行探测，适用于需要加密传输的场景。                                                                                      | HTTP      |
   
在线推理服务部署成功后，在服务详情页的"监控"页签，查看健康检查探测日志、异常记录。
