Render OpenTelemetry Metrics Reference

Look up supported metrics and their properties.

After you enable metrics streaming for your workspace, Render streams service metrics that pertain to the following categories:

All metrics use OpenTelemetry JSON format. The first component of each metric's name is render. (e.g., render.service.memory.usage).

Some observability providers transform metric names to match their conventions.

For example, Grafana converts the metric render.service.memory.usage to render_service_memory_usage_bytes.

After you set up your metrics stream, inspect incoming data in your provider's dashboard to verify how it formats Render metrics.

See names, descriptions, and included properties for each reported metric below.

Universal properties

All reported metrics include the following properties:

PropertyDescription
service.name

The name of the service (e.g., my-service).

Grafana displays this property as job.

service.id

The ID of the service (e.g., srv-abc123).

service.instance.id

For most metrics, this is the ID of the metric's associated service instance (e.g., srv-abc123-def456). This is not the case for HTTP request metrics.

Everything before the final hyphen is the service ID (srv-abc123), and the final component (def456) uniquely identifies the instance.

This value enables you to segment metrics by individual instances of a scaled service, and to identify when a service's instances are cycled as part of a redeploy.

The following properties are also universal but optional:

PropertyDescription
service.project

The name of the service's associated project, if it belongs to one (otherwise this property is omitted).

service.environment

The name of the service's associated environment, if it belongs to one (otherwise this property is omitted).

CPU

These metrics apply to all compute instances and datastores.

render.service.cpu.limit

The maximum amount of CPU available to a particular service instance (as determined by its instance type).

Includes universal properties only.

render.service.cpu.time

The cumulative amount of CPU time used by a particular service instance, in seconds.

To visualize changes to CPU load over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

Memory

These metrics apply to all compute instances and datastores.

render.service.memory.limit

The maximum amount of memory available to a particular service instance (as determined by its instance type), in bytes.

Includes universal properties only.

render.service.memory.usage

The amount of memory that a particular service instance is currently using, in bytes.

Includes universal properties only.

render.service.memory.rss

The amount of anonymous and swap cache memory that a particular service instance is currently using, in bytes.

Includes universal properties only.

render.service.memory.cache

The amount of page cache memory that a particular service instance is currently using, in bytes.

Includes universal properties only.

Network

These metrics apply to all compute instances and datastores.

render.service.network.transmit.bytes

The cumulative number of bytes transmitted by a particular service instance to any destination, including both traffic and public internet traffic.

To visualize changes to network traffic over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

render.service.network.receive.bytes

The cumulative number of bytes received by a particular service instance from any source, including both traffic and public internet traffic.

To visualize changes to network traffic over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

HTTP requests

These metrics apply only to web services.

HTTP request metrics are not reported per instance.

Render aggregates these metrics across all instances of a given web service. For these metrics, the value of service.instance.id matches that of service.id.

render.service.http.requests.total

The cumulative number of HTTP requests that a given service has received across all instances, segmented by the properties below.

To visualize changes to request load over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
host

The destination domain for incoming requests. This can be your service's onrender.com domain or any custom domain you've added.

status_code

The HTTP status code returned by the service (200, 404, and so on).

render.service.http.requests.latency

Provides a particular web service's p50, p95, or p99 response time, in seconds, segmented by the properties below.

Includes universal properties, along with the following:

PropertyDescription
quantile

Indicates the percentile of the provided latency value. One of the following:

  • 0.50 (p50)
  • 0.95 (p95)
  • 0.99 (p99)
host

The destination domain for incoming requests. This can be your service's onrender.com domain or any custom domain you've added.

status_code

The HTTP status code returned by the service (200, 404, and so on).

Disk usage

Each of these metrics applies to one or more of Render Postgres, Render Key Value, and persistent disks.

render.service.disk.capacity

The total capacity of a service's persistent storage, in bytes.

Applies to Render Postgres databases and persistent disks.

Includes universal properties only.

render.service.disk.usage

The amount of occupied persistent storage for a service, in bytes.

Applies to Render Postgres databases and persistent disks.

Includes universal properties only.

Disk I/O

The following metrics apply to Render Postgres and Render Key Value instances.

These cumulative metrics reset whenever the datastore's instance is restarted or replaced, such as during a database upgrade or when changing instance types.

