Keep 0.54.3 配置参数详解

Keep(keephq/keep)0.54.3 全量配置参数:后端/前端环境变量按官方文档逐类整理并标注默认值,KEEP_PROVIDERS、KEEP_WORKFLOWS_DIRECTORY 预置与 workflow YAML 字段逐项实测验证。

Keep监控告警可观测性2026/10/23

Keep 0.54.3 配置参数详解

目标:系统梳理 Keep(keephq/keep,开源 AIOps 告警管理平台)0.54.3 的全部配置入口——后端/前端环境变量按官方文档逐类整理并标注默认值,providers 预置(KEEP_PROVIDERS)、workflow 预置(KEEP_WORKFLOWS_DIRECTORY)与 workflow YAML 各字段均以实测验证。参数清单溯源官方配置文档(查询日期 2026-10-23),实测结论出自 0.54.3 版本真实服务器(部署过程见 《Keep Docker Compose 部署指南》)。

一、环境信息

项目值说明
Keep 版本v0.54.3(2026-09-09 发布)GitHub Releases 实查的最新稳定版
参数清单来源docs.keephq.dev/deployment/configuration官方配置文档,2026-10-23 查询
实测环境Ubuntu 22.04 + Docker Compose 三服务栈后端 keep-api(8148 端口)/ 前端 keep-ui(8150)/ 推送 Soketi(8146)
实测口径docker compose restart 后逐一验证参数效果预置 provider/workflow、API Key、interval 调度、/metrics 均有实测回显

阅读约定:标注「实测」的参数在 0.54.3 版本上真实跑通并给出回显/证据;其余参数的默认值与取值范围照录官方文档,未做破坏性验证的会在小节内说明。

二、前置条件

  1. 已按 《Keep Docker Compose 部署指南》 完成 0.54.3 三服务栈部署,curl -s http://localhost:8148/healthcheck 返回 {}。
  2. 已预置可用的 API Key(KEEP_DEFAULT_API_KEYS),能通过 curl -H "x-api-key: ..." 调用后端 API。
  3. 实验产物目录统一约束在 /opt/data/quzuo/tmp/keep-alerts/(compose 文件与 state/ 持久化目录都在其中)。

三、参数查看与修改方式

Keep 没有集中式配置文件,配置入口有三类:

  1. 环境变量(最主要):后端与前端各自的容器环境变量。Compose 部署写在 docker-compose.yml 的 environment 段;docker run 部署用 -e 传入;K8s 部署写 ConfigMap/Deployment env。修改后需重启对应服务生效:
    docker compose restart keep-backend   # 后端参数
    docker compose restart keep-frontend  # 前端参数
    
  2. 页面与 API:provider 连接、workflow、规则类(关联/映射/提取/维护窗口)配置存在数据库中,通过 UI 设置页或 REST API 增删改(这类不属于环境变量,重启即持久保留)。
  3. CLI 本地配置:keep config new 生成的 ~/.keep.yaml 只保存 CLI 自己的连接参数(api_key / keep_api_url),是「客户端配置」,与服务端参数无关。

查看当前生效配置的实用手段(均在实测栈验证):

# 查看容器实际注入的环境变量(排障第一手资料)
docker exec keep-0543-backend env | grep -E 'KEEP_|AUTH_|DATABASE_' 

# 查看后端当前运行的完整请求日志(JSON 格式,LOG_FORMAT=open_telemetry 默认样式)
docker compose logs --tail 5 keep-backend

# API 层验证参数效果:已安装 provider / 已注册 workflow / 自身指标
curl -s -H "x-api-key: q1w2e3r4-keep-demo-key" http://localhost:8148/providers | head -c 200
curl -s -H "x-api-key: q1w2e3r4-keep-demo-key" http://localhost:8148/workflows
curl -s -H "x-api-key: q1w2e3r4-keep-demo-key" http://localhost:8148/metrics | head -3

四、参数总览

0.54.3 官方文档的后端参数按功能分为 15 类、前端参数 4 类。总览如下(✅ = 本文有实测验证):

