关于 cx-infra
cx-infra 是用于查询基础设施资源的只读命令行技能,可查看资源健康状况和配置历史,并支持资源发现、按时间获取原始数据及字段级配置比较。
主要功能
- 01发现资源类型和筛选值
- 02列出资源及其健康策略
- 03查看资源每日健康历史
- 04获取历史原始资源数据
- 05查找配置变更并比较字段
适用场景
- 01查找符合健康状态或属性条件的资源
- 02查看资源过往健康状况
- 03比较资源在不同时间的配置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ coralogix/ cx-cli --skill cx-infra安装后在 Claude Code 中输入/cx-infra确认已加载。
详细介绍
基础设施资源
所有命令都位于 cx infra resources 下,且均为只读。运行
cx infra resources <command> --help 查看标志。
“此团队未启用基础设施监控”表示团队没有基础设施数据。请停止并说明这一点。不要重试或更改筛选条件。
以 warning: ... could not verify that infrastructure monitoring is enabled 开头的 stderr 行仅供参考:启用状态检查本身失败了,但命令仍已运行。
| 命令 | 回答的问题 |
|---|---|
types | 存在哪些 (category, type) 对 |
filters | 可以按哪些属性筛选,以及这些属性接受哪些值 |
list | 哪些资源符合条件,以及它们的运行状况策略 |
health-history | 每个资源的每日运行状况,按时间从早到晚排列 |
raw-data | 当前或过去某个时间点的原始资源文档 |
config-changes | 在某个时间范围内,哪些资源更改了配置 |
config-diff | 具体更改了什么,逐字段列出 |
资源 ID
- 从
list的resource_id中获取,并保持原样加引号传入。 health-history、config-changes和config-diff每次调用最多接受 100 个 ID。请在一次调用中传入所有 ID,而不是每次调用一个。超过 100 个时,CLI 会拒绝执行。请分批处理。- 一个 ID 只属于一个团队,因此 ID 命令不允许传入多个
-p。只有types、filters和list会跨配置文件分发查询。对于多配置文件的list,请使用行中的profile来选择要查询的配置文件。 - 这些 ID 仅在此技能范围内有意义。若要访问其他技能,请使用资源的
name或其Service值。
查找资源
- 先运行
filters。不同类型的属性名称和值各不相同,因此不要猜测。 每个属性会列出:kind(string表示自由文本,status表示固定选项集)、values(接受的值)和wildcard(是否支持*)。 - 使用筛选条件运行
list:- 每个
--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)。 - 逗号可为一个属性指定多个值。在
--match-any中,匹配其中任意一个即可。在--match-all中,必须全部匹配,因此仅在使用通配符时才有意义:--match-all 'Name=*alert*,*processing*'。 - 每个属性只能在一个标志中指定一次。重复指定会被拒绝。
--category和--type是普通筛选条件,不是必需条件,也不是属性(不能使用--match-all Category=...)。必须至少指定一个筛选或范围标志。- 精确值区分大小写(
OS=linux,而不是OS=Linux)。通配符不区分大小写。请将通配符加引号,避免 shell 处理*。 --name-filter和--scope(service、environment、team)是旧版标志。它们需要同时指定--category和--type,且不能与--match-*混用。--match-all 'Name=*web*'的作用与--name-filter web相同。
- 每个
- 返回零行也是有效结果。不要重试。若属性或值错误,命令会拒绝执行并列出可接受的选项。
list -o json 返回一个封装对象:{total_count, returned_count, resources}。
其他命令返回普通数组或对象。
- 每次返回一个窗口,默认返回第 0 到第 100 行(可使用
--start-row和--end-row指定,后者不包含在内)。继续翻页,直到start_row + returned_count < total_count不再成立。 - 窗口不能超出第 10,000 行。结果更多时,请缩小查询范围。
- 使用多个配置文件时,每个配置文件都根据自己的
total_count翻页(参见counts_by_profile)。
健康状况
list行包含health_policies: [{id, name, status}],其中status的值为healthy、critical或pending(尚未评估)。关键策略会说明资源为何处于关键状态。 无需额外调用。health-history返回[{resource_id, health_history: [{timestamp, status}]}], 其中status的值为Healthy、Critical或Unmonitored。两组状态的大小写不同。- 无法解析的 ID 和重复项会被丢弃。返回结果较短是正常的,stderr 会给出数量。 返回的 ID 会经过规范化,因此可能与发送的 ID 字符串不完全匹配。
- 基础设施健康状况不等同于 Service Catalog 健康状况。应结合遥测数据进行关联分析, 而不是将两者视为相同。
cx infra resources list --match-all Health=Critical -o json \
| jq '.resources[] | {name, failing: [.health_policies[] | select(.status == "critical") | .name]}'
cx infra resources health-history "1001234:host_id=i-abc" "1001234:host_id=i-def" -o json \
| jq '.[] | {resource_id, critical: [.health_history[] | select(.status == "Critical") | .timestamp]}'
原始数据
raw-data -o json 返回 {version_timestamp, raw_data}。
--timestamp(now-7d或 ISO-8601)会获取指定时间或之前最新的版本。version_timestamp会指明返回的是哪个版本,也可以将其传回--timestamp以再次获取该版本。raw_data: null表示没有文档。这不是错误。若有文档但version_timestamp: null,则表示该文档没有版本。
配置变更
分两步:先找出发生变更的资源,再查看具体变更内容。
cx infra resources config-changes --resource-id "1001234:host_id=i-abc" \
--resource-id "1001234:host_id=i-def" --from now-24h -o json
cx infra resources config-diff --resource-id "1001234:host_id=i-abc" --from now-24h -o json \
| jq '.[] | select(.outcome == "changed") | .changes[] | {field, before, after}'
config-changes仅列出发生变更的资源。结果为空表示没有变更。不要扩大时间范围后重试。- 每行对应一个资源和一个来源。一个资源有两个采集器时,可能会返回两行。
- 某些云和 Agent 类型会在每个采集周期都报告更新,因此即使没有变更,
config-changes也可能会将其标记出来。在告知用户发生变更之前,先用config-diff确认。 - 对于在
--from前 14 天内或时间范围内没有历史记录的资源,config-diff不会返回对应行。 查看changes之前,先读取outcome:
outcome | 含义 |
|---|---|
changed | 时间范围之前和范围内的版本不同 |
unchanged | 两者相同,或时间范围内没有发生任何变化 |
created | 资源首次出现在时间范围内 |
priorStateUnavailable | 资源发生了变更,但 --from 前 14 天内不存在任何版本。这不是失败。将 --from 调早,以获取更早的版本 |
comparisonUnavailable | 两个版本都存在,但其中一个无法读取 |
before和after是原始 JSON。null表示字段已添加或移除。新增或移除的子树会作为一个条目。- 若要查看单项变更,请缩小其前后的
--from和--to时间范围。
相关技能
使用资源名称或其 Service 值进行关联:
cx-telemetry-querying:cx search-fields "<name>" -s value可查找包含该名称的日志和 Span 字段。cx logs "filter $l.subsystemname == '<service>'"可获取其遥测数据。cx-alerts:cx alerts list --name "<name-or-service>"。cx-dashboards:cx dashboards search "<name-or-service> ..."。运行search-fields -s value后,使用cx dashboards query-search --field <field>查找使用该字段的查询。
评论
支持 Markdown