newrelic/synthetics-node-browser-runtimesynthetics-node-browser-runtime 是一个集成了 Node.js 环境和浏览器运行时的 Docker 镜像,专为合成监控(Synthetic Monitoring)场景设计。该镜像提供了执行自动化浏览器测试和模拟用户交互的完整运行环境,可用于监控 Web 应用性能、验证前端功能完整性以及执行定时自动化测试任务。
bashdocker run --rm synthetics-node-browser-runtime [测试脚本路径]
bashdocker run --rm -v $(pwd)/tests:/app/tests synthetics-node-browser-runtime /app/tests/monitor.js
| 环境变量 | 描述 | 默认值 |
|---|---|---|
BROWSER_TYPE | 指定使用的浏览器类型 (chrome/firefox/edge) | chrome |
HEADLESS_MODE | 是否启用无头模式 (true/false) | true |
PAGE_LOAD_TIMEOUT | 页面加载超时时间(毫秒) | 30000 |
SCREEN_RESOLUTION | 模拟屏幕分辨率 | 1280x720 |
USER_AGENT | 自定义User-Agent字符串 | 浏览器默认 |
PROXY_SERVER | 指定代理服务器地址 | 无 |
PERFORMANCE_LOGGING | 是否启用性能日志记录 | false |
bashdocker run --rm \ -e BROWSER_TYPE=firefox \ -e HEADLESS_MODE=false \ -e PAGE_LOAD_TIMEOUT=60000 \ -v $(pwd)/tests:/app/tests \ synthetics-node-browser-runtime /app/tests/performance-test.js
yamlversion: '3.8' services: synthetics-monitor: image: synthetics-node-browser-runtime environment: - BROWSER_TYPE=chrome - HEADLESS_MODE=true - PERFORMANCE_LOGGING=true volumes: - ./synthetic-tests:/app/tests - ./results:/app/results command: /app/tests/ecommerce-checkout.js restart: unless-stopped
javascript// simple-monitor.js const { browser } = require('synthetics-runtime'); async function runTest() { // 启动浏览器 const page = await browser.newPage(); try { // 设置视口大小 await page.setViewport({ width: 1280, height: 720 }); // 访问目标页面 await page.goto('[***] { waitUntil: 'networkidle0' }); // 记录页面加载时间 const loadTime = await page.evaluate(() => { return performance.timing.loadEventEnd - performance.timing.navigationStart; }); console.log(`页面加载时间: ${loadTime}ms`); // 截图 await page.screenshot({ path: '/app/results/screenshot.png' }); // 简单交互示例 await page.click('a[href="/about"]'); await page.waitForNavigation({ waitUntil: 'networkidle0' }); } finally { // 关闭浏览器 await browser.close(); } } // 执行测试 runTest().catch(console.error);
启用详细性能监控:
bashdocker run --rm \ -e PERFORMANCE_LOGGING=true \ -e OUTPUT_PERFORMANCE_DATA=/app/results/performance.json \ -v $(pwd)/results:/app/results \ synthetics-node-browser-runtime /app/tests/performance-monitor.js
结合 cron 实现定时监控:
bashdocker run --name synthetics-cron \ -v $(pwd)/tests:/app/tests \ -v $(pwd)/cron:/etc/cron.d \ synthetics-node-browser-runtime \ cron -f /etc/cron.d/monitor-cron
其中 monitor-cron 文件内容:
*/5 * * * * root /usr/local/bin/node /app/tests/monitor.js >> /var/log/synthetics.log 2>&1
yamlversion: '3.8' services: synthetics-monitor: image: synthetics-node-browser-runtime container_name: web-synthetics-monitor restart: always environment: - BROWSER_TYPE=chrome - HEADLESS_MODE=true - PAGE_LOAD_TIMEOUT=45000 - TARGET_URL=[***] volumes: - ./tests:/app/tests - ./results:/app/results - ./logs:/var/log/synthetics command: /app/tests/main-monitor.js networks: - monitoring-network networks: monitoring-network: driver: bridge
yamlapiVersion: batch/v1beta1 kind: CronJob metadata: name: synthetics-monitor spec: schedule: "*/10 * * * *" jobTemplate: spec: template: spec: containers: - name: synthetics-monitor image: synthetics-node-browser-runtime env: - name: BROWSER_TYPE value: "chrome" - name: HEADLESS_MODE value: "true" - name: TARGET_URL value: "[***]" volumeMounts: - name: test-scripts mountPath: /app/tests - name: results mountPath: /app/results volumes: - name: test-scripts configMap: name: synthetics-test-scripts - name: results persistentVolumeClaim: claimName: synthetics-results restartPolicy: OnFailure


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务