render.service.disk.read.bytes

The cumulative number of bytes read from disk by a particular service instance.

To visualize changes to disk read activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

render.service.disk.read.count

The cumulative number of read operations performed on disk by a particular service instance.

To visualize changes to disk read activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

render.service.disk.write.bytes

The cumulative number of bytes written to disk by a particular service instance.

To visualize changes to disk write activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

render.service.disk.write.count

The cumulative number of write operations performed on disk by a particular service instance.

To visualize changes to disk write activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

Render Postgres

These metrics are reported only for Render Postgres databases.

Connections

Direct connections

render.postgres.connections

The number of active connections to a particular PostgreSQL database within a Render Postgres instance.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd). This value is helpful if your Render Postgres instance hosts multiple databases.

This value usually does not match the value of service.name.

render.postgres.connection.limit

The maximum number of concurrent connections supported by a particular Render Postgres instance (as determined by its instance type).

Includes universal properties only.

Connection pooling

Render only reports connection.pool metrics for Render Postgres instances that enable integrated connection pooling.

In the following metrics:

  • Client connections are between clients and the connection pool.
  • Server connections are between the connection pool and the Render Postgres database.
render.postgres.connection.pool.client.active

The number of client connections that either have an assigned server connection or are idle.

Because this value includes idle clients, it often exceeds render.postgres.connection.pool.server.active.

Includes universal properties only.

render.postgres.connection.pool.client.max_wait

The current wait time of the longest-waiting client connection, in seconds. This value is 0 when no clients are waiting.

Includes universal properties only.

render.postgres.connection.pool.client.waiting

The number of client connections that have sent a query and are waiting for an available server connection. A value above 0 means clients are queuing because the pool is saturated.

Includes universal properties only.

render.postgres.connection.pool.server.active

The number of server connections currently assigned to a client connection.

Includes universal properties only.

render.postgres.connection.pool.server.idle

The number of server connections that are idle and available to serve queries.

Includes universal properties only.

render.postgres.connection.pool.server.limit

The maximum number of server connections the pool can open to the database. To calculate your pool's utilization, divide render.postgres.connection.pool.server.total by this value.

Includes universal properties only.

render.postgres.connection.pool.server.total

The connection pool's total number of server connections.

Includes universal properties only.

render.postgres.connection.pool.wait_time

The cumulative time that client connections have spent waiting for a server connection, in seconds.

To visualize changes to queuing activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

Database activity

Block reads

render.postgres.blocks.hit

The cumulative number of block reads served from shared buffers for a particular PostgreSQL database.

This metric corresponds to blks_hit in PostgreSQL's pg_stat_database view.

To visualize changes to buffer cache activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.blocks.read

The cumulative number of block reads that went to disk or the operating system's page cache for a particular PostgreSQL database. To calculate your buffer cache hit rate, compare this value with render.postgres.blocks.hit.

This metric corresponds to blks_read in PostgreSQL's pg_stat_database view.

To visualize changes to buffer cache activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

Table scans

render.postgres.table.scans

The cumulative number of sequential table scans performed across tables in a particular database in a Render Postgres instance.

This metric corresponds to the sum of seq_scan values in PostgreSQL's pg_stat_user_tables view.

To visualize changes to table scan activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

Tuples

render.postgres.tuples.inserted

The cumulative number of rows inserted into a particular PostgreSQL database.

This metric corresponds to tup_inserted in PostgreSQL's pg_stat_database view.

To visualize changes to write activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.tuples.updated

The cumulative number of rows updated in a particular PostgreSQL database.

This metric corresponds to tup_updated in PostgreSQL's pg_stat_database view.

To visualize changes to write activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.tuples.deleted

The cumulative number of rows deleted from a particular PostgreSQL database.

This metric corresponds to tup_deleted in PostgreSQL's pg_stat_database view.

To visualize changes to write activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.tuples.fetched

The cumulative number of live rows fetched by queries on a particular PostgreSQL database.

This metric corresponds to tup_fetched in PostgreSQL's pg_stat_database view.

To visualize changes to read activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

Database size

render.postgres.database.size

The size of a particular PostgreSQL database, in bytes.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.indexes.size

The total size of all indexes in a particular PostgreSQL database, in bytes.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

