如何为 Prefect Cloud 的部署配置 SLA 监控 flow run 时效

发布时间:2026/9/15 16:10:04
如何为 Prefect Cloud 的部署配置 SLA 监控 flow run 时效 如何为 Prefect Cloud 的部署配置 SLA 监控 flow run 时效【免费下载链接】prefectPrefect is a workflow orchestration framework for building resilient data pipelines in Python.项目地址: https://gitcode.com/GitHub_Trending/pr/prefect如果你在 Prefect Cloud 上运行调度部署想给 flow run 的耗时或启动时效设定明确的性能基线——例如“单次运行不应超过 10 分钟”“不应晚于计划时间 5 分钟启动”——并在线路超出基线时自动收到告警事件可以用 Prefect 的 SLAService Level Agreements功能完成这件事。SLA 配置在 deployment 级别生效违反阈值时后端会发出prefect.sla.violation事件你可以再用 automations 对这些事件做通知或纠正动作。该功能目前处于实验状态且仅支持 Prefect Cloud。前提条件Prefect Client 版本 3.1.12 或更高版本Prefect Cloud 账号SLA 仅在 Prefect Cloud 上可用自托管不支持如果使用 Terraform Provider需要 Prefect Terraform Provider 2.22.0 或更高版本在 prefect.yaml 中定义 SLA主路径在项目的prefect.yaml的 deployment 条目下添加sla列表即可文档给出的示例如下数值为文档示例值请替换为你自己 flow 的预期值deployments: my-deployment: sla: - name: time-to-completion duration: 10 severity: high - name: lateness within: 600 severity: high保存后运行prefect deploy部署该 deploymentSLA 配置会随部署一并写入。字段含义nameSLA 名称同一 deployment 下必须唯一durationTime to Completion 类型使用flow run 允许的最长运行时间单位为秒超过即违反withinLateness 类型使用flow run 在计划启动时间之后允许开始的时间窗口示例值 600 与后文.deploy示例中的timedelta(minutes10)对应severity违反时的严重级别取值来自实现中的定义见 src/prefect/_experimental/sla/objects.pyminor、low、moderate、high、critical默认moderate三种 SLA 类型Time to Completion SLA描述 flow run 应该在多长时间内完成。当一次运行超过duration指定的时长才完成时触发。文档示例为 deployment 设置duration为 600 秒10 分钟若 flow run 未在该时间窗内完成后端会发出prefect.sla.violation事件。适合监控长耗时 flow 是否在预期时间内结束。Lateness SLA描述 flow run 未能在计划时间准时启动的严重性由within参数控制。文档示例某 deployment 每天 10:00 启动Lateness SLA 为 5 分钟如果 flow run 没能在 10:05 前启动后端会发出 SLA 违规事件。Frequency SLA描述 deployment 应保持的运行间隔由stale_after参数控制例如小时级作业设为1 hour。当两次Completed状态的 flow run 之间超过该间隔时触发。其他配置方式可选分支使用 .deploy 方法在部署代码中以_sla参数传入 SLA 对象source与work_pool_name需替换为你项目的实际值timedelta需要自行导入from datetime import timedelta from prefect import flow from prefect._experimental.sla.objects import TimeToCompletionSla, LatenessSla, FrequencySla flow def my_flow(): pass flow.from_source( sourcesource, entrypointmy_file.py:my_flow, ).deploy( namemy-deployment, work_pool_namemy_pool, _sla[ TimeToCompletionSla(namemy-time-to-completion-sla, duration30, severityhigh), LatenessSla(namemy-lateness-sla, withintimedelta(minutes10), severityhigh), FrequencySla(namemy-frequency-sla, stale_aftertimedelta(hours1), severityhigh), ] ).deploy的参数文档明确说明_sla为实验特性可能随时移除或修改且当前仅支持 Prefect Cloud见 src/prefect/deployments/runner.py。使用 CLIprefect deploy --sla {name: my-time-to-completion-sla, duration: 10, severity: high}--sla接收 JSON 字符串根据 CLI 实现src/prefect/cli/deploy/_sla.py也可以传入以.yaml或.json结尾的文件路径文件中顶层sla键为 SLA 定义列表。注意在非 Cloud 环境下执行会抛出SLA configuration is currently only supported on Prefect Cloud.错误。使用 Terraform Providerprovider prefect {} resource prefect_flow my_flow { name my-flow } resource prefect_deployment my_deployment { name my-deployment flow_id prefect_flow.my_flow.id } resource prefect_resource_sla slas { resource_id prefect.deployment.${prefect_deployment.my_deployment.id} slas [ { name my-time-to-completion-sla severity high duration 30 }, { name my-lateness-sla severity high within 600 }, { name my-frequency-sla severity high stale_after 3600 } ] }验证在 Cloud UI 查看 SLA 状态配置生效后可以在 Prefect Cloud UI 的 runs 页面查看 SLA 状态它显示在页面顶部的 metrics 区域下方为文档示例截图判断是否触发违规的方式是看事件当 flow run 超出 SLA 阈值时后端会发出prefect.sla.violation事件。文档明确给出的例子是duration为 600 秒的 Time to Completion SLAflow run 未在该时间窗内完成时发出该事件。基于违规事件配置 automation要让 SLA 违规真正通知团队或触发纠正动作需要基于prefect.sla.violation事件创建 automation trigger步骤来自文档触发器类型选择Custom事件条件选择 any event matchingprefect.sla.violationFrom the Following Resources 选择prefect.flow-run.*。创建 trigger 后即可用 automations 的 action 部分配置通知或其他响应动作详见 automations 文档。限制SLA 是实验功能文档开头以 Experimental 警告标注未来可能变更。仅支持 Prefect Cloud自托管实例上应用 SLA 会报错CLI 路径会直接抛出SLA configuration is currently only supported on Prefect Cloud.。三个 SLA 类型各自只有一个独有参数duration、stale_after、within文档未说明其他类型的组合语义配置时只按上述参数使用。主要参考docs/v3/concepts/slas.mdx、src/prefect/_experimental/sla/objects.py、src/prefect/cli/deploy/_sla.py。【免费下载链接】prefectPrefect is a workflow orchestration framework for building resilient data pipelines in Python.项目地址: https://gitcode.com/GitHub_Trending/pr/prefect创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考