• /
  • EnglishEspañolFrançais日本語한국어Português
  • 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

NRDOT를 사용한 작업 데이터베이스 모니터링

시사

이 기능은 아직 개발 중이지만 꼭 사용해 보시기 바랍니다!

이 기능은 현재 사전 출시 정책 에 따라 미리보기의 일부로 제공됩니다.

이제 New Relic은 New Relic의 데이터베이스 모니터링 기능과 New Relic Distribution of OpenTelemetry(NRDOT)를 사용하여 팀이 Oracle 데이터베이스 성능을 모니터링할 수 있도록 지원합니다.이 통합은 NRDOT 수집기를 사용하여 데이터베이스 지표, 쿼리 성능 및 시스템 상태에 대한 포괄적인 인사이트를 제공합니다.

이 NRDOT 기반 접근 방식은 모니터링을 위한 OpenTelemetry 데이터베이스 표준을 활용하여 기존 온호스트 통합(OHI)을 보완하고 기존 옵저버빌리티 그리드와 통합을 더 쉽게 만듭니다.

전제 조건

시작하기 전에 다음 사항이 있는지 확인하세요.

작업 데이터베이스 모니터링을 위한 NRDOT Collector 설정

온호스트(다중 테넌트) 또는 RDS 환경에서 NRDOT Collector 사용하여 작업 데이터베이스 모델링을 설정할 수 있습니다. 데이터베이스 환경에 따라 적절한 설정을 선택하고 단계를 따르세요.

NRDOT Collector 클러스터 및 데이터베이스 관련 스프레드시트 데이터를 모두 수집하므로 뉴렐릭에서 데이터베이스 환경에 대한 통합된 옵저버빌리티 솔루션을 보유할 수 있습니다.

온호스트 또는 다중 테넌트 환경에서 NRDOT Collector 사용하여 작업 데이터베이스 모델링을 설정할 수 있습니다. 호스트 기반(멀티테넌트) 환경에 NRDOT Collector를 설치하려면 다음 단계를 따르십시오.

설치 방법

사용 중인 Linux 환경에 맞는 설치 배포 방법을 선택하십시오.

중요

쿼리 성능 모델링을 위한 인프라 수준 지표를 보려면 작업 데이터베이스와 동일한 호스트에 NRDOT Collector 설치하는 것이 좋습니다.

데이터베이스 사용자 구성

다중 테넌트 작업 데이터베이스에 필요한 권한이 있는 모니터링 사용자를 생성합니다. 이를 위해서는 접두사가 C## 인 공통 사용자를 생성해야 합니다.

  1. 관리자 권한으로 루트 데이터베이스에 로그인하십시오.

    CREATE USER c##<YOUR_DB_USERNAME> IDENTIFIED BY "<USER_PASSWORD>";

    USER_PASSWORD 이 작업 신규 사용자의 비밀번호 요구사항을 충족하는지 확인하세요.

멀티테넌트 데이터베이스에 대한 모니터링 권한을 부여합니다.

모니터링 권한을 부여하려면 다음 SQL 문을 실행하십시오. 멀티테넌트 데이터베이스의 경우 C## 접두사를 사용하여 올바른 사용자 이름 형식을 사용하십시오.

ALTER USER c##<YOUR_DB_USERNAME> SET CONTAINER_DATA=ALL CONTAINER=CURRENT;
GRANT CREATE SESSION TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SET CONTAINER TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT CONNECT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SESSION TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SYSSTAT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SESSTAT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$STATNAME TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SYSTEM_EVENT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SHARED_SERVER TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$DISPATCHER TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$CIRCUIT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$RESOURCE_LIMIT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$LOCK TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$DATABASE TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$PARAMETER TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SQLAREA TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SQL TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$SQL_PLAN TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.V_$PDBS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$INSTANCE TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SGA TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SESSTAT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$STATNAME TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SYSSTAT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SQLAREA TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$LIBRARYCACHE TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$ROWCACHE TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$PGASTAT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$CONTAINERS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$PDBS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$CON_SYSMETRIC TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SYSMETRIC TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$FILESTAT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SYSTEM_EVENT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$ACTIVE_SERVICES TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SESSION TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$SESSION_WAIT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON SYS.GV_$ROLLSTAT TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON DBA_OBJECTS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON DBA_TABLESPACES TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON DBA_DATA_FILES TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON DBA_USERS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON CDB_SERVICES TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON CDB_DATA_FILES TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON CDB_TABLESPACE_USAGE_METRICS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON CDB_USERS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON CDB_PDBS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON ALL_USERS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON ALL_VIEWS TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;
GRANT SELECT ON GLOBAL_NAME TO c##<YOUR_DB_USERNAME> CONTAINER=ALL;

