在 Elastic 中使用 MCP 自动化用户旅程以进行合成监控
作者来自 Elastic Jessica Garson本文探讨如何使用 Elastic Observability、TypeScript 和 FastMCP 自动创建合成监控中的用户旅程journeys并演示该应用及其工作流程。Elastic Observability 中的 Synthetic Monitoring 允许你通过全球测试基础设施跟踪用户路径模拟完整的用户流程以衡量 Web 应用的影响。它还能从开发到生产阶段提供对网站性能、功能和可用性的全面洞察使你能够在问题影响客户之前发现并解决它们。Elastic Synthetic Monitoring 的核心能力之一是创建用户旅程这可以通过有代码或无代码的方式完成。系统提供 Synthetics agent这是一个 CLI 工具可以引导你创建 heartbeat 监控和用户旅程并将代码部署到 Elastic Observability。如果你使用代码来创建用户旅程本质上是在使用 Playwright并在其之上增加了一些配置使其更易于与 Elastic Observability 集成。要使用 TypeScript 自动创建用户旅程你可以基于 prompt 生成 Playwright 测试使用 WarpAI 辅助终端、Gemini 2.5 Pro 以及 MCP 来完成这一过程。该应用使用 Python 和 FastMCP 构建它对 synthetic agent 进行了封装使浏览器测试能够自动部署到 Elastic。本文将介绍该应用的工作原理、使用方法以及开发过程。完整代码可以在 GitHub 上获取。解决方案概览目前该方案在 Warp 中作为 MCP server 运行不过你也可以使用其他客户端例如 Claude Desktop 或 Cursor。在此基础上你会使用 FastMCP 创建一个 Python 脚本它允许你定义可以被 LLM 调用的函数。在 Warp 中你可以创建一个 JSON 配置文件用来指向你的 Python 脚本并传入你正在使用的所有环境变量。完成之后你需要切换到 agent mode并提出关于创建合成测试的问题或者直接调用 MCP 函数。在 LLM 选择方面有多种选项可以查看 Warp 的文档了解可用能力。之后你可以提出关于创建合成测试的问题或者直接调用目标 MCP 函数。以下三个函数可以使用diagnose_warp_mcp_config用于调试可能出现的环境变量配置问题。除非配置出现错误否则通常不需要使用。create_and_deploy_browser_test如果提供测试名称、测试 URL 和调度时间它会自动创建 Playwright 测试。这种方式基于模板而不是基于机器学习因此生成的测试结构通常比较一致。llm_create_and_deploy_test_from_prompt与 create_and_deploy_browser_test 类似但区别在于它使用 LLM 根据你提供的 prompt 生成测试。生成结果会反映你的描述。调用该函数时需要提供测试名称、URL、prompt 和调度时间。为什么将该方案设计为 MCP server这样做的原因是相比于单独的脚本或标准 CLI将其实现为 MCP server 可以让系统以更 “对话式” 的方式进行结构化交互。它使 LLM 能够生成动态的 Playwright 测试同时仍然保持一致的参数结构、环境变量以及响应格式从而保证准确性与可靠性。因此它形成了一种可靠的工作流可以与其他 agent 或开发工具进行组合使用。换句话说MCP 层将基于 LLM 的测试生成能力从 “一次性脚本” 提升为标准化、可复用的能力。要了解 MCP 的发展方向可以参考我们关于该主题的文章。实现考虑因素在构建类似方案时需要特别注意 token 的使用问题。该方案的早期版本生成合成测试大约需要 20 分钟并最终导致严重的速率限制rate-limiting问题。另一个开发过程中遇到的问题是如何在 “模板化 Playwright 脚本生成 ”和 “基于 prompt 的 LLM 生成” 之间取得平衡。一方面完全模板化的方式可以提高可靠性但生成结果容易显得机械、重复另一方面完全依赖 LLM 虽然更灵活但经常会生成无法运行的脚本或者依赖不存在的参数。最终版本尝试在两者之间折中使用模板结构作为基础同时通过调整 LLM 参数 temperature用于控制模型输出的随机性与创造性来增强生成多样性。在测试过程中还发现了一个失败的测试场景需要处理弹窗pop-up才能继续执行。在更复杂的场景中这类问题可能需要引入额外的领域知识才能构建完整可通过的 Playwright 测试。如何开始前置条件本项目使用 Python 3.12.1但任何高于 3.10 的 Python 版本均可使用。本应用使用 Elastic Observability 9.1.2但任何高于 8.10 的版本均可使用也支持 Elastic Cloud Serverless。你还需要一个 OpenAI API key 来使用该应用的 LLM 能力并将其配置为环境变量可在 OpenAI 开发者门户的 API keys 页面获取。步骤 1安装依赖并克隆仓库为了在本地运行该 MCP server你需要安装以下依赖pip install fastmcp openai npm install -g playwright elastic/synthetics你将使用 FastMCP 2.0 来创建 MCP server并使用 OpenAI 根据你提供的 prompt 生成测试。此外你还需要克隆该仓库以获取该 server 的本地副本。步骤 2在 Warp 中设置配置文件在 Warp 中你需要进入侧边栏中的 MCP servers然后点击 “add”。之后系统会提示你添加一个 JSON 配置文件其结构类似如下。请确保填入你自己的 Kibana URL更新正确的路径并包含你自己的密钥和 token。{ elastic-synthetics: { command: python, args: [elastic_synthetics_server.py], env: { PYTHONPATH: ., ELASTIC_KIBANA_URL: https://your-kibana-url.elastic-cloud.com, ELASTIC_API_KEY: your-api-key-here, ELASTIC_PROJECT_ID: mcp-synthetics-demo, ELASTIC_SPACE: default, ELASTIC_AUTO_PUSH: true, ELASTIC_USE_JAVASCRIPT: false, ELASTIC_INSTALL_DEPENDENCIES: true, OPENAI_API_KEY: sk-your-openai-key, LLM_MODEL: gpt-4o }, working_directory: /path/to/your/file, start_on_launch: true } }步骤 3提问或直接调用工具完成本地配置后你需要切换到 agent mode并选择你希望使用的 LLM。本篇博客选择 Gemini-Pro-2.5 的原因是它能提供更直接的回答而其他 LLM 往往会返回非常冗长的响应。要开始使用 MCP 工具你可以从 MCP server 发起一个请求其中包含测试名称、URL、prompt 以及 schedule。你也可以直接调用llm_create_and_deploy_test_from_prompt()程序会提示你输入相关的详细信息在 Kibana 中如果你点击 Applications并在 Synthetics 下选择 Monitors你应该可以看到你的监控任务列表。你也可以在 MCP 工具的响应中找到指向该监控的链接。内部发生了什么这个代码示例主要由三个函数组成它们是 MCP tools你可以从 MCP client 中调用包括 diagnose_warp_mcp_config、create_and_deploy_browser_test 和 llm_create_and_deploy_test_from_prompt。调试环境问题在构建该应用时环境变量加载过程中出现了多个问题因此需要创建一个 MCP 工具用于在出现错误时进行诊断调用。工具 diagnose_warp_mcp_config 通过 mcp.tool() 装饰器启动这使它可以被调用并显示在可用工具列表中。该工具用于排查 Elastic 相关环境变量的配置问题。首先它会加载环境变量并检查 Elastic 相关变量然后进行安全脱敏处理避免暴露敏感信息例如 API keys只显示前 8 个字符后面用 “...” 替代。该工具还会检查是否具备最基本的必要凭证Kibana URL 和 API Key以继续部署并输出一份报告提示用户需要修复的配置问题。mcp.tool() def diagnose_warp_mcp_config() - Dict[str, Any]: Diagnose Warp MCP environment configuration for Elastic Synthetics try: env_vars load_env_from_warp_mcp() # Check for required variables kibana_url env_vars.get(ELASTIC_KIBANA_URL) or env_vars.get(KIBANA_URL) api_key env_vars.get(ELASTIC_API_KEY) or env_vars.get(API_KEY) project_id env_vars.get(ELASTIC_PROJECT_ID) or env_vars.get(PROJECT_ID) space env_vars.get(ELASTIC_SPACE) or env_vars.get(SPACE, default) # Mask sensitive values for display masked_vars {} for key, value in env_vars.items(): if API_KEY in key or TOKEN in key: masked_vars[key] f{value[:8]}... if value and len(value) 8 else *** else: masked_vars[key] value deployment_ready bool(kibana_url and api_key) return safe_json_response({ status: success, environment_variables: masked_vars, required_check: { kibana_url: bool(kibana_url), api_key: bool(api_key), project_id: bool(project_id), space: bool(space) }, deployment_ready: deployment_ready, recommendations: [ Environment variables detected if env_vars else No environment variables found, Kibana URL configured if kibana_url else Missing ELASTIC_KIBANA_URL or KIBANA_URL, API Key configured if api_key else Missing ELASTIC_API_KEY or API_KEY, Ready for deployment if deployment_ready else Missing required credentials ] }) except Exception as e: return safe_json_response({ status: error, error: str(e), error_type: type(e).__name__ })基于模板创建合成测试在开发这个基于 prompt 生成测试的方案过程中过程并不总是顺利的。早期版本遇到了准确性问题、幻觉问题以及循环生成等情况。为了解决这些问题一个合理的下一步是先回到 “模板化测试”用来验证整个系统的基础机制例如测试是否可以成功运行并正确部署到 Elastic。该方案实现了自动化生成合成浏览器测试的完整流程定期检查网站是否正常运行并将测试部署到 Elastic Observability Synthetics。与 diagnose_warp_mcp_config 类似MCP 工具 create_and_deploy_browser_test 同样使用 mcp.tool() 装饰器并检查环境变量是否正确加载。随后它会生成一个基于模板的 TypeScript 测试文件并根据目标网站特性动态生成测试步骤包括访问网站、验证页面标题是否存在、检查页面加载性能、截图、验证页面内容可见性等最后将测试保存到 synthetic_tests 目录中。最终它封装 Elastic CLI 工具 elastic/synthetics将测试推送到 Kibana同时允许配置测试运行的地理位置、执行频率以及项目和 workspace 设置。完整代码可以在这里查看。基于 prompt 创建合成测试虽然基于模板生成浏览器测试是一个良好的起点但它显得较为固定和“模板化”。不过它为构建基于 LLM 的功能提供了一个很好的结构基础。MCP 工具 llm_create_and_deploy_test_from_prompt 首先会确保基础参数如 locations、schedule 和目录已正确配置。同时它会分析目标网站以提供给 AI 更丰富的上下文并初始化 OpenAI client 和模型这里使用 GPT-4o。在完成 LLM 初始化后它会将自然语言请求转换为 Playwright 测试代码并对 AI 生成的代码进行清理和校验以防止注入攻击或语法错误。它借鉴了模板化方法将 AI 生成的步骤封装在一个可靠的测试框架中。最后它以与前一个工具相同的方式将测试部署到 Elastic。该工具的完整代码可以在这里查看。结论与下一步Elastic Observability 中的合成监控可以轻松测试完整用户旅程帮助保持网站稳定性并与 Playwright 集成实现简单配置即可运行。这样的方案只是 MCP 实现的起点它可以自动生成 Playwright 测试并在未来扩展到 heartbeat monitor、Playwright MCP server 集成甚至可以尝试使用 Claude for Chrome 来生成合成测试。更多内容可以在 Observability Labs 上查看 Synthetic Monitoring 相关文章。原文https://www.elastic.co/observability-labs/blog/tag/synthetics
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2568672.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!