全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

模型API服务监控告警配置实践教程

最近更新时间:2026-09-15 14:52:37

本文介绍模型API服务中监控与告警的完整配置流程,包括创建并关联 Prometheus 与 Grafana 实例、配置监控指标看板、创建告警模板以及为 Prometheus 实例配置告警策略。适用于需要为已开通的模型配置基础或自定义监控及通知的场景。

监控基于金山云 Prometheus 采集指标、Grafana 呈现看板,帮助您掌握平台模型的计费、用量、性能、异常与推理缓存等运行情况。

约束限制

任意模型开启监控能力后,所有模型均可同步开启,无需重复配置。

费用说明

托管 Prometheus 的费用由实例费和上报指标存储费两部分构成,具体计费规则请参考托管 Prometheus 计费说明

  • 实例费:单价为 1.68 元/天/实例。

  • 上报指标存储量费用:日上报指标存储量(单位:GB)× 单价(单位:元/GB)。存储量 10 GB 内免费,超出部分计费。

费用预估:在仅使用免费存储额度的前提下,每日费用约为 2 元(含实例费)。实际总费用将根据上报指标存储量及存储时长动态变化,具体以实际用量为准。

步骤一:创建并关联监控服务

创建 Prometheus 及 Grafana 实例

  1. 登录金山云Prometheus监控管理控制台

  2. 监控实例列表页,点击+新建,创建新的Prometheus实例。具体操作可参考托管Prometheus相关内容。

  3. 在监控实例中开通 Grafana,并记录密码。具体操作可参考Grafana服务相关内容

接入点关联 Prometheus 实例

  1. 登录模型API服务控制台

  2. 在左侧导航栏,点击在线推理,并选择模型ID接入页签。

  3. 在模型列表中,点击任意模型名称,进入其详情页面。

  4. 选择监控页签。

    • 首次使用监控服务需点击开启监控,并关联前文创建的Prometheus实例

    • 非首次使用可点击更改绑定实例,重新关联前文创建的Prometheus实例。

步骤二:配置监控指标

配置通用型模板指标看板

完成步骤一相关操作后,系统后台会基于kcp-prometheus 数据源默认提供模板化配置(如下图所示),实现基础的监控能力,无需您手动配置。模板指标详情可查看附录通用型监控指标相关内容。

自定义指标看板

每次进入模型默认 Grafana 页面时,配置均会被刷新为最新预制模板。如您有自定义需求,需单独另存一张新表,在新表中编辑维护,具体操作如下:

  1. 进入模型监控看板页面,单击 setting 按钮。

  2. 进入配置页面后,点击左侧 save as 按钮,在弹窗中配置如下参数,点击Save即可。

    • Dashboard name:看板名称,用户自定义即可。

    • Folder:直接使用默认api-model

  3. 返回至模型监控页面,再次点击 setting 按钮,在左侧导航栏选择JSON Model,在相应文件中检索并记录uid对应的值。

  4. 返回至模型监控页面,在侧边栏点击+,并选择Import

  5. Import页面,点击Upload JSON file,将相应配置看板JSON文件上传至平台后,配置如下参数。

    相应示例JSON文件可点击此处进行下载,示例文件中监控的是glm-5.3-flash模型。示例文件中构建的监控标准信息,可查看附录自定义监控指标相关内容。

    • Name:修改当前监控看板的名称,会显示在看板顶部。

    • Folder:保持默认。

    • Unique identifier (UID):点击Change uid,输入前文记录的uid值。

    • kce-prometheus:直接选择默认的即可。

    • 模型:选择当前待监控的模型即可。

  6. 点击Import,返回模型监控页面,可查看相应看板已配置完成。

  7. 其他模型的监控数据可重复以上步骤,重新设置相应看板即可。所有已创建的自定义看板,可返回监控页面,点击相应图标进行查看。

步骤三:创建告警规则模板

  1. 登录金山云Prometheus监控管理控制台

  2. 在左侧导航栏,选择告警模板管理,默认进入告警规则模板列表页,点击新建告警规则模板。

  3. 新建告警规则模板页面,点击添加规则,配置各项参数,点击确定

    • PromQL:参考附录监控指标中的PromQL示例,直接进行复制即可。

    • 告警内容:针对当前告警规则的说明,该内容会原文推送到告警通知中,按需自定义即可。

    • 若需多个告警规则,点击添加规则继续配置即可,

    • 其他参数设置可参考告警配置相关内容。

步骤四:创建告警通知模板