NRDOT Collector구성

  1. /etc/nrdot-collector-host/ 에 있는 config.yaml 파일을 편집한 다음 다음 코드 스니펫을 추가하세요.

    중요

    기존 NRDOT Collector 사용자라면 위의 설정을 기존 config.yaml 파일과 병합하십시오. 여기에는 현재 설정을 유지하면서 작업 데이터베이스 모니터링을 위한 새 수신자, 프로세서 및 내보내기를 추가하는 작업이 포함됩니다.

    extensions:
    health_check:
    receivers:
    otlp:
    protocols:
    grpc:
    http:
    hostmetrics:
    collection_interval: 60s
    scrapers:
    cpu:
    metrics:
    system.cpu.time:
    enabled: false
    system.cpu.utilization:
    enabled: true
    load:
    memory:
    metrics:
    system.memory.utilization:
    enabled: true
    paging:
    metrics:
    system.paging.utilization:
    enabled: false
    system.paging.faults:
    enabled: false
    filesystem:
    metrics:
    system.filesystem.utilization:
    enabled: true
    disk:
    metrics:
    system.disk.merged:
    enabled: false
    system.disk.pending_operations:
    enabled: false
    system.disk.weighted_io_time:
    enabled: false
    network:
    metrics:
    system.network.connections:
    enabled: false
    # Uncomment to enable process metrics, which can be noisy but valuable.
    # processes:
    # process:
    # metrics:
    # process.cpu.utilization:
    # enabled: true
    # process.cpu.time:
    # enabled: false
    filelog:
    include:
    - /var/log/alternatives.log
    - /var/log/cloud-init.log
    - /var/log/auth.log
    - /var/log/dpkg.log
    - /var/log/syslog
    - /var/log/messages
    - /var/log/secure
    - /var/log/yum.log
    newrelicoracledb/cdb:
    endpoint: "<YOUR_DB_HOST>:<YOUR_DB_PORT>"
    username: "<USERNAME>"
    password: "<PASSWORD>"
    service: "<YOUR_CDB_SERVICE_NAME>"
    collection_interval: 30s
    timeout: 30s
    # enable_tablespace_scraper: true
    # enable_core_scraper: true
    # enable_system_scraper: true
    # enable_connection_scraper: true
    # enable_container_scraper: true
    # enable_database_info_scraper: true
    newrelicoracledb/pdb:
    endpoint: "<YOUR_DB_HOST>:<YOUR_DB_PORT>"
    username: "<USERNAME>"
    password: "<PASSWORD>"
    service: "<YOUR_CDB_SERVICE_NAME>"
    collection_interval: 30s
    timeout: 30s
    pdb_services: ["ALL"]
    # query_monitoring_response_time_threshold: 500
    # query_monitoring_count_threshold: 30
    # enable_query_monitoring: true
    # enable_pdb_scraper: true
    processors:
    metricstransform:
    transforms:
    - include: system.cpu.utilization
    action: update
    operations:
    - action: aggregate_labels
    label_set: [ state ]
    aggregation_type: mean
    - include: system.paging.operations
    action: update
    operations:
    - action: aggregate_labels
    label_set: [ direction ]
    aggregation_type: sum
    filter/exclude_cpu_utilization:
    metrics:
    datapoint:
    - 'metric.name == "system.cpu.utilization" and attributes["state"] == "interrupt"'
    - 'metric.name == "system.cpu.utilization" and attributes["state"] == "nice"'
    - 'metric.name == "system.cpu.utilization" and attributes["state"] == "softirq"'
    filter/exclude_memory_utilization:
    metrics:
    datapoint:
    - 'metric.name == "system.memory.utilization" and attributes["state"] == "slab_unreclaimable"'
    - 'metric.name == "system.memory.utilization" and attributes["state"] == "inactive"'
    - 'metric.name == "system.memory.utilization" and attributes["state"] == "cached"'
    - 'metric.name == "system.memory.utilization" and attributes["state"] == "buffered"'
    - 'metric.name == "system.memory.utilization" and attributes["state"] == "slab_reclaimable"'
    filter/exclude_memory_usage:
    metrics:
    datapoint:
    - 'metric.name == "system.memory.usage" and attributes["state"] == "slab_unreclaimable"'
    - 'metric.name == "system.memory.usage" and attributes["state"] == "inactive"'
    filter/exclude_filesystem_utilization:
    metrics:
    datapoint:
    - 'metric.name == "system.filesystem.utilization" and attributes["type"] == "squashfs"'
    filter/exclude_filesystem_usage:
    metrics:
    datapoint:
    - 'metric.name == "system.filesystem.usage" and attributes["type"] == "squashfs"'
    - 'metric.name == "system.filesystem.usage" and attributes["state"] == "reserved"'
    filter/exclude_filesystem_inodes_usage:
    metrics:
    datapoint:
    - 'metric.name == "system.filesystem.inodes.usage" and attributes["type"] == "squashfs"'
    - 'metric.name == "system.filesystem.inodes.usage" and attributes["state"] == "reserved"'
    filter/exclude_system_disk:
    metrics:
    datapoint:
    - 'metric.name == "system.disk.operations" and IsMatch(attributes["device"], "^loop.*") == true'
    - 'metric.name == "system.disk.merged" and IsMatch(attributes["device"], "^loop.*") == true'
    - 'metric.name == "system.disk.io" and IsMatch(attributes["device"], "^loop.*") == true'
    - 'metric.name == "system.disk.io_time" and IsMatch(attributes["device"], "^loop.*") == true'
    - 'metric.name == "system.disk.operation_time" and IsMatch(attributes["device"], "^loop.*") == true'
    filter/exclude_system_paging:
    metrics:
    datapoint:
    - 'metric.name == "system.paging.usage" and attributes["state"] == "cached"'
    - 'metric.name == "system.paging.operations" and attributes["type"] == "cached"'
    filter/exclude_network:
    metrics:
    datapoint:
    - 'IsMatch(metric.name, "^system.network.*") == true and attributes["device"] == "lo"'
    attributes/exclude_system_paging:
    include:
    match_type: strict
    metric_names:
    - system.paging.operations
    actions:
    - key: type
    action: delete
    transform/clear_metadata:
    metric_statements:
    - context: metric
    statements:
    - set(metric.description, "")
    - set(metric.unit, "")
    filter/exec_plan_and_query_details_include:
    metrics:
    include:
    match_type: strict
    metric_names:
    - newrelicoracledb.execution_plan
    - newrelicoracledb.slow_queries.query_details
    filter/exec_plan_and_query_details_exclude:
    metrics:
    exclude:
    match_type: strict
    metric_names:
    - newrelicoracledb.execution_plan
    - newrelicoracledb.slow_queries.query_details
    cumulativetodelta/oracle:
    include:
    match_type: strict
    metrics:
    - newrelicoracledb.connection.bytes_received
    - newrelicoracledb.connection.bytes_sent
    - newrelicoracledb.connection.execute_count
    - newrelicoracledb.connection.logons_cumulative
    - newrelicoracledb.connection.parse_count_hard
    - newrelicoracledb.connection.parse_count_total
    - newrelicoracledb.connection.sqlnet_roundtrips
    - newrelicoracledb.connection.user_commits
    - newrelicoracledb.connection.user_rollbacks
    transform/host:
    metric_statements:
    - context: metric
    statements:
    - set(metric.description, "")
    - set(metric.unit, "")
    transform:
    trace_statements:
    - context: span
    statements:
    - truncate_all(span.attributes, 4095)
    - truncate_all(resource.attributes, 4095)
    log_statements:
    - context: log
    statements:
    - truncate_all(log.attributes, 4095)
    - truncate_all(resource.attributes, 4095)
    memory_limiter:
    check_interval: 1s
    limit_mib: ${env:NEW_RELIC_MEMORY_LIMIT_MIB:-100}
    batch:
    resourcedetection:
    detectors: ["system"]
    system:
    hostname_sources: ["os"]
    resource_attributes:
    host.id:
    enabled: true
    resourcedetection/db_safe:
    detectors: ["system"]
    override: false
    system:
    hostname_sources: ["os"]
    resource_attributes:
    host.id:
    enabled: true
    resourcedetection/cloud:
    detectors: ["gcp", "ec2", "azure"]
    timeout: 2s
    override: true
    resourcedetection/env:
    detectors: ["env"]
    timeout: 2s
    override: true
    connectors:
    metricsaslogs:
    include_resource_attributes: true
    include_scope_info: true
    exporters:
    otlp:
    endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>"
    headers:
    api-key: "<YOUR_NEWRELIC_API_KEY>"
    compression: gzip
    service:
    pipelines:
    metrics/host:
    receivers: [hostmetrics]
    processors:
    - memory_limiter
    - metricstransform
    - filter/exclude_cpu_utilization
    - filter/exclude_memory_utilization
    - filter/exclude_memory_usage
    - filter/exclude_filesystem_utilization
    - filter/exclude_filesystem_usage
    - filter/exclude_filesystem_inodes_usage
    - filter/exclude_system_disk
    - filter/exclude_network
    - attributes/exclude_system_paging
    - transform/host
    - resourcedetection
    - resourcedetection/cloud
    - resourcedetection/env
    - cumulativetodelta/oracle
    - batch
    exporters: [otlp]
    traces:
    receivers: [otlp]
    processors: [memory_limiter, transform, resourcedetection, resourcedetection/cloud, resourcedetection/env, batch]
    exporters: [otlp]
    metrics:
    receivers: [otlp]
    processors: [memory_limiter, transform, resourcedetection, resourcedetection/cloud, resourcedetection/env, batch]
    exporters: [otlp]
    logs:
    receivers: [otlp]
    processors: [memory_limiter, transform, resourcedetection, resourcedetection/cloud, resourcedetection/env, batch]
    exporters: [otlp]
    metrics/oracledb:
    receivers: [newrelicoracledb/cdb, newrelicoracledb/pdb]
    processors: [memory_limiter, resourcedetection/db_safe, batch, transform/clear_metadata, filter/exec_plan_and_query_details_exclude]
    exporters: [otlp]
    metrics/exec_plan_and_query_details_to_logs:
    receivers: [newrelicoracledb/cdb, newrelicoracledb/pdb]
    processors: [filter/exec_plan_and_query_details_include]
    exporters: [metricsaslogs]
    logs/oracledb:
    receivers: [metricsaslogs]
    processors: [memory_limiter, resourcedetection/db_safe, batch]
    exporters: [otlp]
    extensions: [health_check]
  2. 설정 파일에서 다음과 같은 필수 모델을 설정하십시오.

    매개변수

    설명

    <YOUR_DB_HOST>

    작업 데이터베이스 호스트명을 입력하세요.

    <YOUR_DB_PORT>

    작업 데이터베이스 포트를 입력하세요.

    <USERNAME>

    데이터베이스 사용자 이름을 입력하세요.

    <PASSWORD>

    데이터베이스 비밀번호를 입력하세요.

    <YOUR_CDB_SERVICE_NAME>

    귀하의 업무 서비스 이름을 입력하세요.

    <YOUR_NEWRELIC_OTLP_ENDPOINT>

    뉴렐릭 OTLP 엔드포인트를 입력하세요. 자세한 내용은 뉴렐릭 OTLP 엔드포인트 문서를 참조하세요.

    <YOUR_NEWRELIC_API_KEY>

    뉴렐릭 API 키를 입력하세요.

    pdb_services

    다음 옵션 중에서 모니터링할 PDB 서비스를 선택하십시오.

    • 비어 있거나 nil인 경우: 지정된 서비스 데이터만 수집합니다.
    • ["ALL"]: 모든 PDB 서비스(CDB 제외)를 수집합니다.
    • ["pdb1", "pdb2"]지정된 PDB 서비스만 수집합니다.

    enable_query_monitoring

    느림, 활성, 대기, 차단 세션, 실행 계획 등의 쿼리 모니터링 지표를 얻습니다. 기본값은 다음과 같이 설정되어 있습니다.

    false

    query_monitoring_response_time_threshold

    회전 값, 쿼리 응답 시간(ms 단위)을 설정합니다. 이 레버값으로 교차하는 쿼리를 캡처합니다. 기본값은 500ms로 설정되어 있습니다.

    query_monitoring_count_threshold

    각 쿼리 성능 지표에 대한 레코드 수입니다. 기본값은 30으로 설정되어 있습니다.

    뉴렐릭 OTLP 입체포인트 설정 및 OpenTelemetry 우수 모범 사례에 대한 자세한 내용은 OpenTelemetry OTLP 설명서를 참조하세요.

