如何用 Temporal 工作流把自然语言运维请求转换为 Docker 服务检查与重启操作

发布时间:2026/9/15 17:11:33
如何用 Temporal 工作流把自然语言运维请求转换为 Docker 服务检查与重启操作 如何用 Temporal 工作流把自然语言运维请求转换为 Docker 服务检查与重启操作【免费下载链接】Nebius-CookbookA collection of projects showcasing RAG, agents, workflows, and other AI use cases项目地址: https://gitcode.com/GitHub_Trending/ne/Nebius-CookbookNebius-Cookbook 的advance_ai_agents/temporal_agents/devops_monitoring_temporal_agent/目录下有一个叫 Ops Sentinel 的项目。它的用途是你在控制台里输入一句自然语言运维请求比如“restart demo-cache and inspect health”项目先让 LLM 把这句话翻译成一组确定性的操作计划再由 Temporal 工作流按步骤调用 Docker activity完成服务清点、健康检查、日志抓取和服务重启。整条链路适合本地 Docker 环境Docker Desktop 或本地 Docker 守护进程在运行、安装了 Python 环境和 Temporal CLI、拥有 Nebius 的 API Key。项目入口说明见 README包级说明见 ops_sentinel/README.md。安装依赖并配置环境变量在项目根目录安装依赖pip install -r requirements.txtrequirements.txt 包含temporalio1.7.0、docker7.0.0、strands-agents和pytest7.0.0。配置通过环境变量或.env提供全部变量及其默认值定义在 config.pyTEMPORAL_HOSTTemporal 服务地址默认localhost:7233OPS_SENTINEL_TASK_QUEUE工作流任务队列名默认ops-sentinel-task-queueNEBIUS_API_KEY无默认值LLM 规划 activity 需要它NEBIUS_MODEL_ID默认nebius/deepseek-ai/DeepSeek-V3-0324DOCKER_HOSTDocker 运行时地址默认unix:///var/run/docker.sockDOCKER_TIMEOUTDocker 客户端超时秒数默认30。启动演示 Docker 栈Ops Sentinel 本身操作的是本机 Docker 里的容器官方提供了一个演示栈供练习。进入ops_sentinel目录后启动cd ops_sentinel docker compose -f stack.compose.yml up -dstack.compose.yml 定义了三个服务后续自然语言请求就指向它们服务名镜像端口用途ops-sentinel-apinginx:alpine8080带 healthcheck 的 API 容器ops-sentinel-cacheredis:alpine6379缓存容器ops-sentinel-workerpython:3.11-alpine无循环打印带时间戳日志的模拟 worker其中ops-sentinel-worker会周期性输出[INFO]、[DEBUG]、[WARN]日志并随机输出[ERROR] Connection timeout to database是练习日志抓取的重启目标。启动 Temporal、Worker 和控制台需要三个终端。第一个终端启动 Temporal 开发服务器temporal server start-dev第二个终端启动 worker。worker 连接TEMPORAL_HOST监听OPS_SENTINEL_TASK_QUEUE队列并把 workflow_runtime.py 中的OpsSentinelWorkflow和全部 Docker activity 注册到队列上用CtrlC停止python console.py worker第三个终端启动交互控制台python console.py控制台启动时会连接 Temporal。如果此时 Temporal 还没起它会打印Connection failed: ...并提示Start Temporal first with: temporal server start-dev按提示回到第一个终端即可。连接成功后提示Connected并在界面中显示 Temporal UI 地址http://localhost:8233。输入自然语言请求并观察执行控制台的提示符是ops。输入后控制台为该请求生成一个形如ops-sentinel-uuid的 workflow ID把整句话提交给OpsSentinelWorkflow.run执行完成后在终端打印工作流返回的完整文本。输入quit、q或exit退出会话。README 给出的示例请求show running containers inspect health for demo-api fetch logs for demo-worker 50 restart demo-cache and inspect health请求是如何变成操作的workflow_runtime.py 中build_execution_plan_activity用 Strands Agent通过LiteLLMModel调 Nebius 模型max_tokens: 1200、temperature: 0.2把用户请求转成逗号分隔的动作串只允许四种动作inspect[:filter]列出容器filter 可以是running、stopped、paused、exited、restarting等状态词也可以是按名称过滤health[:service]检查单个服务健康度不带服务名时汇总所有运行中服务logs:service[:lines]抓取指定服务日志行数缺省 100recycle:service重启指定服务。文档中的映射例子“show running services” →inspect:running“restart worker and check health” →recycle:worker,health:worker。规划 activity 有失败兜底LLM 调用异常、输出为空或超过 300 字符时计划降级为inspect计划解析后为空时同样回落到inspect。工作流随后逐个执行计划中的 step每个 step 有独立的超时与重试策略见 workflow_runtime.pyinspect超时 10 秒、最多 3 次尝试health超时 15 秒、3 次logs超时 12 秒、2 次recycle超时 30 秒、4 次。某个 step 失败不会终止整个工作流失败信息以Step step failed: error的形式并入最终返回文本。几个可直接观察的结果形态recycle成功时返回Service name restarted successfully如果重启命令已发出但容器最终不在 running 状态返回Service name restart was issued but service is not runninglogs返回Last n lines for name:加日志正文health返回✓ name: Healthy或✗ name: Unhealthy并附 State、Probe、CPU、Memory、Restarts 等字段。健康判定规则定义在 runtime_gateway.py状态不是running、容器 health probe 为unhealthy、重启次数达到RESTART_COUNT_THRESHOLDconfig.py 中为 5、CPU 或内存使用率超过 90% 阈值任一命中都会标记为 unhealthy 并列出对应 concern。验证结果三个层面的验证方式文档都给出了控制台输出每次请求执行完后直接打印工作流返回文本restarthealth组合请求会依次看到重启结果和健康检查段落。Temporal UI浏览器打开控制台提示的http://localhost:8233可以查看每次请求对应的 workflow 执行历史每次提交的 workflow ID 形如ops-sentinel-uuid。离线自检在ops_sentinel目录运行诊断脚本和结构测试cd ops_sentinel python doctor.py pytest test_ops_sentinel.pydoctor.py 依次检查代码编译、模块导入、数据模型、配置项和 Temporal Worker 创建五项全部通过时打印✓ All validation tests passed!和Ops Sentinel is ready to use.。其中 Worker 创建一项连接localhost:7233如果 Temporal 服务器未启动doctor 会打印说明并视为可接受输出中提示This is OK if Temporal server is not running。排查与限制控制台连接不上 Temporal输出为Connection failed: error文档给出的处理方式就是先执行temporal server start-dev。Docker 运行时不可用OpsRuntimeGateway初始化时若 ping 不通 Docker会抛Docker runtime is unavailable. Ensure Docker is running.此时依赖未安装会提示Python docker package is not installed. Install dependencies from requirements.txt.。服务名不存在health、logs、recycle对找不到的服务名会抛Service name was not found且标记为 non-retryable不会重试。规划兜底NEBIUS_API_KEY缺失或 LLM 返回不合规时请求会降级为只执行inspect不会报规划失败——如果只看到容器列表而不是预期操作先检查该环境变量。演示栈端口固定占用 8080 和 6379stack.compose.yml中的三个容器都设置了restart: unless-stopped练习完成后需要自行停止该 compose 栈。完成一轮请求后可以继续用不同的自然语言请求比如给logs指定行数fetch logs for demo-worker 50验证同一工作流对inspect、health、logs、recycle四种动作的覆盖全部行为均可在 Temporal UI 的执行历史中逐 step 核对。【免费下载链接】Nebius-CookbookA collection of projects showcasing RAG, agents, workflows, and other AI use cases项目地址: https://gitcode.com/GitHub_Trending/ne/Nebius-Cookbook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考