自动化与脚本
在 Coralogix 中查询基础设施资源…
已配置 Coralogix `cx` CLI 时,查询、过滤和检查基础设施资源、健康历史与原始数据。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Coralogix 中查询基础设施资特定
解决思路
- 用 `cx infra resources types` 列出可用资源类型(category/type 对)。
- 用 `cx infra resources list` 列出资源,并用任意可过滤属性缩小范围;可选参数包括 `--match-all NAME=VALUE`、`--match-any NAME=VALUE`、`--category`、`--type`、`--start-row`、`--end-row`。
- 用 `cx infra resources filters` 列出资源可过滤属性及其接受值;可用 `--category`、`--type` 限定。
- 用 `cx infra resources health-history <resource-id>` 获取一个资源的每日健康样本,按从旧到新排列。
- 用 `cx infra resources raw-data <resource-id>` 获取资源原始 JSON 文档。
- 所有命令只读,并支持 `-o json` / `-o toon` 结构化输出;用 `-o json` 配合 `jq` 过滤,用 `-o toon` 在 agent 上下文中节省 token。
- 多 profile fan-out 仅适用于 `types`、`filters`、`list`;重复 `-p <profile>` 可跨账号比较 fleet。`health-history` 和 `raw-data` 接收 resource id,作用域属于单个 team,因此拒绝多个 `-p`;需要按 profile 分别运行。
- 过滤组合规则:每个 `--match-all` 都必须匹配;至少一个 `--match-any` 必须匹配;两组之间用 AND 组合。例如 `--match-all OS=linux --match-any Health=Critical --match-any Region=eu-west-1` 表示 `OS=linux AND (Health=Critical OR Region=eu-west-1)`。
- 同一属性用逗号列多个值,具体含义由 flag 决定:在 `--match-any` 中是任选其一,如 `--match-any Region=eu-west-1,us-east-2`;在 `--match-all` 中每个都必须匹配,用于同时缩小多个子串,如 `--match-all 'Name=*alert*,*processing*'` 查找同时包含两者的名称。
- 若某属性携带单值而你想匹配多个候选项中的任意一个,用 `--match-any`;不要用 `--match-all` 表达“任一值”。
- 一个属性只能属于一个 flag;在同一个 flag 内重复该属性,或在两个 flag 中都写它,会被拒绝;应在逗号后列出该属性的多个值。
- 除至少一个缩小输入外没有必需参数;`--category` 和 `--type` 是普通过滤器,不是前置条件,因此单独 `--match-all Health=Critical` 可工作。请求若未命名 `--match-all`、`--match-any`、`--category` 或 `--type`,会被拒绝。
- `Category` 和 `Type` 不是可过滤属性;它们选择请求覆盖哪些资源类型,有自己的 flags,并且从不出现在 `filters` 输出中。因此不要写 `--match-all Category=Hosts`,应写 `--category Hosts`。
- 精确值区分大小写:`OS=linux` 会匹配,`OS=Linux` 返回空;通配符值不区分大小写:`Name=*checkout*` 与 `Name=*Checkout*` 是同一查询。`filters` 只对固定集合列出值;自由文本要么从某行的 `columns` 取拼写,要么用通配符。`status` 值无论精确还是通配都大小写不敏感。
- 0 行是答案而不是失败;一个有效但未填充的属性匹配不到任何内容,不要重试或改写查询。拼错属性或使用超出集合的值会被直接拒绝,并提示可接受值。
- 解读 `filters` 时看每属性的三项:`kind` 表示值的样子——`string` 是自由文本,`status` 是固定集合,`number`、`bool`、`date` 各表示自身;`values` 列出固定集合的接受值,按 `filters` 报告的拼写传其中一个;`wildcard` 表示是否接受值中的 `*`,只有 `string` 属性接受,且 `*` 可匹配值中任意位置,例如 `--match-all 'Name=*checkout*'`,要加引号,否则 shell 会展开 `*`。
- `--name-filter` 和 `--scope` 是遗留 flags,二者都要求 `--category` 和 `--type`,且不能与 `--match-all` 或 `--match-any` 组合。用 `--scope` 按 `service`、`environment` 或 `team` 缩小;其他情况用过滤 flags——`--match-all 'Name=*web*'` 与 `--name-filter web` 是同一查询。
- 分页用 `--start-row` / `--end-row` 定义行窗口(`--end-row` 是排他的);默认返回前 100 行;只省略 `--end-row` 时从 `--start-row` 起返回 100 行。按窗口翻页,例如 0-100、100-200,……。`list` 不会自动翻页——fleet 可能达到数十万资源,因此它只返回一个窗口并报告总数。
- 行窗口不能越过第 10,000 行:API 拒绝任何 `start-row + rows` 超过 10,000 的请求,因此即使 `total_count` 报告真实大小,也无法枚举超过 10,000 的 fleet。应缩小直到结果能放下——增加 `--match-all` 属性或 `--type`——然后在每个子集内翻页,而不是试图遍历整个列表。
- `list` 把行包在 envelope 中(`total_count`、`returned_count`、`resources`);其他子命令返回裸数组。`total_count` 是 fleet-wide 匹配数,独立于窗口。推理行之前先检查它:当 `start_row + returned_count < total_count` 时继续翻页;若它超过你能翻页到的范围,缩小查询,而不是相信部分答案。
- resource ID 必须按 `list` 返回的原样传递,并加引号——它们包含 `:` 和 `=`;CLI 会替你做百分号编码。
- 检查流程第 1 步:发现可过滤内容——属性名及其接受值按资源类型动态变化,所以绝不要猜。省略两个 flags 可获得所有类型的并集:`cx infra resources filters -o json`。
- 检查流程第 1 步补充:当需要 `(category, type)` 对而不是属性时,用 `cx infra resources types -o json` 列出它们。
- 检查流程第 2 步:用 `filters` 提供的任意属性缩小并列出资源,例如 `cx infra resources list --category Hosts --type EC2_Instances --match-all Health=Critical -o json`。
- 检查流程第 3 步:用第 2 步得到的 `resource_id` 检查单个资源,例如 `cx infra resources health-history "1001234:host_id=i-abc123" -o json`;状态为 `Healthy`、`Critical` 或 `Unmonitored`,每天一个样本,按从旧到新排列。
- 检查流程第 3 步替代:当你需要源特定细节而不是健康时,用 `cx infra resources raw-data "1001234:host_id=i-abc123" -o json`,它是第 3 步的替代而非后续步骤。
- 示例:查一个 region 中的不健康主机——先 `cx infra resources filters --category Hosts -o json | jq '.[] | select(.name == "Health")'`,再 `cx infra resources list --category Hosts --match-all Health=Critical --match-all Region=eu-west-1 -o json | jq '.resources[] | {name, type}'`。
- 示例:查名称包含某子串的所有资源——`cx infra resources list --match-all 'Name=*checkout*' -o json | jq '.resources[] | {name, category, type}'`。
- 示例:按两个属性之一 OR、任意资源类型——`cx infra resources list --match-any Name=coredns --match-any Namespace=kube-system -o json | jq '.resources[] | {name, category, type}'`;同一属性的两个值用逗号形式,而不是第二个 flag:`cx infra resources list --match-any Namespace=kube-system,observability -o json`;同样的逗号在 `--match-all` 中要求所有值:`cx infra resources list --match-all 'Name=*alert*,*processing*' -o json`。
- 示例:只取 ids 和 names——`cx infra resources list --category Hosts --type EC2_Instances -o json | jq '[.resources[] | {resource_id, name}]'`。
- 示例:检查 fleet 大小以及一个窗口是否覆盖它——`cx infra resources list --category Hosts --type EC2_Instances -o json | jq '{total_count, returned_count}'`;若还有下一窗口,用 `--start-row 100 --end-row 200` 再查。
- 示例:查找资源何时变为 critical——`cx infra resources health-history "1001234:host_id=i-abc123" -o json | jq '[.[] | select(.status == "Critical")]'`。
- 示例:读取原始资源文档——`cx infra resources raw-data "1001234:host_id=i-abc123" -o json`。
- 先发现再过滤:绝不要猜属性名或 status 值;从 `cx infra resources filters` 开始,它同时列出两者。
- 引号包裹 resource IDs 并原样传递:它们内嵌 `:`、`|` 和 `=`;CLI 处理 URL 编码。
- 缺失 raw document 不是错误:`raw-data` 退出码为 0,并在 stdout 发出空结果——`json` 下是 `[]`,`agents` 下是 `[0]:`,`text` 下是 `No raw data found.`;只有 note `no raw data for this resource` 去 stderr。把 stdout 的空结果解析为干净缺失的文档,而不是失败——也不要期望 stdout 为空。
- 用 `-o json` 配合 `jq` 做过滤;在 agent 上下文中用 `-o toon` 获得 token 高效输出。
- 行窗口按 profile 应用:多 profile `list` 会增加 `counts_by_profile` 分解,因此每个 profile 要按自己的 `total_count` 翻页,而不是按聚合总数。
- resource id 从不跨 profile:它内嵌 team id(`1001234:host_id=…`),所以一个账号的 id 无法在另一个账号解析。多 profile `list` 发现值得检查的东西时,记录其 `profile` 字段,并对该单个 profile 查询它的 health 或 raw data。
- Infra health 是独立概念:`Healthy`/`Critical`/`Unmonitored` 由 infrastructure 域计算,不等同于 Service Catalog health;应把它们与 telemetry signals 关联,不要视为可互换。
- `resource_id` 不离开本技能:只把它传给 `health-history` 和 `raw-data`。对其他所有命令,改用资源 `name` 或 `Service` 属性值做 pivot。
- 桥接到相关技能时用资源 `name` 或 `Service` 属性值,绝不用 resource id(只有本技能理解它)。对 `cx-telemetry-querying`:用 `cx search-fields "<name>" -s value` 发现哪些 log/span 字段包含资源名;用 `cx logs "filter $l.subsystemname == '<service>'"` 查询服务遥测;把 `Critical` 健康日与错误日志或 CPU 指标关联。
- 对 `cx-alerts`:用 `cx alerts list --name "<name-or-service>"` 按子串查找匹配资源或其服务的告警定义。
- 对 `cx-dashboards`:用 `cx dashboards search "<name-or-service> ..."` 和 `cx dashboards query-search --description "..."` 语义查找仪表板;配合 `search-fields -s value` 再用 `query-search --field` 查询包含资源名的确切字段。
适用边界 · 注意事项
- 没有 Coralogix 环境、未配置 `cx` CLI 或无权访问 Coralogix 基础设施资源时不要使用。
- 不适用于直接用 resource_id 跨 profile/team 解析资源,也不适用于把 Infra health 当作 Service Catalog health。
- 当 fleet 超过 10,000 且未先缩小查询时,不要试图完整枚举所有资源。