NRDOT 수집기 재시작

설정을 업데이트한 후 NRDOT 수집기를 다시 시작하십시오.

bash
$
sudo systemctl restart nrdot-collector-host
$
sudo systemctl status nrdot-collector-host

설정을 변경한 후에는 반드시 NRDOT 수집기를 재시작하여 새 설정이 적용되도록 하십시오.

(선택사항) 다중 수신기 설정

nrdot-collector-host 바이너리는 고유한 자격 증명을 사용하여 단일 config.yaml 에서 여러 작업 데이터베이스에 대한 다중 수신자 설정을 지원합니다. 아래의 예시 config.yaml 공통 프로세서와 익스포터를 공유하면서 서로 다른 온호스트(멀티테넌트) 인스턴스에 대해 여러 수신기를 설정하는 방법을 보여줍니다.

receivers:
newrelicoracledb/cdb1:
endpoint: "<YOUR_DB_HOST>:<YOUR_DB_PORT>"
username: "<USERNAME>"
password: "<PASSWORD>"
service: "<YOUR_CDB1_SERVICE_NAME>"
collection_interval: 30s
timeout: 30s
# enable_tablespace_scraper: true
# enable_core_scraper: true
# enable_system_scraper: true
# enable_connection_scraper: true
# enable_container_scraper: true
# enable_database_info_scraper: true
# First CDB's PDB configuration
newrelicoracledb/pdb1:
endpoint: "<YOUR_DB_HOST>:<YOUR_DB_PORT>"
username: "<USERNAME>"
password: "<PASSWORD>"
service: "<YOUR_CDB2_SERVICE_NAME>"
collection_interval: 30s
timeout: 30s
pdb_services: ["ALL"]
# query_monitoring_response_time_threshold: 500
# query_monitoring_count_threshold: 30
# enable_query_monitoring: true
# enable_pdb_scraper: true
# Second CDB configuration
newrelicoracledb/cdb2:
endpoint: "<YOUR_DB_HOST>:<YOUR_DB_PORT>"
username: "<USERNAME>"
password: "<PASSWORD>"
service: "<YOUR_CDB2_SERVICE_NAME>"
collection_interval: 30s
timeout: 30s
# enable_tablespace_scraper: true
# enable_core_scraper: true
# enable_system_scraper: true
# enable_connection_scraper: true
# enable_container_scraper: true
# enable_database_info_scraper: true
# Second CDB's PDB configuration
newrelicoracledb/pdb2:
endpoint: "<YOUR_DB_HOST>:<YOUR_DB_PORT>"
username: "<USERNAME>"
password: "<PASSWORD>"
service: "<YOUR_CDB2_SERVICE_NAME>"
collection_interval: 30s
timeout: 30s
pdb_services: ["ALL"]
# query_monitoring_response_time_threshold: 500
# query_monitoring_count_threshold: 30
# enable_query_monitoring: true
# enable_pdb_scraper: true
processors:
memory_limiter/oracle:
check_interval: 1s
limit_mib: ${env:NEW_RELIC_MEMORY_LIMIT_MIB:-100}
cumulativetodelta/oracle:
include:
match_type: strict
metrics:
- newrelicoracledb.connection.bytes_received
- newrelicoracledb.connection.bytes_sent
- newrelicoracledb.connection.execute_count
- newrelicoracledb.connection.logons_cumulative
- newrelicoracledb.connection.parse_count_hard
- newrelicoracledb.connection.parse_count_total
- newrelicoracledb.connection.sqlnet_roundtrips
- newrelicoracledb.connection.user_commits
- newrelicoracledb.connection.user_rollbacks
transform/oracle_clear_metadata:
metric_statements:
- context: metric
statements:
- set(metric.description, "")
- set(metric.unit, "")
log_statements:
- context: log
statements:
- set(body, "")
filter/exec_plan_and_query_details_include:
metrics:
include:
match_type: strict
metric_names:
- newrelicoracledb.execution_plan
- newrelicoracledb.slow_queries.query_details
filter/exec_plan_and_query_details_exclude:
metrics:
exclude:
match_type: strict
metric_names:
- newrelicoracledb.execution_plan
- newrelicoracledb.slow_queries.query_details
resourcedetection/oracle_db_safe:
detectors: ["system"]
override: false
system:
hostname_sources: ["os"]
resource_attributes:
host.id:
enabled: true
connectors:
metricsaslogs/oracle:
include_resource_attributes: true
include_scope_info: true
service:
pipelines:
metrics/oracledb:
receivers: [newrelicoracledb/cdb1, newrelicoracledb/pdb1, newrelicoracledb/cdb2, newrelicoracledb/pdb2]
processors: [memory_limiter/oracle, cumulativetodelta/oracle, transform/oracle_clear_metadata, filter/exec_plan_and_query_details_exclude, resourcedetection/oracle_db_safe]
exporters: [otlp]
metrics/oracle_query_to_logs:
receivers: [newrelicoracledb/cdb1, newrelicoracledb/pdb1, newrelicoracledb/cdb2, newrelicoracledb/pdb2]
processors: [memory_limiter/oracle, filter/exec_plan_and_query_details_include]
exporters: [metricsaslogs/oracle]
logs/oracledb:
receivers: [metricsaslogs/oracle]
processors: [memory_limiter/oracle, transform/oracle_clear_metadata, resourcedetection/oracle_db_safe]
exporters: [otlp]

  • 이 설정을 사용하면 여러 작업 RDS를 동시에 모니터링할 수 있습니다. 각 인스턴스는 고유한 자격 증명을 사용하여 자체 수신자 설정을 갖는 반면, 공통 프로세서 및 익스포터를 공유합니다. 모니터링 요구 사항에 따라 collection_interval 및 기타 조치를 조정하세요.

  • 설정을 업데이트한 후 NRDOT 수집기를 재시작하여 변경 사항을 적용하십시오.