分类代表参数作用一句话
通用KEEP_HOST / PORT / SCHEDULER / CONSUMER服务监听地址与调度器开关 ✅
日志与环境LOG_LEVEL / LOG_FORMAT / ENVIRONMENT日志级别与输出格式
数据库DATABASE_CONNECTION_STRING / DATABASE_POOL_SIZE存储后端(默认 SQLite)✅
认证AUTH_TYPE / KEEP_JWT_SECRET / KEEP_DEFAULT_API_KEYS登录方式与 API Key 预置 ✅
密钥管理SECRET_MANAGER_TYPE / SECRET_MANAGER_DIRECTORYprovider 凭据存哪里 ✅
资源预置KEEP_PROVIDERS / KEEP_WORKFLOWS_DIRECTORY / PROVISION_RESOURCES启动时自动预置 provider 与 workflow ✅
服务网格KEEP_ALLOW_MESH_ALERT_INGESTION集群内免 Key 上报告警(慎用)
推送PUSHER_APP_ID/KEY/SECRET / PUSHER_HOST / PUSHER_PORT前后端实时刷新 ✅
AIOPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_MODEL_NAMEAI 关联与辅助(零 Key 可运行)✅
可观测KEEP_METRICS / OTEL_* / PROMETHEUS_MULTIPROC_DIR自身指标与链路追踪 ✅(KEEP_METRICS)
缓存队列REDIS / REDIS_SENTINEL_* / ARQ_*分布式缓存与异步任务
限流KEEP_USE_LIMITER / KEEP_LIMIT_CONCURRENCY告警上报接口限速
维护窗口MAINTENANCE_WINDOW_STRATEGY / WATCHER_LAPSED_TIME计划内停机的告警策略
前端通用API_URL / NEXTAUTH_URL / NEXTAUTH_SECRET / NEXT_PUBLIC_API_URL前端连接后端与浏览器侧地址 ✅
前端显示HIDE_NAVBAR_* / ALERT_SIDEBAR_FIELDS / AUTH_SESSION_TIMEOUT界面栏目裁剪与会话时长

五、核心参数分类详解

5.1 通用参数

参数默认值说明
KEEP_HOST0.0.0.0后端监听地址
PORT8080后端监听端口(实测容器内 8080 映射宿主 8148)
SCHEDULERtrueworkflow 定时调度器开关。实测:interval 触发器工作正常即依赖此开关(见 5.12 实测)
CONSUMERtrue告警消费者开关(关闭后停止消费上报队列)
KEEP_VERSIONunknown版本标注,可自行写入便于对齐镜像版本
KEEP_API_URL由 HOST/PORT 拼装后端自感知的 API 地址
KEEP_STORE_RAW_ALERTSfalse是否保存原始告警报文(排障时可开,占存储)
TENANT_CONFIGURATION_RELOAD_TIME5租户配置热加载间隔(分钟)
KEEP_LIVE_DEMO_MODEfalse演示模式:自动模拟告警流入(评估演示用,生产禁开)

SCHEDULER=false + CONSUMER=true 的拆分场景:多副本部署时只让一个实例跑定时调度,其余实例专职消费告警,避免 interval workflow 重复执行。单机默认全开即可(实测单机全开无异常)。

5.2 数据库参数

参数默认值说明
DATABASE_CONNECTION_STRING(无默认,官方标 Required)SQLAlchemy 连接串。实测:sqlite:////state/db.sqlite3?check_same_thread=False(Compose 官方模板值,SQLite 时等效默认)
DATABASE_POOL_SIZE5连接池常驻连接数
DATABASE_MAX_OVERFLOW10连接池峰值溢出连接数
DATABASE_ECHOfalse打印 SQL 语句(排障用)
SKIP_DB_CREATIONfalse跳过建库与迁移(特殊运维场景)
DB_CONNECTION_NAME / DB_NAME / DB_SERVICE_ACCOUNT / DB_IP_TYPE(Cloud SQL 组)GCP Cloud SQL 专用,自托管可忽略

MySQL/PostgreSQL 切换示例(应用层无差别,历史数据不自动迁移):

mysql+pymysql://keep:StrongPass@mysql:3306/keep
postgresql+psycopg2://keep:StrongPass@postgres:5432/keep

实测持久化证据:默认 SQLite 下运行后 state/db.sqlite3 实测 794624 字节,全部告警/workflow/凭据都在该单文件中。

5.3 认证参数

参数默认值说明
AUTH_TYPENOAUTH取值:NOAUTH / DB / OAUTH2PROXY / OKTA / ONELOGIN(开源);AUTH0 / KEYCLOAK / AZUREAD 属企业版。前后端必须一致 ✅
KEEP_JWT_SECRET(DB 模式必填)JWT 签名密钥,生产务必换强随机值
KEEP_DEFAULT_USERNAME / KEEP_DEFAULT_PASSWORDkeep / keepDB 模式首个管理员账号(生产必改)
KEEP_FORCE_RESET_DEFAULT_PASSWORDfalse首登强制改密
KEEP_DEFAULT_API_KEYS(空)启动预置 API Key,格式 名称:角色:密钥,逗号分隔多个。实测:cli-demo:admin:q1w2e3r4-keep-demo-key 启动即生效 ✅
KEEP_ALLOW_MESH_ALERT_INGESTIONfalse允许无 Key POST /alerts/event*(以 webhook 角色受理,需配网络层访问控制,慎用)

