mcpField
M
metrics

metrics

github.com/railwayapp云与 DevOps338794 次安装2 周前更新
代码仓库

关于 metrics

用于查询 Railway 服务资源指标的技能,可按时间范围查看 CPU、内存、网络、磁盘和备份用量,并按部署、实例、区域或服务分组。

主要功能

  1. 01查询 CPU 和资源用量
  2. 02设置指标时间范围与采样
  3. 03按服务或部署分组结果
  4. 04解读带时间戳的指标值
  5. 05处理空指标响应

适用场景

  1. 01排查内存或 CPU 用量过高
  2. 02查看网络与磁盘消耗
  3. 03比较不同服务或区域的指标

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/railwayapp/railway-skills --skill metrics

安装后在 Claude Code 中输入/metrics确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
environment-config.md
monorepo.md
railpack.md
variables.md
scripts/
railway-api.sh

详细介绍

服务指标

查询 Railway 服务的资源使用指标。

适用场景

  • 用户询问“我的服务用了多少内存?”
  • 用户询问 CPU 使用情况、网络流量、磁盘使用情况
  • 用户想要调试性能问题
  • 用户询问“我的服务运行正常吗?”(结合 service 技能)

前提条件

从关联的项目中获取 environmentId 和 serviceId:

railway status --json

提取:

  • environment.id → environmentId
  • service.id → serviceId(可选——省略后可获取所有服务)

MetricMeasurement 值

MeasurementDescription
CPU_USAGECPU 使用量(核心数)
CPU_LIMITCPU 限制(核心数)
MEMORY_USAGE_GB内存使用量(GB)
MEMORY_LIMIT_GB内存限制(GB)
NETWORK_RX_GB网络接收量(GB)
NETWORK_TX_GB网络发送量(GB)
DISK_USAGE_GB磁盘使用量(GB)
EPHEMERAL_DISK_USAGE_GB临时磁盘使用量(GB)
BACKUP_USAGE_GB备份使用量(GB)

MetricTag 值(用于 groupBy)

TagDescription
DEPLOYMENT_ID按部署分组
DEPLOYMENT_INSTANCE_ID按实例分组
REGION按区域分组
SERVICE_ID按服务分组

查询

query metrics(
  $environmentId: String!
  $serviceId: String
  $startDate: DateTime!
  $endDate: DateTime
  $sampleRateSeconds: Int
  $averagingWindowSeconds: Int
  $groupBy: [MetricTag!]
  $measurements: [MetricMeasurement!]!
) {
  metrics(
    environmentId: $environmentId
    serviceId: $serviceId
    startDate: $startDate
    endDate: $endDate
    sampleRateSeconds: $sampleRateSeconds
    averagingWindowSeconds: $averagingWindowSeconds
    groupBy: $groupBy
    measurements: $measurements
  ) {
    measurement
    tags {
      deploymentInstanceId
      deploymentId
      serviceId
      region
    }
    values {
      ts
      value
    }
  }
}

示例:过去一小时的 CPU 和内存

使用 heredoc 避免 shell 转义问题:

bash <<'SCRIPT'
START_DATE=$(date -u -v-1H +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -u -d "1 hour ago" +"%Y-%m-%dT%H:%M:%SZ")
ENV_ID="your-environment-id"
SERVICE_ID="your-service-id"

VARS=$(jq -n \
  --arg env "$ENV_ID" \
  --arg svc "$SERVICE_ID" \
  --arg start "$START_DATE" \
  '{environmentId: $env, serviceId: $svc, startDate: $start, measurements: ["CPU_USAGE", "MEMORY_USAGE_GB"]}')

scripts/railway-api.sh \
  'query metrics($environmentId: String!, $serviceId: String, $startDate: DateTime!, $measurements: [MetricMeasurement!]!) {
    metrics(environmentId: $environmentId, serviceId: $serviceId, startDate: $startDate, measurements: $measurements) {
      measurement
      tags { deploymentId region serviceId }
      values { ts value }
    }
  }' \
  "$VARS"
SCRIPT

示例:环境中的所有服务

省略 serviceId 并使用 groupBy 获取所有服务的指标:

bash <<'SCRIPT'
START_DATE=$(date -u -v-1H +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -u -d "1 hour ago" +"%Y-%m-%dT%H:%M:%SZ")
ENV_ID="your-environment-id"

VARS=$(jq -n \
  --arg env "$ENV_ID" \
  --arg start "$START_DATE" \
  '{environmentId: $env, startDate: $start, measurements: ["CPU_USAGE", "MEMORY_USAGE_GB"], groupBy: ["SERVICE_ID"]}')

scripts/railway-api.sh \
  'query metrics($environmentId: String!, $startDate: DateTime!, $measurements: [MetricMeasurement!]!, $groupBy: [MetricTag!]) {
    metrics(environmentId: $environmentId, startDate: $startDate, measurements: $measurements, groupBy: $groupBy) {
      measurement
      tags { serviceId region }
      values { ts value }
    }
  }' \
  "$VARS"
SCRIPT

时间参数

ParameterDescription
startDate必填。ISO 8601 格式(例如,2024-01-01T00:00:00Z)
endDate可选。默认为当前时间
sampleRateSeconds采样间隔(例如,60 表示每 1 分钟采样一次)
averagingWindowSeconds用于平滑数据的平均时间窗口

提示: 查询过去一小时的数据时,以 ISO 格式将 startDate 设为 now - 1 hour。

输出解读

{
  "data": {
    "metrics": [
      {
        "measurement": "CPU_USAGE",
        "tags": { "deploymentId": "...", "serviceId": "...", "region": "us-west1" },
        "values": [
          { "ts": "2024-01-01T00:00:00Z", "value": 0.25 },
          { "ts": "2024-01-01T00:01:00Z", "value": 0.30 }
        ]
      }
    ]
  }
}
  • ts - ISO 格式的时间戳
  • value - 指标值(CPU 为核心数,内存/磁盘/网络为 GB)

组合使用

  • 获取 ID:使用 status 技能或 railway status --json
  • 检查服务健康状况:使用 service 技能查看部署状态
  • 查看日志:如果指标显示存在问题,使用 deployment 技能
  • 扩展服务:使用 environment 技能调整资源

错误处理

指标为空或为 Null

没有活动部署的服务会返回空指标数组。使用 jq 处理时,请处理 null 值:

# Safe iteration - skip nulls
jq -r '.data.metrics[]? | select(.values != null and (.values | length) > 0) | ...'

# Check if metrics exist before processing
jq -e '.data.metrics | length > 0' response.json && echo "has metrics"
没有指标数据

服务可能是新建的,或没有流量。请检查:

  • 服务是否有活动部署(已停止的服务没有指标)
  • 时间范围是否包含部署时段
服务/环境 ID 无效

使用 railway status --json 验证 ID。

权限被拒绝

用户需要有权访问该项目才能查询指标。

评论

支持 Markdown