(선택 사항) APM-데이터베이스 상관 관계 설정

애플리케이션 성능과 데이터베이스 작업 간의 상관관계를 파악하려면 데이터베이스 서비스 식별을 설정할 수 있습니다. 이를 통해 특정 데이터베이스워크로드 기능을 생성하는 기능을 정확하게 확인할 수 있습니다. 자세한 내용은 뉴렐릭에서 APM- 데이터베이스 상관 관계를 가져오기 위한 데이터베이스 서비스 식별 설정을 참조하세요.

중요

APM 에서 데이터베이스 성능 데이터를 보려면 두 가지 모두 동일한 뉴렐릭 계정에 있어야 합니다. 만약 데이터가 서로 다른 뉴럴릭 계정에 있다면, 데이터를 보려면 두 계정 모두에 접근 권한이 있어야 합니다.

(선택 사항) 비밀 관리 구성

비밀 관리 기능을 사용하면 데이터베이스 자격 증명과 같은 중요한 정보를 안전하게 관리할 수 있습니다. 이렇게 하면 구성 파일에 민감한 데이터를 하드코딩하는 것을 방지하여 모니터링 설정의 보안을 강화할 수 있습니다. 자세한 내용은 비밀 관리 부분 을 참조하십시오.

데이터 찾기 및 사용