实测要点:NO_AUTH 模式 ≠ 免 API Key。页面浏览不需要登录,但 API 调用(含告警上报)必须带 x-api-key,否则 401 Missing API Key——这是实测中踩到的第一个配置坑(解法见部署篇 11.3 节)。预置 Key 与角色 RBAC 的关系:admin 角色拥有全部 scope,webhook 角色仅有 write:alert / write:incident。

5.4 密钥管理参数

参数默认值说明
SECRET_MANAGER_TYPEFILE取值 FILE / GCP / K8S / VAULT / DB。实测 FILE 模式
SECRET_MANAGER_DIRECTORY/stateFILE 模式落盘目录。实测:/state(bind mount 宿主 state/)

FILE 模式实测落盘形态(每条凭据一个小文件,内容为连接参数 JSON):

keep-cli-demo                     # KEEP_DEFAULT_API_KEYS 预置的 API Key
keep_console_09f66d0f96634ec8...  # CLI 手工连接的 console provider
keep_console_03092072a8ab409b...  # KEEP_PROVIDERS 预置的 console provider
keep_bash_f92d7d3a4d754024b3c...  # KEEP_PROVIDERS 预置的 bash provider

要点:凭据文件与 SQLite 库分离存放,备份 state/ 目录时两者一起带走;切到 DB 模式则凭据入库(备份更简单,但需保证数据库安全)。

5.5 资源预置参数(KEEP_PROVIDERS / KEEP_WORKFLOWS_DIRECTORY)

这组参数让 Keep 在启动时自动「开通」资源,替代手工在 UI 上逐个连接,是配置即代码(IaC)的关键入口。

KEEP_PROVIDERS:JSON 数组/对象声明预置连接,格式为 {"连接名": {"type": "provider类型", "authentication": {凭据字段}}}。实测值:

- KEEP_PROVIDERS={"console-yaml-prov":{"type":"console","authentication":{}},"bash-local":{"type":"bash","authentication":{}}}

实测验证(keep provider list,CLI 用法见《Keep 0.54.3 常用 CLI 命令与工具详解》):

+----------------------------------+---------+-------------------+--------------+----------------------------+
|                ID                |   Type  |        Name       | Installed by |     Installation time      |
+----------------------------------+---------+-------------------+--------------+----------------------------+
| f92d7d3a4d754024b3c289db4b1eb43d |   bash  |     bash-local    |    system    | 2026-10-23T01:32:42.603161 |
| 09f66d0f96634ec8b9bd3c575d427ce4 | console |    console-demo   | admin@keephq | 2026-10-23T01:24:16.787161 |
| 03092072a8ab409ba41974670f4e7040 | console | console-yaml-prov |    system    | 2026-10-23T01:32:42.597398 |
+----------------------------------+---------+-------------------+--------------+----------------------------+

Installed by: system 即 KEEP_PROVIDERS 预置的连接(console-yaml-prov、bash-local),与 admin@keephq 手工连接的 console-demo 并列共存;且在 docker compose restart keep-backend 重启后依然存在(预置有幂等性,不会重复建)。

KEEP_WORKFLOWS_DIRECTORY:指向容器内目录,其中的 workflow YAML 启动时批量注册。实测 KEEP_WORKFLOWS_DIRECTORY=/state/workflows,目录内放 disk-critical-handler.yml 与 interval-logger.yml 两个文件,重启后端后 GET /workflows 返回 3 条(2 个预置 + 1 个此前 API 注册的)。配合 PROVISION_RESOURCES(默认 true):设为 false 则关闭启动预置流程。

Compose 里写 JSON 环境变量的注意点:JSON 内层的双引号在 YAML 流式标量里可直接写;若值中含 $ 符号需写成 $$ 防止 Compose 变量插值。

5.6 实时推送参数(Pusher/Soketi 三方对齐)

