关于 metrics
用于查询 Railway 服务资源指标的技能,可按时间范围查看 CPU、内存、网络、磁盘和备份用量,并按部署、实例、区域或服务分组。
主要功能
- 01查询 CPU 和资源用量
- 02设置指标时间范围与采样
- 03按服务或部署分组结果
- 04解读带时间戳的指标值
- 05处理空指标响应
适用场景
- 01排查内存或 CPU 用量过高
- 02查看网络与磁盘消耗
- 03比较不同服务或区域的指标
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ railwayapp/ railway-skills --skill metrics安装后在 Claude Code 中输入/metrics确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/environment-config.mdmonorepo.mdrailpack.mdvariables.mdscripts/railway-api.sh详细介绍
服务指标
查询 Railway 服务的资源使用指标。
适用场景
- 用户询问“我的服务用了多少内存?”
- 用户询问 CPU 使用情况、网络流量、磁盘使用情况
- 用户想要调试性能问题
- 用户询问“我的服务运行正常吗?”(结合
service技能)
前提条件
从关联的项目中获取 environmentId 和 serviceId:
railway status --json
提取:
environment.id→ environmentIdservice.id→ serviceId(可选——省略后可获取所有服务)
MetricMeasurement 值
| Measurement | Description |
|---|---|
| CPU_USAGE | CPU 使用量(核心数) |
| CPU_LIMIT | CPU 限制(核心数) |
| 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)
| Tag | Description |
|---|---|
| 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
时间参数
| Parameter | Description |
|---|---|
| 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