데이터가 수집되면 뉴렐릭의 UI 통해 포괄적인 작업 데이터베이스 모니터링에 액세스할 수 있습니다.

뉴렐릭에서 작업 데이터베이스를 찾으려면 다음을 수행하세요.

  1. https://one.newrelic.com > All Capabilities > Databases 으)로 이동합니다.
  2. 검색 기준을 instrumentation.provider = opentelemetry 으로 설정합니다.
  3. 분할 목록에서 작업 데이터베이스를 선택하세요.

RDS 환경에 NRDOT Collector를 설치하려면 다음 단계를 따르십시오.

설치 방법

사용 중인 Linux 환경에 맞는 설치 배포 방법을 선택하십시오.

데이터베이스 사용자 구성

RDS 작업 데이터베이스에 필요한 권한을 가진 모니터링 사용자를 생성합니다.

  1. 관리자 권한으로 루트 데이터베이스에 로그인하십시오.

    CREATE USER <USERNAME> IDENTIFIED BY "<USER_PASSWORD>";
  2. 새로 생성된 사용자에게 CONNECT 권한을 부여하십시오.

    GRANT CONNECT TO <USERNAME>;

RDS 데이터베이스에 대한 모니터링 권한을 부여하세요

모니터링 권한을 부여하려면 다음 SQL 문을 실행하십시오. <USERNAME_IN_UPPERCASE> 대문자로 입력한 사용자 이름으로 바꾸세요.

