自动化与脚本
用 Composio CLI 查询和过滤 Datadog…
在终端中以结构化 JSON 方式搜索、过滤、聚合 Datadog 日志,用于排障、发布关联和每日摘要。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 Composio CLI 查询和过滤特定
解决思路
- 安装 Composio CLI:运行 `curl -fsSL https://composio.dev/install | bash`。
- 登录 Composio:运行 `composio login`。
- 关联 Datadog:运行 `composio link datadog`,按提示提供 site 以及 API/APP keys。
- 发现日志搜索工具:运行 `composio search "search logs" --toolkits datadog`。
- 发现日志聚合工具:运行 `composio search "aggregate logs" --toolkits datadog`。
- 列出 Datadog 工具:运行 `composio tools list datadog`。
- 使用前用 `--get-schema` 确认常用 slug:`DATADOG_SEARCH_LOGS`、`DATADOG_AGGREGATE_LOGS`、`DATADOG_LIST_ACTIVE_METRICS`、`DATADOG_GET_EVENT`。
- 查询最近 15 分钟单个服务的错误日志:运行 `composio execute DATADOG_SEARCH_LOGS -d '{"filter":{"query":"service:checkout status:error env:prod","from":"now-15m","to":"now"},"page":{"limit":100},"sort":"-timestamp"}'`。
- 按 endpoint 聚合错误数:运行 `composio execute DATADOG_AGGREGATE_LOGS -d '{"filter":{"query":"service:checkout status:error","from":"now-1h","to":"now"},"group_by":[{"facet":"@http.url_path","limit":20}],"compute":[{"aggregation":"count"}]}'`。
- 跨服务追踪单个请求:运行 `composio execute DATADOG_SEARCH_LOGS -d '{"filter":{"query":"@trace_id:7f3a2b1c env:prod","from":"now-1h","to":"now"},"sort":"timestamp"}'`。
- 保存可复用查询:先运行 `composio search "save log view" --toolkits datadog`,再运行 `composio execute DATADOG_CREATE_SAVED_VIEW -d '{"name":"checkout-errors-prod","query":"service:checkout status:error env:prod"}'`。
- 管道到本地分析:将 `composio execute DATADOG_SEARCH_LOGS -d '{"filter":{"query":"service:api status:error","from":"now-30m","to":"now"},"page":{"limit":500}}' | jq -r '.data[].attributes.message' | sort | uniq -c | sort -rn | head` 用于快速汇总。
- 创建多步工作流文件 `scripts/dd-incident.ts`:用 `const svc = process.argv[process.argv.indexOf("--service") + 1];` 获取服务名;用 `execute("DATADOG_SEARCH_LOGS", { filter: { query: `service:${svc} status:error`, from: "now-1h", to: "now" }, page: { limit: 200 }, sort: "-timestamp" })` 拉取错误样本;用 `execute("DATADOG_AGGREGATE_LOGS", { filter: { query: `service:${svc} status:error`, from: "now-1h", to: "now" }, group_by: [{ facet: "@http.url_path", limit: 10 }], compute: [{ aggregation: "count" }] })` 计算 top paths;最后 `console.log(JSON.stringify({ svc, sample: errors.data?.slice(0,5), topPaths }, null, 2));` 输出 JSON。
- 运行多步工作流:`composio run --file scripts/dd-incident.ts -- --service checkout`。
- 定时运行每日摘要:使用 cron 或 `composio dev listen` 运行工作流;执行 `composio run --file scripts/dd-incident.ts -- --service checkout | tee /tmp/digest.json`,再执行 `composio execute SLACK_SEND_MESSAGE -d "$(jq -n --slurpfile d /tmp/digest.json '{channel:"oncall", text: ($d[0] | tojson)}')"` 转发到 Slack。
- 空结果排查:确认 `env:` 和 `service:` 标签;Datadog 索引按区域划分,在 `composio link datadog` 时设置正确 site。
- `403 Forbidden` 排查:APP key 缺少 `logs_read`,重新生成带该 scope 的 key 并重新 link。
- 慢查询排查:缩小 `from/to`,添加 `facet` 过滤,或改用 `DATADOG_AGGREGATE_LOGS` 而不是拉取原始事件。
- 未知 facet 排查:运行 `composio search "list log facets" --toolkits datadog`。
- 完整 CLI 参考:`https://docs.composio.dev/docs/cli`。
适用边界 · 注意事项
- 未安装/未登录 Composio CLI,或未 `composio link datadog` 且无法提供 Datadog site 与 API/APP keys 时。
- Datadog APP key 没有 `logs_read` 权限且无法重新生成 scope 并重新 link 时。
- 只需要在 Datadog UI 中临时肉眼查看日志,或不允许把日志通过 CLI/Slack 转发到外部时。