You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Datadog RUM事件提取脚本时遇无效游标错误求协助

问题:Datadog RUM事件提取脚本报错"input invalidation error(Field 'page' is invalid: invalid cursor)"

我编写了一段用于提取Datadog RUM事件日志的Shell脚本,代码如下:

cursor=$(echo $response | jq -r .meta.page.after)

data='{
"filter": {
"from": "now",
"to": "now-2d",
"query": "*"
},
"page": {
"cursor": "{{cursor}}",
"limit": 1000
}
}'
data=$(echo $data | sed "s/{{cursor}}/$cursor/")

response =$(curl -k POST "https://api.datadoghq.com/api/v2/rum/events/search" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: $DATADOG_API_KEY" \
-H "DD-APPLICATION-KEY: $DATADOG_APP_KEY" \
--data-raw "$data")

echo $response >> output

执行脚本时遇到错误:"input invalidation error(Field 'page' is invalid: invalid cursor)"


排查与解决方法

1. 修复变量赋值语法错误

脚本中response =$(curl ...)存在空格,这会导致response变量无法正确接收curl的返回结果,后续提取的cursor会是空值。修正为:

response=$(curl -k POST "https://api.datadoghq.com/api/v2/rum/events/search" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: $DATADOG_API_KEY" \
-H "DD-APPLICATION-KEY: $DATADOG_APP_KEY" \
--data-raw "$data")

2. 处理初始请求的cursor为空场景

第一次请求Datadog API时不需要传入cursor字段,只有当第一次请求返回了有效的cursor后,后续分页请求才需要携带该参数。可以通过判断cursor是否为空来动态生成请求体:

# 初始请求时cursor为空,构建不带page.cursor的请求体
if [ -z "$cursor" ]; then
  data='{
  "filter": {
  "from": "now",
  "to": "now-2d",
  "query": "*"
  },
  "page": {
  "limit": 1000
  }
  }'
else
  # 有有效cursor时,携带cursor参数
  data='{
  "filter": {
  "from": "now",
  "to": "now-2d",
  "query": "*"
  },
  "page": {
  "cursor": "'"$cursor"'",
  "limit": 1000
  }
  }'
fi

3. 验证cursor的有效性

提取cursor后,先检查是否为非空且有效的值(比如jq返回null时要处理):

# 提取cursor,若不存在则设为空字符串
cursor=$(echo "$response" | jq -r '.meta.page.after // empty')

完整修正后的脚本示例

# 初始化cursor为空
cursor=""

# 循环获取所有分页数据,直到cursor为空
while true; do
  # 动态构建请求体
  if [ -z "$cursor" ]; then
    data='{
    "filter": {
    "from": "now",
    "to": "now-2d",
    "query": "*"
    },
    "page": {
    "limit": 1000
    }
    }'
  else
    data='{
    "filter": {
    "from": "now",
    "to": "now-2d",
    "query": "*"
    },
    "page": {
    "cursor": "'"$cursor"'",
    "limit": 1000
    }
    }'
  fi

  # 发送请求
  response=$(curl -k POST "https://api.datadoghq.com/api/v2/rum/events/search" \
  -H "Content-Type: application/json" \
  -H "DD-API-KEY: $DATADOG_API_KEY" \
  -H "DD-APPLICATION-KEY: $DATADOG_APP_KEY" \
  --data-raw "$data")

  # 将结果写入文件
  echo "$response" >> output

  # 提取下一页cursor,若不存在则退出循环
  cursor=$(echo "$response" | jq -r '.meta.page.after // empty')
  if [ -z "$cursor" ]; then
    break
  fi
done

内容的提问来源于stack exchange,提问作者rose1110

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:52:31