在 Elastic 中使用 MCP 自动化用户旅程以进行合成监控

news2026/5/1 16:19:37
作者来自 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…