mcpField
C
cx-infra

cx-infra

github.com/coralogix云与 DevOps2152.8k 次安装今天更新
代码仓库

关于 cx-infra

cx-infra 是用于查询基础设施资源的只读命令行技能,可查看资源健康状况和配置历史,并支持资源发现、按时间获取原始数据及字段级配置比较。

主要功能

  1. 01发现资源类型和筛选值
  2. 02列出资源及其健康策略
  3. 03查看资源每日健康历史
  4. 04获取历史原始资源数据
  5. 05查找配置变更并比较字段

适用场景

  1. 01查找符合健康状态或属性条件的资源
  2. 02查看资源过往健康状况
  3. 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 值。

查找资源

  1. 先运行 filters。不同类型的属性名称和值各不相同,因此不要猜测。 每个属性会列出:kind(string 表示自由文本,status 表示固定选项集)、 values(接受的值)和 wildcard(是否支持 *)。
  2. 使用筛选条件运行 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 相同。
  3. 返回零行也是有效结果。不要重试。若属性或值错误,命令会拒绝执行并列出可接受的选项。

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