金山云平台提供多中通知方式,可根据实际情况进行选择。

方式一:关联用户邮件、电话或短信通知

  1. 登录金山云Prometheus监控管理控制台

  2. 在左侧导航栏,选择告警模板管理

  3. 选择通知策略模板页签, 点击新建通知策略

  4. 在通知策略创建页面,点击通知对象的下拉框,选择用户用户组,在下拉框中选择相应的用户信息,选择通知方式,支持同时勾选邮件、电话短信

  5. 完成其他参数的设置后,点击确定即可。

方式二:配置办公平台通知(以飞书为例)

  1. 登录飞书,创建自定义机器人并获取其webhook地址,具体操作可参考其官方文档

  2. 登录飞书应用平台创建应用后根据相应组织关系,获取用户ID,具体操作可参考其官方文档

  3. 登录金山云Prometheus监控管理控制台。在左侧导航栏,选择告警模板管理

  4. 选择通知策略模板页签, 点击新建通知策略

  5. 在通知策略创建页面,点击通知对象的下拉框,选择办公平台,并选择飞书,填写提前获取到的机器人webhook地址以及用户ID。

  6. 点击通知对象所在行后的验证,测试webhook的连通性。若飞书侧收到如下通知,表示验证通过。

  7. 完成其他参数的设置后,点击确定即可。

方式三:配置webhook通知

您可通过webhook方法对接第三方监控告警平台或自建服务接口,金山云的Prometheus实例会推送如下json格式的数据(其中annotations.summary字段即控制台中用户配置的告警内容),在webhook接到数据后可进行二次处理,定制化告警通知。

{
    "receiver": "prometheus-e7b86a5e4d46440f89aa09cf84a8fc93-e7b86a5e4d46440f89aa****-webhook",
    "status": "firing",
    "alerts": [
        {
            "status": "firing",
            "labels": {
                "ai_cluster": "ep-2026081406****-*****",
                "ai_consumer": "20001*****",
                "alertgroup": "v4flash-rpm-above-3-perminute",
                "alertname": "rpm-above-X-perminute",
                "msp_id": "e7b86a5e4d46440f89aa09cf8****",
                "msp_level": "p0",
                "msp_policy_id": "659936200b564b5db0acc21eb9****",
                "msp_promql_hash": "5252b95b741d359720ebeac9319140f2fd2d99d3ecdda82ba163******",
                "msp_rule_id": "16731d548e594a3fb000d39258****"
            },
            "annotations": {
                "msp_escalation_id": "",
                "msp_notify_id": "9dd37fc86f4a48008d476ce950af****,1a552d9e02a94fa79c08eb80579e****",
                "summary": "v4 flash模型EndPoint的RPM 大于3,当前值为:11"
            },
            "startsAt": "2026-08-28T10:54:21.735615365+08:00",
            "endsAt": "0001-01-01T00:00:00Z",
            "generatorURL": "http://vmalert-e7b86a5e4d46440f89aa09cf84a8fc93-86d5979fcb-****:8080/vmalert/alert?group_id=1336472014476****\u0026alert_id=1680486408****",
            "fingerprint": "4d9999dadb1****"
        }
    ],
    "groupLabels": {
        "msp_policy_id": "659936200b564b5db0acc2****",
        "msp_rule_id": "16731d548e594a3fb000d3925****"
    },
    "commonLabels": {
        "ai_cluster": "ep-202608140****-*****",
        "ai_consumer": "2000****",
        "alertgroup": "v4flash-rpm-above-3-perminute",
        "alertname": "rpm-above-X-perminute",
        "msp_id": "e7b86a5e4d46440f89aa09cf*****",
        "msp_level": "p0",
        "msp_policy_id": "659936200b564b5db0acc21eb****",
        "msp_promql_hash": "5252b95b741d359720ebeac9319140f2fd2d99d3ecdda82ba163892ce****",
        "msp_rule_id": "16731d548e594a3fb000d39258****"
    },
    "commonAnnotations": {
        "msp_escalation_id": "",
        "msp_notify_id": "9dd37fc86f4a48008d476ce950af7210,1a552d9e02a94fa79c08eb805****",
        "summary": "v4 flash模型EndPoint的RPM 大于3,当前值为:11"
    },
    "externalURL": "http://vmalertmanager-e7b86a5e4d46440f89aa09cf****-0:9093"
}
  1. 登录金山云Prometheus监控管理控制台。在左侧导航栏,选择告警模板管理

  2. 选择通知策略模板页签, 点击新建通知策略

  3. 在通知策略创建页面,点击通知对象的下拉框,选择WebHook,选择相应HTTP请求方式,目前支持POSTGET,根据实际情况,点击新增一行,配置相应的HeaderParam。

    若webhook接收侧有数据源IP白名单限制,请配置如下Prometheus推送出口IP:

    华北1(北京) 110.43.160.161

    华东1(上海) 120.92.134.115

    华南1(广州) 110.43.32.247

    其他地区IP请联系金山云获取。

  4. 完成其他参数的设置后,点击确定即可。

  5. 若需在告警信息接收侧定制相应告警格式或卡片可参考相应平台的官方文档,如企业微信卡片