SET SERVEROUTPUT ON;
BEGIN
FOR r IN (SELECT column_value as view_name FROM table(sys.odcivarchar2list(
'V_$SESSION', 'V_$SYSSTAT', 'V_$SESSTAT', 'V_$STATNAME',
'V_$SYSTEM_EVENT', 'V_$SHARED_SERVER', 'V_$DISPATCHER',
'V_$RESOURCE_LIMIT', 'V_$LOCK', 'V_$DATABASE',
'V_$PARAMETER', 'V_$SQLAREA', 'V_$SQL', 'V_$SQL_PLAN',
'V_$PDBS', 'GV_$INSTANCE', 'GV_$SGA', 'GV_$SESSTAT',
'GV_$STATNAME', 'GV_$SYSSTAT', 'GV_$SQLAREA',
'GV_$LIBRARYCACHE', 'GV_$ROWCACHE', 'GV_$PGASTAT',
'GV_$CONTAINERS', 'GV_$PDBS', 'GV_$CON_SYSMETRIC',
'GV_$SYSMETRIC', 'GV_$FILESTAT', 'GV_$SYSTEM_EVENT',
'GV_$ACTIVE_SERVICES', 'GV_$SESSION', 'GV_$SESSION_WAIT',
'GV_$ROLLSTAT', 'DBA_OBJECTS', 'DBA_TABLESPACES',
'DBA_TABLESPACE_USAGE_METRICS', 'DBA_DATA_FILES', 'DBA_USERS',
'CDB_SERVICES', 'CDB_DATA_FILES', 'CDB_TABLESPACE_USAGE_METRICS',
'CDB_USERS', 'CDB_PDBS', 'ALL_USERS', 'ALL_VIEWS', 'GLOBAL_NAME'
))) LOOP
BEGIN
rdsadmin.rdsadmin_util.grant_sys_object(
p_obj_name => r.view_name,
p_grantee => '<USERNAME_IN_UPPERCASE>',
p_privilege => 'SELECT'
);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('FAILED: ' || r.view_name || ' | Error: ' || SQLERRM);
END;
END LOOP;
END;
/

