metrics

Query CPU, memory, network, and disk usage metrics for Railway services. Supports nine metric types including CPU usage, memory, network traffic (RX/TX), and disk usage across deployments and instances Query metrics for a single service or all services in an environment using optional groupBy parameters (by deployment, instance, region, or service) Requires environmentId from railway status --json ; serviceId is optional to retrieve metrics across all services Time-based queries with ISO 8601 date ranges, configurable sample rates, and averaging windows for smoothing data

INSTALLATION
npx skills add https://github.com/railwayapp/railway-skills --skill metrics
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

Service Metrics

Query resource usage metrics for Railway services.

When to Use

  • User asks "how much memory is my service using?"
  • User asks about CPU usage, network traffic, disk usage
  • User wants to debug performance issues
  • User asks "is my service healthy?" (combine with service skill)

Prerequisites

Get environmentId and serviceId from linked project:

railway status --json

Extract:

  • environment.id → environmentId
  • service.id → serviceId (optional - omit to get all services)

MetricMeasurement Values

Measurement

Description

CPU_USAGE

CPU usage (cores)

CPU_LIMIT

CPU limit (cores)

MEMORY_USAGE_GB

Memory usage in GB

MEMORY_LIMIT_GB

Memory limit in GB

NETWORK_RX_GB

Network received in GB

NETWORK_TX_GB

Network transmitted in GB

DISK_USAGE_GB

Disk usage in GB

EPHEMERAL_DISK_USAGE_GB

Ephemeral disk usage in GB

BACKUP_USAGE_GB

Backup usage in GB

MetricTag Values (for groupBy)

Tag

Description

DEPLOYMENT_ID

Group by deployment

DEPLOYMENT_INSTANCE_ID

Group by instance

REGION

Group by region

SERVICE_ID

Group by service

Query

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

    }

  }

}

Example: Last Hour CPU and Memory

Use heredoc to avoid shell escaping issues:

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

Example: All Services in Environment

Omit serviceId and use groupBy to get metrics for all services:

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

Time Parameters

Parameter

Description

startDate

Required. ISO 8601 format (e.g., 2024-01-01T00:00:00Z)

endDate

Optional. Defaults to now

sampleRateSeconds

Sample interval (e.g., 60 for 1-minute samples)

averagingWindowSeconds

Averaging window for smoothing

Tip: For last hour, calculate startDate as now - 1 hour in ISO format.

Output Interpretation

{

  "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 - timestamp in ISO format
  • value - metric value (cores for CPU, GB for memory/disk/network)

Composability

  • Get IDs: Use status skill or railway status --json
  • Check service health: Use service skill for deployment status
  • View logs: Use deployment skill if metrics show issues
  • Scale service: Use environment skill to adjust resources

Error Handling

Empty/Null Metrics

Services without active deployments return empty metrics arrays. When processing with jq, handle nulls:

# 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 &#x26;&#x26; echo "has metrics"

No Metrics Data

Service may be new or have no traffic. Check:

  • Service has active deployment (stopped services have no metrics)
  • Time range includes deployment period

Invalid Service/Environment ID

Verify IDs with railway status --json.

Permission Denied

User needs access to the project to query metrics.

BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card