Elasticsearch轻量监控无法使用params参数的问题求助
问题描述
轻量监控配置(Heartbeat 格式)
heartbeat.monitors: - type: http name: "XXXXX" id: "XXXX" enabled: true urls: ["${my_url}"]
synthetics.config.ts 配置
export default (env) => { const config: SyntheticsConfig = { params: { my_url: "https://test.com/api/test", }, playwrightOptions: { ignoreHTTPSErrors: false, }, monitor: { schedule: 10, locations: [], privateLocations: ["dev"], }, project: { id: "monitoring", url: "https://kibana.net", space: "myspace", }, } if (env !== "customenv") { } return config }
推送命令
NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_ENV="customenv" SYNTHETICS_API_KEY=ccccc== npx @elastic/synthetics push
错误提示
Error > Invalid Heartbeat configuration: monitor(XXXX) `http` project monitors must specify a valid URL for field `monitor.urls` in version `8.15.0`. Your monitor definition with ID `XXXX` was not saved.
解决方案
错误核心是监控定义中的 ${my_url} 变量未被正确替换为实际URL,导致Heartbeat识别到无效的URL值,可通过以下方式解决:
方法1:通过环境变量直接传递URL
修改监控配置的变量名为环境变量格式:
heartbeat.monitors: - type: http name: "XXXXX" id: "XXXX" enabled: true urls: ["${MY_URL}"]
在推送命令中注入该环境变量:
NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_ENV="customenv" MY_URL="https://test.com/api/test" SYNTHETICS_API_KEY=ccccc== npx @elastic/synthetics push
方法2:确保customenv环境下params生效
显式处理customenv环境的参数赋值,避免逻辑歧义:
export default (env) => { const config: SyntheticsConfig = { params: {}, playwrightOptions: { ignoreHTTPSErrors: false, }, monitor: { schedule: 10, locations: [], privateLocations: ["dev"], }, project: { id: "monitoring", url: "https://kibana.net", space: "myspace", }, } // 为customenv环境单独设置参数 if (env === "customenv") { config.params.my_url = "https://test.com/api/test"; } return config }
方法3:直接写入静态URL
若无需动态切换地址,可直接将URL写死在监控配置中:
heartbeat.monitors: - type: http name: "XXXXX" id: "XXXX" enabled: true urls: ["https://test.com/api/test"]
内容的提问来源于stack exchange,提问作者Fabry
相关产品推荐
相关产品推荐