NRDOT Collector구성

  1. /etc/nrdot-collector-host/ 에 있는 config.yaml 파일을 편집한 다음 다음 코드 스니펫을 추가하세요.

    중요

    기존 NRDOT Collector 사용자라면 위의 설정을 기존 config.yaml 파일과 병합하십시오. 여기에는 현재 설정을 유지하면서 작업 데이터베이스 모니터링을 위한 새 수신자, 프로세서 및 내보내기를 추가하는 작업이 포함됩니다.

    receivers:
    newrelicoracledb/pdb:
    endpoint: "<YOUR_DB_HOST>:<YOUR_DB_PORT>"
    username: "<USERNAME>"
    password: "<PASSWORD>"
    service: "<PDB_NAME>"
    collection_interval: 30s
    timeout: 30s
    # pdb_services: ['PDB1','PDB2'] #for multiple pdbs
    # query_monitoring_response_time_threshold: 500
    # query_monitoring_count_threshold: 30
    # enable_query_monitoring: true
    # enable_pdb_scraper: true
    # enable_tablespace_scraper: true
    # enable_core_scraper: true
    # enable_system_scraper: true
    # enable_connection_scraper: true
    # enable_container_scraper: true
    # enable_database_info_scraper: true
    processors:
    transform/clear_metadata:
    metric_statements:
    - context: metric
    statements:
    - set(metric.description, "")
    - set(metric.unit, "")
    log_statements:
    - context: log
    statements:
    - set(log.body, "")
    filter/exec_plan_and_query_details_include:
    metrics:
    include:
    match_type: strict
    metric_names:
    - newrelicoracledb.execution_plan
    - newrelicoracledb.slow_queries.query_details
    filter/exec_plan_and_query_details_exclude:
    metrics:
    exclude:
    match_type: strict
    metric_names:
    - newrelicoracledb.execution_plan
    - newrelicoracledb.slow_queries.query_details
    cumulativetodelta:
    include:
    match_type: strict
    metrics:
    - newrelicoracledb.connection.bytes_received
    - newrelicoracledb.connection.bytes_sent
    - newrelicoracledb.connection.execute_count
    - newrelicoracledb.connection.logons_cumulative
    - newrelicoracledb.connection.parse_count_hard
    - newrelicoracledb.connection.parse_count_total
    - newrelicoracledb.connection.sqlnet_roundtrips
    - newrelicoracledb.connection.user_commits
    - newrelicoracledb.connection.user_rollbacks
    connectors:
    metricsaslogs:
    include_resource_attributes: true
    include_scope_info: true
    exporters:
    otlp:
    endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>"
    headers:
    api-key: "<YOUR_NEWRELIC_API_KEY>"
    compression: gzip
    service:
    pipelines:
    metrics:
    receivers: [newrelicoracledb/pdb]
    processors: [transform/clear_metadata, filter/exec_plan_and_query_details_exclude, cumulativetodelta]
    exporters: [otlp]
    metrics/exec_plan_and_query_details_to_logs:
    receivers: [newrelicoracledb/pdb]
    processors: [filter/exec_plan_and_query_details_include]
    exporters: [metricsaslogs]
    logs/newrelicoracledb:
    receivers: [metricsaslogs]
    processors: [transform/clear_metadata]
    exporters: [otlp]
  2. 설정 파일에서 다음과 같은 필수 모델을 설정하십시오.

    매개변수

    설명

    <YOUR_DB_HOST>

    작업 데이터베이스 호스트명을 입력하세요.

    <YOUR_DB_PORT>

    작업 데이터베이스 포트를 입력하세요.

    <USERNAME>

    데이터베이스 사용자 이름을 입력하세요.

    <PASSWORD>

    데이터베이스 비밀번호를 입력하세요.

    <PDB_NAME>

    PDB 서비스 이름을 입력하십시오.

    <YOUR_NEWRELIC_OTLP_ENDPOINT>

    뉴렐릭 OTLP 엔드포인트를 입력하세요. 자세한 내용은 뉴렐릭 OTLP 엔드포인트 문서를 참조하세요.

    <YOUR_NEWRELIC_API_KEY>

    뉴렐릭 API 키를 입력하세요.

    pdb_services

    다음 옵션 중에서 모니터링할 PDB 서비스를 선택하십시오.

    • 비어 있거나 nil인 경우: 지정된 서비스 데이터만 수집합니다.
    • ["pdb1", "pdb2"]지정된 PDB 서비스만 수집합니다.

    enable_query_monitoring

    느림, 활성, 대기, 차단 세션, 실행 계획 등의 쿼리 모니터링 지표를 얻습니다. 기본값은 다음과 같이 설정되어 있습니다.

    false

    query_monitoring_response_time_threshold

    회전 값, 쿼리 응답 시간(ms 단위)을 설정합니다. 이 레버값으로 교차하는 쿼리를 캡처합니다. 기본값은 500ms로 설정되어 있습니다.

    query_monitoring_count_threshold

    각 쿼리 성능 지표에 대한 레코드 수입니다. 기본값은 30으로 설정되어 있습니다.

NRDOT 수집기 재시작

설정을 업데이트한 후 NRDOT 수집기를 다시 시작하십시오.

bash
$
sudo systemctl restart nrdot-collector-host
$
sudo systemctl status nrdot-collector-host

설정을 변경한 후에는 반드시 NRDOT 수집기를 재시작하여 새 설정이 적용되도록 하십시오.

(선택사항) 다중 수신기 설정

nrdot-collector-host 바이너리는 고유한 자격 증명을 사용하여 단일 config.yaml 에서 여러 작업 데이터베이스에 대한 다중 수신자 설정을 지원합니다. 아래의 예시 config.yaml 공통 프로세서와 익스포터를 공유하면서 서로 다른 RDS 인스턴스에 대해 여러 수신기를 설정하는 방법을 보여줍니다.