Lock contention

render.postgres.deadlocks

The cumulative number of deadlocks detected on a particular PostgreSQL database.

This metric corresponds to deadlocks in PostgreSQL's pg_stat_database view.

To visualize changes to deadlock activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.slow.lock.count

The total number of slow locks on a particular Render Postgres instance. A slow lock occurs when a query waits an extended period to acquire a database lock.

Includes universal properties only.

render.postgres.slow.lock.time

The cumulative wait time for slow locks on a particular Render Postgres instance, in seconds.

Includes universal properties only.

Replication and recovery

render.postgres.replication.lag

The delay between when a change occurs on the primary Render Postgres instance and when its read replica (if it has any) fully replicates that change, in milliseconds.

Includes universal properties, along with the following:

PropertyDescription
replication_host

The hostname or identifier of the read replica.

render.postgres.replication.apply.lag

The delay between when a transaction commits on the primary Render Postgres instance and when its read replica (if it has any) applies those changes, in milliseconds.

Includes universal properties, along with the following:

PropertyDescription
replication_host

The hostname or identifier of the read replica.

render.postgres.recovery.conflicts

The cumulative number of queries canceled by recovery conflicts on a particular PostgreSQL database. Only read replicas increment this value.

This metric corresponds to conflicts in PostgreSQL's pg_stat_database view.

To visualize changes to conflict activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

Temporary files

render.postgres.temp.bytes

The cumulative number of bytes written to temporary files by a particular PostgreSQL database. Queries write temporary files when operations like sorts and hashes exceed available working memory (work_mem).

This metric corresponds to temp_bytes in PostgreSQL's pg_stat_database view.

To visualize changes to temporary file activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.temp.files

The cumulative number of temporary files written by a particular PostgreSQL database. Sustained growth indicates that queries are spilling to disk.

This metric corresponds to temp_files in PostgreSQL's pg_stat_database view.

To visualize changes to temporary file activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

Transactions

render.postgres.transaction.exhaustion

The percentage of available transaction IDs used by a particular PostgreSQL database. PostgreSQL databases have a maximum of approximately 2.1 billion transaction IDs before wraparound occurs.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.transaction.volume

The cumulative number of transactions (i.e., commits and rollbacks) on a particular Render Postgres instance.

To visualize changes to transaction activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

render.postgres.transactions.committed

The cumulative number of transactions committed on a particular PostgreSQL database.

This metric corresponds to xact_commit in PostgreSQL's pg_stat_database view.

To visualize changes to transaction activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

render.postgres.transactions.rolled.back

The cumulative number of transactions rolled back on a particular PostgreSQL database. To calculate your rollback rate, compare this value with render.postgres.transactions.committed.

This metric corresponds to xact_rollback in PostgreSQL's pg_stat_database view.

To visualize changes to transaction activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties, along with the following:

PropertyDescription
database_name

The name of the PostgreSQL database created in the instance (e.g., my_db_abcd).

WAL archiving

render.postgres.archiver.failures

The cumulative number of failed WAL archive attempts on a particular Render Postgres instance.

This metric corresponds to failed_count in PostgreSQL's pg_stat_archiver view.

To visualize changes to archiver activity over time, apply a rate() function or similar in your observability provider.

Includes universal properties only.

Render Key Value

Render Key Value instances include disk I/O metrics, as well as the following metrics.

Connections

render.keyvalue.connections

The number of active connections to a particular Render Key Value instance.

Includes universal properties only.

render.keyvalue.connection.limit

The maximum number of concurrent connections supported for a particular Render Key Value instance (as determined by its instance type).

Includes universal properties only.

History of changes to reported metrics

DateChange

2026-08-19

Added the following Render Postgres metrics:

Block reads

Temporary files

Transactions

Tuples

Additional metrics

2026-08-04

Added the following Render Postgres connection pool metrics:

2025-06-02

Added the following Render Postgres transaction metrics:

2025-05-13

Added the following Render Postgres metrics:

2025-04-30

Added the following Render Postgres metrics:

Added the following disk I/O metrics:

2025-04-17

Added the following datastore connection metrics:

Added the following memory metrics:

Added the following networking metrics:

2025-03-11

Added the following initial set of metrics: