用途:处理从 API 采集数据的 Elastic 集成中的 CEL 与 mito 工作,包括创建或编辑 cel.yml.hbs 代理流模板、为 cel 输入类型配置数据流 manifest、编写含分页/游标/认证的 CEL 程序、用 mito 本地测试调试、为 CEL 数据流搭建 mock API 系统测试,以及任何 CEL 或 mito 问题。不适用于 ingest pipeline 处理器设计、ECS 字段映射、包脚手架、Elastic 栈系统测试执行。
强制工作流:mock → mito → 模板。每个 CEL 程序必须按此顺序开发,在程序通过 mito 对运行中的 mock 验证前不得编写 cel.yml.hbs。每次运行 mito 前新增 CEL 不超过约 10–15 行,按骨架→错误处理→事件映射→分页→游标分阶段增量构建,每阶段后用 mito -data state.json -log_requests program.cel 验证。步骤:1) 在 _dev/deploy/docker/files/config-<stream>.yml 写 mock 配置与 test-default-config.yml;2) 用 stream http-server --addr=:8090 --config=... 启动 mock;3) 写独立 .cel 文件与 state.json(键名与未来 state: 块一致,用字面测试值,url 指向本地 mock);4) 运行 mito 迭代;5) 验证通过后才写 cel.yml.hbs,把可用表达式复制到 program: |,将字面值替换为 {{var}} 引用并配置 manifest。
模板与 manifest:cel.yml.hbs 位于 data_stream/<stream>/agent/stream/cel.yml.hbs,含 interval、resource.tracer、proxy_url、ssl、timeout、resource.url、state、redact.fields、max_executions、program、tags、processors 等段。集成包(type: integration)不得设置 data_stream.dataset,否则文档会落入错误索引。数据流 manifest 常用变量包括 url、interval、initial_interval、enable_request_tracer、http_client_timeout、proxy_url、ssl、tags、preserve_original_event、processors,认证变量依 API 而定。enable_request_tracer 应在数据流 manifest 声明。
程序职责与限制:CEL 程序只负责采集——拉取数据、处理分页、管理 cursor 状态、输出 {"message": e.encode_json()}。不处理 ES 级去重、字段映射或内容过滤。cursor 是唯一跨重启持久化的状态;want_more: true 触发立即重评估,存在下一页游标时应始终设为 true。cursor 更新需至少发布一个事件。不要在程序中实现限流或重试,改用 resource.rate_limit.limit、resource.rate_limit.burst、resource.retry.max_attempts、resource.retry.wait_min、resource.retry.wait_max 等配置。避免 dyn();所有数字为 float64。敏感 state 字段须有对应 redact 条目。提交仓库的数据必须完全匿名化。
Mito 是本地 CEL 评估 CLI(github.com/elastic/mito),未经 mito 测试的程序不可接受。安装、CLI 参数、执行模型等细节见 references/mito-reference.md。