receivers:
# First RDS Instance
newrelicoracledb/pdb/rds1:
endpoint: "<YOUR_DB_HOST_1>:<YOUR_DB_PORT_1>"
username: "<USERNAME_1>"
password: "<PASSWORD_1>"
service: "<PDB_NAME_1>"
collection_interval: 30s
timeout: 30s
# query_monitoring_response_time_threshold: 500
# query_monitoring_count_threshold: 30
# enable_query_monitoring: true
# Second RDS Instance
newrelicoracledb/pdb/rds2:
endpoint: "<YOUR_DB_HOST_2>:<YOUR_DB_PORT_2>"
username: "<USERNAME_2>"
password: "<PASSWORD_2>"
service: "<PDB_NAME_2>"
collection_interval: 30s
timeout: 30s
# query_monitoring_response_time_threshold: 500
# query_monitoring_count_threshold: 30
# enable_query_monitoring: true
processors:
transform/clear_metadata:
metric_statements:
- context: metric
statements:
- set(metric.description, "")
- set(metric.unit, "")
log_statements:
- context: log
statements:
- set(log.body, "")
filter/exec_plan_and_query_details_include:
metrics:
include:
match_type: strict
metric_names:
- newrelicoracledb.execution_plan
- newrelicoracledb.slow_queries.query_details
filter/exec_plan_and_query_details_exclude:
metrics:
exclude:
match_type: strict
metric_names:
- newrelicoracledb.execution_plan
- newrelicoracledb.slow_queries.query_details
connectors:
metricsaslogs:
include_resource_attributes: true
include_scope_info: true
exporters:
otlp:
endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>"
headers:
api-key: "<YOUR_NEWRELIC_API_KEY>"
compression: gzip
service:
pipelines:
# Separate metrics pipelines to apply unique resource names
metrics/rds1:
receivers: [newrelicoracledb/pdb/rds1]
processors: [transform/clear_metadata, filter/exec_plan_and_query_details_exclude]
exporters: [otlp]
metrics/rds2:
receivers: [newrelicoracledb/pdb/rds2]
processors: [transform/clear_metadata, filter/exec_plan_and_query_details_exclude]
exporters: [otlp]
# Combined logs pipeline for execution plans and query details
metrics/exec_plan_and_query_details_to_logs:
receivers: [newrelicoracledb/pdb/rds1, newrelicoracledb/pdb/rds2]
processors: [filter/exec_plan_and_query_details_include]
exporters: [metricsaslogs]
logs/newrelicoracledb:
receivers: [metricsaslogs]
processors: [transform/clear_metadata]
exporters: [otlp]

  • 이 설정을 사용하면 여러 작업 RDS를 동시에 모니터링할 수 있습니다. 각 인스턴스는 고유한 자격 증명을 사용하여 자체 수신자 설정을 갖는 반면, 공통 프로세서 및 익스포터를 공유합니다. 모니터링 요구 사항에 따라 collection_interval 및 기타 조치를 조정하세요.

  • 설정을 업데이트한 후 NRDOT 수집기를 재시작하여 변경 사항을 적용하십시오.

(선택 사항) APM-데이터베이스 상관 관계 설정

애플리케이션 성능과 데이터베이스 작업 간의 상관관계를 파악하려면 데이터베이스 서비스 식별을 설정할 수 있습니다. 이를 통해 특정 데이터베이스워크로드 기능을 생성하는 기능을 정확하게 확인할 수 있습니다. 자세한 내용은 뉴렐릭에서 APM- 데이터베이스 상관 관계를 가져오기 위한 데이터베이스 서비스 식별 설정을 참조하세요.

중요

APM 에서 데이터베이스 성능 데이터를 보려면 두 가지 모두 동일한 뉴렐릭 계정에 있어야 합니다. 엔티티가 서로 다른 계정에 있는 경우 데이터를 보려면 두 계정 모두에 대한 액세스 권한이 있어야 합니다.

(선택 사항) 비밀 관리 구성

비밀 관리 기능을 사용하면 데이터베이스 자격 증명과 같은 중요한 정보를 안전하게 관리할 수 있습니다. 이렇게 하면 구성 파일에 민감한 데이터를 하드코딩하는 것을 방지하여 모니터링 설정의 보안을 강화할 수 있습니다. 자세한 내용은 비밀 관리 부분 을 참조하십시오.

데이터 찾기 및 사용

데이터가 수집되면 뉴렐릭의 UI 통해 포괄적인 작업 데이터베이스 모니터링에 액세스할 수 있습니다.

뉴렐릭에서 작업 데이터베이스를 찾으려면 다음을 수행하세요.

  1. https://one.newrelic.com > All Capabilities > Databases 으)로 이동합니다.
  2. 검색 기준을 instrumentation.provider = opentelemetry 으로 설정합니다.
  3. 분할 목록에서 작업 데이터베이스를 선택하세요.

NRDOT 수집기 지원 명령

이 섹션에서는 시스템에서 NRDOT Collector 서비스를 관리하는 데 사용되는 일반적인 명령 목록을 제공합니다.

사용 가능한 지표

설정 플래그로 구성된 지표를 사용하여 작업 데이터베이스 성능을 모니터링합니다. 뉴럴릭 UI 기능을 위해 기본 설정이 자동으로 수집됩니다. 제공된 추가 정보를 활용하여 특정 스크래퍼를 활성화하면 더욱 고급스럽고 심층적인 인사이트 정보를 얻을 수 있습니다.

기본 측정항목

이러한 지표는 뉴렐릭의 작업 데이터베이스 모니터링 기능에 필수적이며 설정에 관계없이 자동으로 수집됩니다.

추가 지표

인사이트 수행 데이터베이스 성능 및 상태에 대한 심층적인 이해를 위해 필요에 따라 이러한 추가 지표를 활성화합니다.

무엇 향후 계획

NRDOT를 사용하여 작업 데이터베이스 모니터링을 설정한 후:

Copyright © 2026 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.