Preview
We're still working on this feature, but we'd love for you to try it out!
This feature is currently provided as part of a preview pursuant to our pre-release policies.
Get comprehensive insights into your Amazon RDS Oracle Database performance with database monitoring, query analysis, and system health metrics using the New Relic Distribution of OpenTelemetry (NRDOT) collector.
Guided installation
To install through the New Relic UI instead, go to one.newrelic.com > Integrations & Agents > Oracle (OpenTelemetry) . This page covers the CLI install path only.
Prerequisites
Before you begin, ensure you have the following:
- Valid New Relic license key
- Supported architecture: Linux with AMD64 and ARM64
- Network connectivity to New Relic OTLP endpoint
- Oracle Database
19cor later
Enroll to preview
This integration is available as part of the New Relic public preview program. Contact your Organization Manager to opt in from the Previews & Trials page.
Install NRDOT Collector
Select the appropriate installation distribution method for your Linux environment:
Configure database user
Create a monitoring user with necessary privileges for your RDS Oracle Database.
Log in to the root database as an administrator:
CREATE USER <USERNAME> IDENTIFIED BY "<USER_PASSWORD>";Grant
CONNECTprivileges to newly created user:GRANT CONNECT TO <USERNAME>;
Grant monitoring privileges for RDS database
Execute the following SQL statements to grant monitoring privileges. Replace <USERNAME_IN_UPPERCASE> with your username in uppercase:
EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SYSMETRIC', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$CON_SYSMETRIC', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SESSION', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SESSION_EVENT', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SYSSTAT', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$CON_SYSSTAT', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$OSSTAT', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SGAINFO', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SQL', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SQLSTATS', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$SQL_PLAN_STATISTICS_ALL', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$ROWCACHE', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$RESOURCE_LIMIT', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$LOCK', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$DATAFILE', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$PDBS', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_DATA_FILES', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_FREE_SPACE', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_RECYCLEBIN', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACE_USAGE_METRICS', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_PROCEDURES', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_OBJECTS', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('CDB_TABLESPACE_USAGE_METRICS', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('CDB_TABLESPACES', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);EXEC rdsadmin.rdsadmin_util.grant_sys_object('CDB_SERVICES', '<USERNAME_IN_UPPERCASE>', 'SELECT', false);GRANT CREATE SESSION TO <USERNAME_IN_UPPERCASE>;Configure NRDOT Collector
Configure the NRDOT Collector with your RDS-specific settings.
Create the configuration file. The filename must be
oracle-config.yaml.bash$sudo nano /etc/nrdot-collector/oracle-config.yamlAdd the configuration content below to the
oracle-config.yamlfile you created in the previous step.full configuration
This configuration focuses only on database monitoring without host infrastructure metrics. To enable full-feature monitoring, refer to the configuration reference.
oracle-config.yaml1receivers:2nroracledb/rds:3endpoint: mydb-instance.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com:15214username: newrelic5password: YOUR_PASSWORD6service: YOUR_SERVICE_NAME7collection_interval: 10s8events:9db.server.query_sample:10enabled: true11db.server.top_query:12enabled: true13db.server.session.wait_sample:14enabled: true1516top_query_collection:17max_query_sample_count: 100018top_query_count: 20019collection_interval: 60s20allowed_comment_keys:21- nr_service_guid2223query_sample_collection:24max_rows_per_query: 10025allowed_comment_keys:26- nr_service_guid2728session_wait_event_collection:29max_rows_per_query: 1003031# Metrics configuration - organized by category32metrics:33# === CPU & Performance Metrics ===34oracledb.cpu_time:35enabled: true36attributes:37- oracle.db.pdb3839# === Execution & Parse Metrics ===40oracledb.executions:41enabled: true42attributes:43- oracle.db.pdb44oracledb.parse_calls:45enabled: true46attributes:47- oracle.db.pdb48oracledb.hard_parses:49enabled: true50attributes:51- oracle.db.pdb5253# === I/O & Physical Read/Write Metrics ===54oracledb.logical_reads:55enabled: true56attributes:57- oracle.db.pdb58oracledb.physical_reads:59enabled: true60attributes:61- oracle.db.pdb62oracledb.physical_reads_direct:63enabled: true64attributes:65- oracle.db.pdb66oracledb.physical_writes:67enabled: true68attributes:69- oracle.db.pdb70oracledb.physical_writes_direct:71enabled: true72attributes:73- oracle.db.pdb74oracledb.physical_read_io_requests:75enabled: true76attributes:77- oracle.db.pdb78oracledb.physical_write_io_requests:79enabled: true80attributes:81- oracle.db.pdb8283# === New Physical I/O Metrics (detailed) ===84oracledb.physical_io.cache_writes:85enabled: true86attributes:87- oracle.db.pdb88oracledb.physical_io.requests:89enabled: true90attributes:91- disk.io.direction92- disk.io.block_size93- oracle.db.pdb94oracledb.physical_io.transferred:95enabled: true96attributes:97- disk.io.direction98- disk.io.type99- oracle.db.pdb100101# === Network I/O Metrics ===102oracledb.sqlnet.io.transferred:103enabled: true104attributes:105- network.io.direction106- destination.type107- oracle.db.pdb108109# === Buffer & Cache Metrics ===110oracledb.consistent_gets:111enabled: true112attributes:113- oracle.db.pdb114oracledb.db_block_gets:115enabled: true116attributes:117- oracle.db.pdb118oracledb.data_dictionary.hit_ratio:119enabled: true120121# === Memory Metrics ===122oracledb.pga_memory:123enabled: true124attributes:125- oracle.db.pdb126oracledb.sga.limit:127enabled: true128oracledb.sga.usage:129enabled: true130attributes:131- oracledb.sga.component.name132133oracledb.enqueue_deadlocks:134enabled: true135attributes:136- oracle.db.pdb137oracledb.exchange_deadlocks:138enabled: true139attributes:140- oracle.db.pdb141142# KEEP enabled: sessions.usage is sourced from v$session, not v$resource_limit.143oracledb.sessions.usage:144enabled: true145attributes:146- session_type147- session_status148- oracle.db.pdb149oracledb.logons:150enabled: true151attributes:152- oracle.db.pdb153154oracledb.user_commits:155enabled: true156attributes:157- oracle.db.pdb158oracledb.user_rollbacks:159enabled: true160attributes:161- oracle.db.pdb162163# === Tablespace Metrics ===164oracledb.tablespace_size.limit:165enabled: true166attributes:167- tablespace_name168- oracle.db.pdb169oracledb.tablespace_size.usage:170enabled: true171attributes:172- tablespace_name173- oracle.db.pdb174175# === Storage Metrics ===176oracledb.storage.usage:177enabled: true178oracledb.storage.utilization:179enabled: true180oracledb.recycle_bin.limit:181enabled: true182183# === Parallel Operations Metrics ===184oracledb.queries_parallelized:185enabled: true186attributes:187- oracle.db.pdb188oracledb.ddl_statements_parallelized:189enabled: true190attributes:191- oracle.db.pdb192oracledb.dml_statements_parallelized:193enabled: true194attributes:195- oracle.db.pdb196oracledb.parallel_operations_not_downgraded:197enabled: true198attributes:199- oracle.db.pdb200oracledb.parallel_operations_downgraded_1_to_25_pct:201enabled: true202attributes:203- oracle.db.pdb204oracledb.parallel_operations_downgraded_25_to_50_pct:205enabled: true206attributes:207- oracle.db.pdb208oracledb.parallel_operations_downgraded_50_to_75_pct:209enabled: true210attributes:211- oracle.db.pdb212oracledb.parallel_operations_downgraded_75_to_99_pct:213enabled: true214attributes:215- oracle.db.pdb216oracledb.parallel_operations_downgraded_to_serial:217enabled: true218attributes:219- oracle.db.pdb220processors:221batch:222resource/add_event_name:223attributes:224- key: host.address225value: YOUR_DB_HOST226action: upsert227exporters:228otlp/newrelic:229endpoint: https://otlp.nr-data.net:4318230headers:231api-key: YOUR_LICENSE_KEY232compression: gzip233retry_on_failure:234enabled: true235initial_interval: 5s236max_interval: 30s237max_elapsed_time: 300s238service:239pipelines:240metrics/oracledb:241receivers: [nroracledb/rds]242processors: [resource/add_event_name, batch]243exporters: [otlp/newrelic]244logs/oracledb:245receivers: [nroracledb/rds]246processors: [resource/add_event_name, batch]247exporters: [otlp/newrelic]
Under the Events section, enable these event types to collect their metrics:
Event
Description
db.server.query_samplePer-session active query samples capturing current SQL, wait state, and blocking details.
db.server.top_queryTop N SQL statements by CPU or elapsed time, including execution stats and query plans.
db.server.session.wait_samplePer-session cumulative wait counts and durations from
v$session_event.Configure the collection settings for each event type:
Configuration Section
Parameter
Value
top_query_collectionmax_query_sample_count1000
top_query_collectiontop_query_count200
top_query_collectioncollection_interval60s
query_sample_collectionmax_rows_per_query100
session_wait_event_collectionmax_rows_per_query100
Update NRDOT Collector configuration
Update the NRDOT Collector configuration to use your oracle-config.yaml file.
$sudo sed -i 's|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/config.yaml"|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/oracle-config.yaml"|' /etc/nrdot-collector/nrdot-collector.confDica
You can also:
- Configure multiple receivers: To monitor multiple Oracle Database instances from one collector.
- Configure SQL Query Receiver: To collect custom metrics from your Oracle Database.
- Link your Oracle Database with APM: To correlate your application performance with database operations. This allows you to see exactly which applications are generating specific database workloads.
- Set up secret management: To securely manage sensitive information, such as database credentials. This helps to enhance the security of your monitoring setup by avoiding hardcoding sensitive data in configuration files.
Restart NRDOT Collector
After updating your configuration, restart the NRDOT Collector:
$sudo systemctl restart nrdot-collector.service$sudo systemctl status nrdot-collector.serviceDica
Always restart the NRDOT Collector after making configuration changes to ensure the new settings take effect.
Find and use your data
Once your data is being collected, you can access comprehensive Oracle Database monitoring through New Relic's UI.
To find your Oracle Database entity in New Relic:
- Go to https://one.newrelic.com > All Capabilities > Databases.
- Set the search criteria as
instrumentation.provider = opentelemetry. - Select your Oracle Database from the list of entities.