步骤五:为Prometheus实例配置告警策略

  1. 登录金山云Prometheus监控管理控制台

  2. 在左侧导航栏,选择监控实例

  3. 在实例列表中,找到步骤一创建的Prometheus实例,点击实例名称/ID,进入详情页面。

  4. 选择告警页签,点击新建告警策略。

  5. 在告警策略配置页面,设置以下参数。

    • 告警名称:用户自定义即可。

    • 告警规则:点击通过模板导入,选择步骤三创建的告警规则模板,修改相应参数即可,如将$model修改为具体的模型名称。

    • 通知策略:点击通过模板导入,选择步骤四创建的告警通知模板。

    • 其他参数根据实际情况进行修改。

  6. 完成各项参数设置后,点击确定

附录

通用模板监控指标

对模板生成的看板的修改会被自动刷新,不会保存。

分类

指标名

细化指标

PromQL示例(以模型接入点为例)

置顶项

RPM 限流数

-

sum(increase(route_upstream_model_consumer_metric_cluster_key_ratelimit_count{ai_model=~"$model"}[$__range]))

置顶项

TPM 限流数

-

sum(increase(route_upstream_model_consumer_metric_token_ratelimit_count{ai_model=~"$model"}[$__range]))

置顶项

缓存命中 Token 数

-

sum(increase(route_upstream_model_consumer_metric_cache_token{ai_model=~"$model"}[$__range]))

置顶项

超时错误数

-

sum(increase(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model", response_code_class="0xx"}[$__range]))

用量统计

RPM

-

sum(rate(route_upstream_model_consumer_metric_llm_duration_count{ai_model=~"$model"})) * 60

用量统计

TPM

-

sum(rate(route_upstream_model_consumer_metric_total_token{ai_model=~"$model"}[$__rate_interval])) * 60

用量统计

平均单次请求输入 token 数

-

sum(rate(route_upstream_model_consumer_metric_input_token{ai_model=~"$model"}[$__rate_interval])) / sum(rate(route_upstream_model_consumer_metric_llm_duration_count{ai_model=~"$model"}[$__rate_interval]))

用量统计

平均单次请求输出 token 数

-

sum(rate(route_upstream_model_consumer_metric_output_token{ai_model=~"$model"}[$__rate_interval])) / sum(rate(route_upstream_model_consumer_metric_llm_duration_count{ai_model=~"$model"}[$__rate_interval]))

性能监控

请求用时

P50、P90、P99、平均

P99:histogram_quantile(0.99, sum(rate(route_upstream_model_consumer_metric_llm_service_duration_bucket{ai_model=~"$model"}[$__rate_interval])) by (le))

平均:sum(increase(route_upstream_model_consumer_metric_llm_service_duration_sum{ai_model=~"$model"}[$__rate_interval])) / sum(increase(route_upstream_model_consumer_metric_llm_service_duration_count{ai_model=~"$model"}[$__rate_interval]))

性能监控

首 token 延时

P50、P90、P99、平均

P99:histogram_quantile(0.99, sum(rate(route_upstream_model_consumer_metric_llm_first_token_duration_bucket{ai_model=~"$model"}[$__rate_interval])) by (le))

平均:sum(increase(route_upstream_model_consumer_metric_llm_first_token_duration_sum{ai_model=~"$model"}[$__rate_interval])) / sum(increase(route_upstream_model_consumer_metric_llm_first_token_duration_count{ai_model=~"$model"}[$__rate_interval]))

异常统计

限流率

通过率、未通过率

未通过:(sum(rate(route_upstream_model_consumer_metric_cluster_key_ratelimit_request_total{ai_model=~"$model"}[$__rate_interval])) - sum(rate(route_upstream_model_consumer_metric_cluster_key_ratelimit_request_passed{ai_model=~"$model"}[$__rate_interval]))) / sum(rate(route_upstream_model_consumer_metric_cluster_key_ratelimit_request_total{ai_model=~"$model"}[$__rate_interval]))

通过:sum(rate(route_upstream_model_consumer_metric_cluster_key_ratelimit_request_passed{ai_model=~"$model"}[$__rate_interval])) / sum(rate(route_upstream_model_consumer_metric_cluster_key_ratelimit_request_total{ai_model=~"$model"}[$__rate_interval]))

异常统计

超时错误率

-

sum(rate(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model", response_code_class="0xx"}[5m])) / sum(rate(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model"}[5m]))

异常统计

错误率

-

sum(rate(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model", response_code_class=~"0xx|4xx|5xx"}[5m])) / sum(rate(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model"}[5m]))

异常统计

错误码速率

by 具体错误码

sum by (response_code_class) (rate(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model", response_code_class=~"0xx|4xx|5xx"}[5m])) / sum(rate(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model"}[5m]))

异常统计

错误码数量

by 具体错误码

sum by (response_code_class) (increase(route_upstream_model_consumer_metric_llm_request_count_rq{ai_model=~"$model", response_code_class=~"0xx|4xx|5xx"}[$__range]))

推理缓存

缓存命中率

-

sum by (ai_model)(delta(route_upstream_model_consumer_metric_cache_token{ai_model=~"$model"}[5m]))/sum by (ai_model)(delta(route_upstream_model_consumer_metric_input_token{ ai_model=~"$model"}[5m]))

自定义监控指标

本实践中自定义的监控指标内容如下:

分类

指标名

PromQL示例

用量统计

时间范围内Token总数

sum(increase(route_upstream_model_consumer_metric_total_token{ai_model=~"$model"}[$__range]))

用量统计

时间范围内请求总数

sum(increase(route_upstream_model_consumer_metric_llm_duration_count{ai_model=~"$model"}[$__range]))

用量统计

多合一折线图

单位时间Input token数

单位时间Output token数

单位时间Cache token数

单位时间Input Cache率

单位时间token总数

单位时间Input token数:sum(rate(route_upstream_model_consumer_metric_input_token{ai_model=~"$model"}[$__rate_interval]))

单位时间Output token数:

sum(rate(route_upstream_model_consumer_metric_output_token{ai_model=~"$model"}[$__rate_interval]))

单位时间Cache token数:

sum(rate(route_upstream_model_consumer_metric_cache_token{ai_model=~"$model"}[$__rate_interval])) or vector(0)

单位时间Input Cache率:注意要处理无结果或为0 的情况,数据平滑5m

(sum(rate(route_upstream_model_consumer_metric_cache_token{ai_model=~"$model"}[5m])) or vector(0)) / sum(rate(route_upstream_model_consumer_metric_input_token{ai_model=~"$model"}[5m] ) >0)

单位时间token总数: (token特别少的情况下可能不准)

sum(rate(route_upstream_model_consumer_metric_total_token{ai_model="$model"}[$__rate_interval]))

费用统计

时间范围内费用简单统计

输入*自定义输入单价+

输出*自定义输出单价+

输入缓存命中*自定义缓存命中单价

注:仅供粗估,未考虑不同输入大小对应的不同档位价格

假设输入0.8元、输出2.8元、cache 0.23元每百万token:(单价可以设置为模板变量,方便不同模型逻辑复用)

( sum(increase(route_upstream_model_consumer_metric_input_token{ai_model=~"$model"}[$__range])) or vector(0) ) * 0.8/1000000

+

( sum(increase(route_upstream_model_consumer_metric_out_token{ai_model=~"$model"}[$__range])) or vector(0) ) * 2.8/1000000

+

( sum(increase(route_upstream_model_consumer_metric_cache_token{ai_model=~"$model"}[$__range])) or vector(0) ) * 0.23/1000000

费用统计

预算金额消耗进度

在粗估基础上进行计算

在参考上表的基础上,假设总预算为200元(预算数额可以设置为模板变量)

(( sum(increase(route_upstream_model_consumer_metric_input_token{ai_model=~"$model"}[$__range])) or vector(0) ) * 0.8/1000000

+

( sum(increase(route_upstream_model_consumer_metric_out_token{ai_model=~"$model"}[$__range])) or vector(0) ) * 2.8/1000000

+

( sum(increase(route_upstream_model_consumer_metric_cache_token{ai_model=~"$model"}[$__range])) or vector(0) ) * 0.23/1000000) / 200

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