参数位置默认值说明
PUSHER_APP_ID / PUSHER_APP_KEY / PUSHER_APP_SECRET后端无(用 Pusher 时必填)后端作为推送客户端的凭据 ✅ 实测 1/keepappkey/keepappsecret
PUSHER_HOST / PUSHER_PORT后端无后端连 Soketi 的容器网络地址(实测 keep-websocket-server:6001)
PUSHER_DISABLED后端/前端false完全关闭实时推送
PUSHER_USE_SSL / PUSHER_CLUSTER后端false / 无对接商业 Pusher 云时使用
PUSHER_HOST / PUSHER_PORT / PUSHER_APP_KEY前端localhost / 6001 / keepappkey浏览器连 Soketi 的地址(要用宿主可达地址,实测 localhost:8146)
SOKETI_DEFAULT_APP_ID / KEY / SECRETSoketi 容器无推送服务端三元组 ✅ 实测 1/keepappkey/keepappsecret

对齐规则(实测排查心得):后端 PUSHER_APP_ID/KEY/SECRET ≡ SOKETI_DEFAULT_APP_*;前端 PUSHER_APP_KEY ≡ SOKETI_DEFAULT_APP_KEY。前端 HOST/PORT 是给浏览器用的(填宿主地址),后端 HOST/PORT 是容器网络内的(填服务名)——同一个变量名在两端含义不同,是配置错误的最高发点。

5.7 AI 参数

参数默认值说明
OPENAI_API_KEY无OpenAI Key。实测:留空时核心功能全部可用(本栈零 AI Key 跑通告警/工作流全链路)
OPENAI_MODEL_NAMEgpt-4o-2024-08-06模型名,可换 gpt-4o-mini 等
OPENAI_BASE_URL无兼容 OpenAI 协议的自建网关(LiteLLM 等),国内环境常用
OPEN_AI_ORGANIZATION_ID无OpenAI 组织 ID
KEEP_AI_DISABLE_TEMPERATUREfalse推理类模型不接受 temperature 参数时置 true

注意 AI 功能还要求前端也配置同名 OPENAI_* 变量(官方文档 TIP 明确说明),AI 辅助写 workflow 等界面能力才能用。

5.8 日志与可观测参数

参数默认值说明
LOG_LEVELINFODEBUG/INFO/WARNING/ERROR/CRITICAL
LOG_FORMATopen_telemetryopen_telemetry(JSON 结构化)或 dev_terminal(人类可读)。实测日志为 JSON 行
ENVIRONMENTproductiondevelopment/staging/production
KEEP_METRICSfalse开启 Prometheus 指标端点。实测 true 后 curl -H "x-api-key: ..." /metrics 返回 alerts_total、open_incidents_total 等指标
PROMETHEUS_MULTIPROC_DIR无多进程指标共享目录(Compose 模板设为 /tmp/prometheus)
OTEL_SERVICE_NAMEkeep-apiOTel 服务名
OTEL_EXPORTER_OTLP_ENDPOINT无OTLP 上报地址(traces/logs/metrics 可分别用 OTEL_EXPORTER_OTLP_TRACES/LOGS/METRICS_ENDPOINT 细分)
CLOUD_TRACE_ENABLEDfalseGCP Cloud Trace 专用

5.9 缓存、队列与限流参数

