railway-metrics について
Railway Service Metricsは、RailwayサービスのCPU、メモリ、ネットワーク、ディスク、バックアップの使用量を調べるスキルです。リソースの推移確認やパフォーマンス調査に役立ちます。
主な機能
- 01CPUとメモリ使用量の取得
- 02ネットワークとディスク指標の確認
- 03時間範囲による絞り込み
- 04サービス、デプロイ、インスタンス、リージョン別の集計
- 05空の指標結果への対応
活用シーン
- 01リソース使用量の急増調査
- 02サービスの通信量とディスク使用量の確認
- 03複数サービスの指標確認
- 04デプロイ情報を踏まえた性能調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill railway-metricsインストール後、Claude Code で/railway-metricsを入力して読み込まれたか確認します。
詳細
Railway サービスメトリクス
Railway サービスのリソース使用量メトリクスを照会します。
使用するタイミング
- ユーザーが「サービスはどれだけメモリを使っていますか?」と尋ねたとき
- ユーザーが CPU 使用率、ネットワークトラフィック、ディスク使用量について尋ねたとき
- ユーザーがパフォーマンスの問題をデバッグしたいとき
- ユーザーが「サービスは正常ですか?」と尋ねたとき(railway-service スキルと組み合わせる)
前提条件
リンクされたプロジェクトから environmentId と serviceId を取得します:
railway status --json
次の値を抽出します:
environment.id→ environmentIdservice.id→ serviceId(任意。省略するとすべてのサービスのメトリクスを取得します)
MetricMeasurement の値
| Measurement | 説明 |
|---|---|
| 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 | 説明 |
|---|---|
| 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
}
}
}
例: 直近 1 時間の CPU とメモリ
シェルのエスケープ問題を避けるため、ヒアドキュメントを使用します:
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"]}')
${CLAUDE_PLUGIN_ROOT}/skills/lib/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"]}')
${CLAUDE_PLUGIN_ROOT}/skills/lib/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 | 説明 |
|---|---|
| startDate | 必須。ISO 8601 形式(例: 2024-01-01T00:00:00Z) |
| endDate | 任意。デフォルトは現在時刻 |
| sampleRateSeconds | サンプリング間隔(例: 1 分サンプルの場合は 60) |
| averagingWindowSeconds | 平滑化のための平均化ウィンドウ |
ヒント: 直近 1 時間を指定する場合は、startDate を now - 1 hour を ISO 形式に変換した値として計算します。
出力の解釈
{
"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 の取得: railway-status スキルまたは
railway status --jsonを使用 - サービスの正常性確認: デプロイメントの状態については railway-service スキルを使用
- ログの確認: メトリクスに問題が見られる場合は railway-deployment スキルを使用
- サービスのスケール: リソースを調整するには railway-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 対応