参数默认值说明
REDISfalse开启 Redis(缓存与任务队列,多副本建议开启)
REDIS_HOST / REDIS_PORT / REDIS_DBlocalhost / 6379 / 0Redis 连接
REDIS_USERNAME / REDIS_PASSWORD无Redis 认证
REDIS_SENTINEL_HOSTS / REDIS_SENTINEL_SERVICE_NAMElocalhost:26379 / mymaster哨兵模式连接
ARQ_BACKGROUND_FUNCTIONS无ARQ 异步任务函数清单
ARQ_KEEP_RESULT / ARQ_EXPIRES / ARQ_EXPIRES_AI3600 / 3600 / 3600000任务结果保留与过期(秒)
KEEP_USE_LIMITERfalse限流开关。作用面:仅 POST /alerts/event 与 POST /alerts/{provider_type} 两类上报端点
KEEP_LIMIT_CONCURRENCY100/minute限流表达式 `{数字}/{second

5.10 维护窗口参数

参数默认值说明
MAINTENANCE_WINDOW_STRATEGYdefaultdefault:窗口内压住告警;recover_previous_status:窗口结束恢复原状态
WATCHER_LAPSED_TIME60告警复查巡检间隔(秒)

5.11 前端参数

参数默认值说明
API_URL(必填)前端服务端转发请求的后端地址(Compose 网络内服务名,实测 http://keep-backend:8080)
NEXT_PUBLIC_API_URL无浏览器直连后端地址(填宿主可达地址,实测 http://localhost:8148)
NEXTAUTH_URL / NEXTAUTH_SECRET(必填)NextAuth 回调地址与会话密钥(实测 http://localhost:8150)
AUTH_SESSION_TIMEOUT2592000会话时长(秒,默认 30 天)
KEEP_HIDE_SENSITIVE_FIELDS无隐藏告警中的敏感字段
HIDE_NAVBAR_CORRELATION / WORKFLOWS / SERVICE_TOPOLOGY / MAPPING / EXTRACTION / MAINTENANCE_WINDOW / AI_PLUGINS无设 true 隐藏对应导航页(精简界面、按角色裁剪)
ALERT_SIDEBAR_FIELDSservice,source,description,message,fingerprint,url,incidents,timeline,relatedServices告警详情侧栏展示字段
KEEP_WF_LIST_EXTENDED_INFOtrueworkflow 执行列表样式开关
POSTHOG_KEY / POSTHOG_HOST无前端产品分析埋点(内网可留空)

5.12 workflow YAML 参数逐项(实测)

workflow 是 YAML 文件,顶层只有一个 workflow: 键,字段如下(✅ = 本文实测验证):

字段层级说明
idworkflow必填,全局唯一标识( CEL 里用 workflow.id 引用)✅
name / descriptionworkflow展示名与描述 ✅
disabledworkflow置 true 停用
triggersworkflow触发器列表,四种类型见下 ✅
stepsworkflow查询/取数步骤列表(可被后续动作引用 steps.名字.results)✅
actionsworkflow动作列表 ✅
conditions / functions / foreach / inputsworkflow高级语法:条件块、可复用函数、循环、入参(官方文档支持;本文未实测,不展开)
name / provider / if / foreachstep/action 内步骤名、provider 定义、执行条件、循环
type / config / withprovider 内provider 类型、连接引用({{ providers.连接名 }})、参数

triggers 四种类型:

triggers:
  - type: manual        # 手动触发(UI 点 Run / CLI workflow run)✅ 实测通过
  - type: interval      # 定时触发 ✅ 实测通过
    value: 10           # 秒数
  - type: alert         # 告警触发 ✅ 实测通过
    cel: source.contains("demo") && severity == "critical"   # CEL 过滤表达式 ✅ 实测通过
    filters:            # 旧式过滤(官方已标记 deprecated,不推荐)
      - key: severity
        value: critical
  - type: incident      # 事故创建/更新/解决时触发(本文未实测)
    on: [create, update]

实测 workflow 全文(interval + console 动作,文件置于 KEEP_WORKFLOWS_DIRECTORY 后重启后端加载):

workflow:
  id: interval-logger
  name: Interval Logger
  description: Print a heartbeat log every 10 seconds to verify the scheduler.
  triggers:
    - type: interval
      value: 10
  actions:
    - name: heartbeat
      provider:
        type: console
        with:
          logger: true
          message: "Heartbeat from interval-logger workflow"

实测回显(docker logs keep-0543-backend 中每 10 秒一条,JSON 关键字段摘录):

{"message": "Heartbeat from interval-logger workflow", "levelname": "INFO", "name": "console",
 "threadName": "WorkflowScheduler_1", "workflow_id": "ecc524d1-a07e-4a93-a2d9-daeec421cc69",
 "workflow_execution_id": "bf765e01-1481-48b9-acc6-a495b031d5b4", "tenant_id": "keep",
 "context": {"step_id": "heartbeat"}}

间隔精确(01:52:26 → 01:52:36 → 01:52:46 → …),WorkflowScheduler_1 线程名证明 SCHEDULER 默认开启生效。

实测 alert 触发 workflow(告警触发 + CEL 过滤 + console 动作 + mock 富化):

workflow:
  id: disk-critical-handler
  name: Disk Critical Handler
  description: Handle critical disk alerts, log via console and enrich with owner and runbook.
  triggers:
    - type: alert
      cel: source.contains("demo") && severity == "critical"
  actions:
    - name: log-alert
      provider:
        type: console
        with:
          logger: true
          message: "Critical disk alert {{ alert.name }} on {{ alert.fingerprint }}"
    - name: enrich-alert
      provider:
        type: mock
        with:
          enrich_alert:
            - key: owner
              value: sre-team
            - key: runbook
              value: https://runbooks.example.com/disk

注入 source=["demo"]、severity="critical" 的告警后,workflow 自动执行:console 动作落日志、enrich_alert 将 owner=sre-team、runbook=https://runbooks.example.com/disk 写入告警对象(API 中该告警 enriched_fields 实测变为 ['owner','runbook'])。enrich_alert 的 disposable: true 表示临时富化(新告警到达即丢弃),实测未启用。

bash provider 实测(steps 执行宿主命令,stdout 回填 steps.步骤名.results.stdout):

steps:
  - name: df-step
    provider:
      type: bash
      with:
        command: uptime

实测执行结果中 stdout 为标准 uptime 输出({"stdout": " 01:34:46 up 3 days, 9:46, ...", "stderr": "", "return_code": 0})。bash provider 仅限自托管环境使用。

六、生产配置模板

场景一:小团队评估(2C4G,单机)——默认栈即可:SQLite + NO_AUTH/DB 认证 + 零 AI。磁盘预留 10GB(镜像 4GB + 数据与日志)。核心仅三行:

- AUTH_TYPE=NO_AUTH
- KEEP_DEFAULT_API_KEYS=ci-bot:admin:<强随机密钥>
- DATABASE_CONNECTION_STRING=sqlite:////state/db.sqlite3?check_same_thread=False

场景二:多人团队生产(4C8G 起,MySQL + Redis)——数据落外部库、开启缓存、收紧认证:

- AUTH_TYPE=DB
- KEEP_JWT_SECRET=<64 位强随机>
- KEEP_DEFAULT_USERNAME=admin
- KEEP_DEFAULT_PASSWORD=<强密码>
- KEEP_FORCE_RESET_DEFAULT_PASSWORD=true
- DATABASE_CONNECTION_STRING=mysql+pymysql://keep:<密码>@mysql:3306/keep
- DATABASE_POOL_SIZE=10
- REDIS=true
- REDIS_HOST=redis
- SECRET_MANAGER_TYPE=DB
- KEEP_USE_LIMITER=true
- KEEP_LIMIT_CONCURRENCY=200/minute
- KEEP_STORE_RAW_ALERTS=false
- KEEP_METRICS=true
- LOG_LEVEL=INFO

磁盘:MySQL 独立规划(告警表增长与保留策略相关);state/ 仍需持久化(workflow 与密钥)。

场景三:内网断网环境——在场景二基础上:镜像离线导入(docker save/docker load),关闭一切外联:前端 POSTHOG_KEY/NEXT_PUBLIC_SENTRY_DSN 留空,后端 POSTHOG_DISABLED=true、SENTRY_DISABLED=true、不配 OPENAI_API_KEY(或 OPENAI_BASE_URL 指向内网 LLM 网关)。

七、常见问题(实测排障实录)

7.1 NO_AUTH 下 API 仍 401:NOAUTH 只免「登录」,不免「API Key」。用 KEEP_DEFAULT_API_KEYS 预置后带 x-api-key 调用(详见部署篇 11.3 节实测)。

7.2 KEEP_PROVIDERS 的 JSON 写错导致后端起不来:JSON 必须合法且外层不带多余引号。实测稳妥写法是 Compose environment 列表项直接写 JSON(见 5.5 实测值);若从 shell 注入,注意 $ 转义为 $$。写错时的典型表现为后端启动阶段抛 JSON 解析异常退出,docker compose logs keep-backend 可定位。

7.3 每次执行 compose 命令都提示 OPENAI_API_KEY not set:compose 里 - OPENAI_API_KEY=$OPENAI_API_KEY 从宿主环境取值所致,warning 无害(实测零 Key 全功能可用)。删除该行或配置 .env 即可消除。

7.4 改了 workflow YAML 不生效:预置目录中的文件在后端启动时加载,修改后需 docker compose restart keep-backend。UI 编辑器内保存的 workflow 入库 SQLite,与文件预置是两条路径,不要对同一 id 混用。

7.5 interval workflow 的执行记录查不到:实测 0.54.3 中 GET /workflows/executions 返回的列表未包含 interval 触发的执行(只查到 alert 触发的历史记录),但 interval workflow 确实在跑(容器日志每 10 秒输出心跳,见 5.12 实测)。结论:验证 interval workflow 以容器日志为准;这也是 CLI keep workflow runs list 同样查不到 interval 执行的原因(CLI 走同一 API)。

7.6 前端实时刷新失灵:按 5.6 对齐规则核对三方三元组;尤其区分前端 PUSHER_HOST(浏览器视角,填宿主地址)与后端 PUSHER_HOST(容器网络,填服务名)。

八、参考链接