sqlqueryreceiver은(는) 데이터베이스에 대해 커스텀 SQL 쿼리를 실행하고 그 결과를 메트릭으로 뉴렐릭에 수집할 수 있도록 하는 OpenTelemetry Collector 수신자입니다.
내장 nroracledbreceiver / nrsqlserverreceiver / nrmysqlreceiver / nrpostgresqlreceiver 메트릭에 포함되지 않은 데이터를 모니터링할 때 이를 사용하십시오. 엔티티 연결 속성이 올바르게 구성된 경우, sqlqueryreceiver을(를) 통해 수집된 커스텀 지표는 뉴렐릭에서 내장 수신기 데이터와 동일한 오라클, SQL Server, MySQL 또는 PostgreSQL 엔티티 아래에 표시됩니다.
전제 조건
- 데이터소스에 설정된 데이터베이스 사용자는 쿼리하려는 모든 뷰 또는 테이블에 대해
SELECT권한을 가져야 합니다. - 수집기 바이너리에는
sqlqueryreceiver구성 요소가 포함되어야 합니다.
구성
기존 nroracledb 블록과 함께 기존 oracle-config.yaml의 receivers: 섹션 내에 sqlqueryreceiver 블록을 추가해 주십시오:
receivers: nroracledb:
...
sqlquery/oracle: driver: oracle
# Approach 1: Use the `host`, `port`, `database`, `username`, and `password` fields to connect to your database. The receiver will construct the datasource URL for you. # host: <YOUR_DB_HOST> # port: <YOUR_DB_PORT> # database: <YOUR_DATABASE_NAME> # username: <YOUR_DB_USERNAME> # password: <YOUR_DB_PASSWORD>
# Approach 2: Use the `datasource` field to provide a full connection string. datasource: "oracle://<YOUR_DB_USERNAME>:<YOUR_DB_PASSWORD>@<YOUR_DB_HOST>:<YOUR_DB_PORT>/<YOUR_SERVICE_NAME>"
collection_interval: 60s queries: - sql: "<YOUR_CUSTOM_SQL>" metrics: - metric_name: oracledb.<YOUR_METRIC_NAME> value_column: <RESULT_COLUMN> attribute_columns: [<DIMENSION_COLUMN_1>, <DIMENSION_COLUMN_2>] value_type: double각 메트릭에 대해 다음 파라미터를 설정하십시오:
매개변수 | 설명 |
|---|---|
| 호스트명 또는 IP 주소입니다. 예를 들어,
|
| 포트 번호입니다. 기본값은 다음으로 설정되어 있습니다
|
| 오라클 데이터베이스 사용자 이름입니다. 예를 들어
|
| 오라클 데이터베이스 비밀번호입니다. |
| 오라클 서비스 이름. 예를 들어
|
| 쿼리를 실행하고 메트릭을 수집하는 빈도입니다. 예:
,
|
| 실행할 SQL 쿼리. 중요사용자 지정 쿼리가 PII 또는 민감한 데이터를 수집하거나 노출하지 않도록 하십시오. |
| 뉴렐릭에 표시되는 메트릭 이름입니다. 일관성을 위해
접두사를 사용하십시오. 예를 들어
|
| 값이 메트릭 값이 되는 쿼리 결과의 열입니다. 예를 들어
|
| 값 열의 데이터 유형입니다. 옵션:
,
. 생략 시
로 기본 설정됩니다. 예를 들어
|
| OTLP 메트릭 유형입니다. 현재/스냅샷 값에
을(를) 사용하십시오. 누적 카운터에
을(를) 사용하십시오. 생략할 경우
(으)로 기본 설정됩니다. 예를 들어
|
| 메트릭 값의 측정 단위입니다. 뉴렐릭에서 메타데이터로 사용됩니다. 예를 들어
,
,
,
,
|
| 메트릭 레이블/차원이 되는 쿼리 결과의 열입니다. NRQL에서 필터링 및 패싯하는 데 사용됩니다. 예를 들어
|
중요
오라클 CDB 사용자(C## 접두사)의 경우 데이터소스 URL에서 #을(를) %23 (으)로 인코딩해 주십시오. 예: c##newrelic은(는) 다음과 같아야 합니다. c%23%23newrelic
명명 규칙
뉴렐릭의 올바른 엔티티와 연결되려면 메트릭 이름이 oracledb.로 시작해야 합니다. 다른 접두사가 있는 메트릭은 수집되지만 데이터베이스 엔티티 아래에 표시되지 않습니다.
엔티티 합성
server.address 및 server.port을(를) 데이터베이스 수신기가 사용하는 것과 동일한 값으로 설정하려면 resource/add_event_name 및 resource/add_host 프로세서를 추가하십시오. 이것이 없으면 커스텀 지표가 데이터베이스 엔티티에 연결되지 않습니다.
processors: 섹션에 프로세서를 추가하십시오:
processors: batch: resource/add_event_name: attributes: - key: server.address value: "<YOUR_DB_HOST>" action: upsert resource/add_host: attributes: - key: server.port value: "<YOUR_DB_PORT>" action: upsertPipeline 설정
기존 파이프라인과 함께 구성의 service.pipelines: 섹션에 metrics/custom 파이프라인을 추가하십시오:
service: pipelines: metrics/oracledb: receivers: [nroracledb] processors: [batch] exporters: [otlp/newrelic] logs/oracledb: receivers: [nroracledb] processors: [batch] exporters: [otlp/newrelic]
metrics/custom: receivers: [sqlquery/oracle] processors: [resource/add_event_name, resource/add_host, batch] exporters: [otlp/newrelic]중요
프로세서 목록에서 batch 앞에 resource/add_event_name 및 resource/add_host을(를) 모두 추가하십시오.
데이터를 검증하기 위한 NRQL
수집기를 다시 시작한 후 다음을 실행하여 커스텀 지표가 수신되는지 확인하십시오:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'oracledb.%'SINCE 1 hour ago문제점 해결 [#troubleshooting]
| 문제 | 원인 | 고치다 |
|---|---|---|
ORA-00942: table or view does not exist | 데이터베이스 사용자의 SELECT 권한 누락 | 사용자에게 SELECT ON <VIEW_NAME>을(를) 부여하십시오 |
missing port in address | # 사용자 이름/비밀번호가 URL 인코딩되지 않음 | 데이터 소스 URL에서 #를 %23로 변경하십시오 |
| 뉴렐릭에 데이터 없음 | server.address/server.port이(가) 설정되지 않았거나 일치하지 않습니다 | 올바른 값으로 resource/add_event_name 및 resource/add_host 프로세서를 추가하십시오. |
| 데이터베이스 엔티티 아래에 없는 메트릭 | 메트릭 이름에 필수 접두사 누락 | 메트릭 이름이 다음으로 시작하는지 확인하십시오 oracledb. |
위의 방법 중 어느 것으로도 문제가 해결되지 않는 경우, 수집기 자체 로그에 오류가 있는지 확인하십시오:
$sudo journalctl -u nrdot-collector -fSQL Server 수집기 설정의 receivers: 섹션 내에 기존 nrsqlserver 블록과 함께 sqlqueryreceiver 블록을 추가하십시오:
receivers: nrsqlserver: ...
sqlquery: driver: sqlserver
# Approach 1: Use the `host`, `port`, `database`, `username`, and `password` fields to connect to your database. The receiver will construct the datasource URL for you. # host: <YOUR_DB_HOST> # port: <YOUR_DB_PORT> # database: <YOUR_DATABASE_NAME> # username: <YOUR_DB_USERNAME> # password: <YOUR_DB_PASSWORD>
# Approach 2: Use the `datasource` field to provide a full connection string. datasource: "sqlserver://<YOUR_DB_USERNAME>:<YOUR_DB_PASSWORD>@<YOUR_DB_HOST>:<YOUR_DB_PORT>?database=<YOUR_DATABASE_NAME>" collection_interval: 30s queries: - sql: "<YOUR_CUSTOM_SQL>" metrics: - metric_name: sqlserver.<YOUR_METRIC_NAME> value_column: <VALUE_COLUMN> value_type: <VALUE_TYPE> data_type: <DATA_TYPE> unit: <UNIT> attribute_columns: ["<ATTRIBUTE_COLUMNS>"]
- sql: "<YOUR_CUSTOM_SQL>" metrics: - metric_name: sqlserver.<YOUR_METRIC_NAME> value_column: <VALUE_COLUMN> value_type: <VALUE_TYPE> data_type: <DATA_TYPE> unit: <UNIT> attribute_columns: ["<ATTRIBUTE_COLUMNS>"]각 메트릭에 대해 다음 파라미터를 설정하십시오:
매개변수 | 설명 |
|---|---|
| 서버 호스트명 또는 IP 주소입니다. 예를 들어,
|
| 서버 포트 번호입니다. 기본값은 다음으로 설정되어 있습니다
|
| SQL Server 사용자 이름입니다. Windows 도메인/GMSA 인증의 경우 생략하십시오. 예를 들어
|
| SQL Server 비밀번호입니다. Windows 도메인/GMSA 인증의 경우 생략합니다. 예를 들어
|
| 초기 연결 컨텍스트로 사용할 데이터베이스 이름입니다. 예를 들어
|
| 쿼리를 실행하고 메트릭을 수집하는 빈도입니다. 예:
,
|
| 실행할 SQL 쿼리입니다. 예를 들어, 중요사용자 지정 쿼리가 PII 또는 민감한 데이터를 수집하거나 노출하지 않도록 하십시오. |
| 뉴렐릭에 표시되는 메트릭 이름입니다. 일관성을 위해
접두사를 사용하십시오. 예를 들어
|
| 값이 메트릭 값이 되는 쿼리 결과의 열입니다. 예를 들어
|
| 값 열의 데이터 유형입니다. 옵션:
,
. 생략 시
로 기본 설정됩니다. 예를 들어
|
| OTLP 메트릭 유형입니다. 현재/스냅샷 값에
을(를) 사용하십시오. 누적 카운터에
을(를) 사용하십시오. 생략할 경우
(으)로 기본 설정됩니다. 예를 들어
|
| 메트릭 값의 측정 단위입니다. 뉴렐릭에서 메타데이터로 사용됩니다. 예를 들어
,
,
,
,
|
| 메트릭 레이블/차원이 되는 쿼리 결과의 열입니다. NRQL에서 필터링 및 패싯하는 데 사용됩니다. 예를 들어
|
명명 규칙
뉴렐릭의 올바른 엔티티와 연결되려면 메트릭 이름이 sqlserver.로 시작해야 합니다. 다른 접두사가 있는 메트릭은 수집되지만 데이터베이스 엔티티 아래에 표시되지 않습니다.
엔티티 합성
server.address 및 server.port를 데이터베이스 수신기에서 사용하는 것과 동일한 값으로 설정하는 resource/add_host 프로세서를 추가하십시오. 이것이 없으면 커스텀 지표가 데이터베이스 엔티티에 연결되지 않습니다.
processors: 섹션에 프로세서를 추가하십시오:
processors: resource/add_host: attributes: - key: server.address value: "<YOUR_DB_HOST>" action: upsert - key: server.port value: "<YOUR_DB_PORT>" action: upsertPipeline 설정
기존 파이프라인과 함께 구성의 service.pipelines: 섹션에 metrics/custom 파이프라인을 추가하십시오:
service: pipelines: metrics/custom: receivers: [sqlquery] processors: [resource/add_host, batch] exporters: [otlp]중요
프로세서 목록에서 batch 앞에 resource/add_host을(를) 추가합니다.
데이터를 검증하기 위한 NRQL
수집기를 다시 시작한 후 다음을 실행하여 커스텀 지표가 수신되는지 확인하십시오:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'sqlserver.%'SINCE 1 hour ago기존 nrmysql 블록과 함께 기존 mysql-config.yaml의 receivers: 섹션 내에 sqlqueryreceiver 블록을 추가해 주십시오:
receivers: nrmysql: ...
sql_query/mysql: driver: mysql
# Approach 1: Use the `host`, `port`, `database`, `username`, and `password` fields to connect to your database. The receiver will construct the datasource string for you. host: <YOUR_DB_HOST> port: <YOUR_DB_PORT> database: <YOUR_DATABASE_NAME> username: <YOUR_DB_USERNAME> password: <YOUR_DB_PASSWORD>
# Approach 2: Use the `datasource` field to provide a full connection string. # datasource: "<YOUR_DB_USERNAME>:<YOUR_DB_PASSWORD>@tcp(<YOUR_DB_HOST>:<YOUR_DB_PORT>)/<YOUR_DATABASE_NAME>"
collection_interval: 60s queries: - sql: "<YOUR_CUSTOM_SQL>" metrics: - metric_name: mysql.<YOUR_METRIC_NAME> value_column: <VALUE_COLUMN> value_type: <VALUE_TYPE> data_type: <DATA_TYPE> unit: <UNIT> attribute_columns: ["<ATTRIBUTE_COLUMNS>"]각 메트릭에 대해 다음 파라미터를 설정하십시오:
매개변수 | 설명 |
|---|---|
| MySQL 호스트 이름 또는 IP 주소입니다. 예를 들어,
|
| MySQL 포트 번호입니다. 기본값은
|
| 연결할 데이터베이스입니다. 예를 들어
|
| MySQL 모니터링 사용자 이름입니다. 예를 들어
|
| MySQL 모니터링 비밀번호입니다. |
| 쿼리를 실행하고 메트릭을 수집하는 빈도입니다. 예:
,
|
| 실행할 SQL 쿼리. 중요사용자 지정 쿼리가 PII 또는 민감한 데이터를 수집하거나 노출하지 않도록 하십시오. |
| 뉴렐릭에 표시되는 메트릭 이름입니다. 일관성을 위해
접두사를 사용해야 합니다. 예를 들어
|
| 값이 메트릭 값이 되는 쿼리 결과의 열입니다. 예를 들어
|
| 값 열의 데이터 유형입니다. 옵션:
,
. 생략 시
로 기본 설정됩니다. 예를 들어
|
| OTLP 메트릭 유형입니다. 현재/스냅샷 값에
을(를) 사용하십시오. 누적 카운터에
을(를) 사용하십시오. 생략할 경우
(으)로 기본 설정됩니다. 예를 들어
|
| 메트릭 값의 측정 단위입니다. 뉴렐릭에서 메타데이터로 사용됩니다. 예를 들어
,
,
,
,
|
| 메트릭 레이블/차원이 되는 쿼리 결과의 열입니다. NRQL에서 필터링 및 패싯하는 데 사용됩니다. 예를 들어
|
중요
MySQL의 datasource 연결 문자열은 <user>:<password>@tcp(<host>:<port>)/<dbname> 형식을 사용합니다. 여기에서 다른 데이터베이스의 연결 문자열 형식을 재사용하지 마십시오.
명명 규칙
뉴렐릭의 올바른 엔티티와 연결되려면 메트릭 이름이 mysql.로 시작해야 합니다. 다른 접두사가 있는 메트릭은 수집되지만 데이터베이스 엔티티 아래에 표시되지 않습니다.
Pipeline 설정
기존 파이프라인과 함께 구성의 service.pipelines: 섹션에 metrics/custom 파이프라인을 추가하십시오:
service: pipelines: metrics/mysql: receivers: [nrmysql] processors: [batch] exporters: [otlp/newrelic] metrics/custom: receivers: [sql_query/mysql] processors: [batch] exporters: [otlp/newrelic]데이터를 검증하기 위한 NRQL
수집기를 다시 시작한 후 다음을 실행하여 커스텀 지표가 수신되는지 확인하십시오:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'mysql.%'SINCE 1 hour ago문제점 해결 [#troubleshooting-mysql]
| 문제 | 원인 | 고치다 |
|---|---|---|
| 오류 1045: 사용자에 대한 액세스가 거부되었습니다 | 잘못된 사용자 이름/비밀번호 | 자격 증명을 다시 확인하고, 데이터소스 문자열을 직접 작성하는 대신 개별 필드 방식을 사용하십시오. |
| 오류 1146: 테이블이 존재하지 않음/SQL 구문 오류 | 사용자 지정 SQL이 이 MySQL/MariaDB 버전에 존재하지 않는 테이블/열을 참조하거나 지원되지 않는 구문을 사용합니다. | 수신기 구성에 추가하기 전에 먼저 동일한 사용자로 인스턴스에 대해 직접 쿼리를 테스트하십시오. |
| 데이터베이스 엔티티 아래에 없는 메트릭 | mysql. 접두사가 누락된 메트릭 이름 | 메트릭 이름이 다음으로 시작하는지 확인하십시오 mysql. |
| TLS 적용 서버에 연결하는 중 TLS/SSL 협상 오류가 발생했습니다. | 구성되지 않은 경우 드라이버는 기본적으로 TLS를 사용하지 않습니다. | 서버의 TLS 요구 사항에 맞게 additional_params 아래의 tls 파라미터를 설정하십시오. |
위의 방법 중 어느 것으로도 문제가 해결되지 않는 경우, 수집기 자체 로그에 오류가 있는지 확인하십시오:
$sudo journalctl -u nrdot-collector -f기존 nrpostgresql 블록과 함께 기존 postgres-config.yaml의 receivers: 섹션 내에 sqlqueryreceiver 블록을 추가해 주십시오:
receivers: nrpostgresql: ...
sql_query/postgres: driver: postgres
# Approach 1: Use the `host`, `port`, `database`, `username`, and `password` fields to connect to your database. The receiver will construct the datasource URL for you. host: <YOUR_DB_HOST> port: <YOUR_DB_PORT> database: <YOUR_DATABASE_NAME> username: <YOUR_DB_USERNAME> password: <YOUR_DB_PASSWORD> additional_params: sslmode: disable
# Approach 2: Use the `datasource` field to provide a full connection string. # datasource: "host=<YOUR_DB_HOST> port=<YOUR_DB_PORT> user=<YOUR_DB_USERNAME> password=<YOUR_DB_PASSWORD> dbname=<YOUR_DATABASE_NAME> sslmode=disable"
collection_interval: 60s queries: - sql: "<YOUR_CUSTOM_SQL>" metrics: - metric_name: postgresql.<YOUR_METRIC_NAME> value_column: <VALUE_COLUMN> value_type: <VALUE_TYPE> data_type: <DATA_TYPE> unit: <UNIT> attribute_columns: ["<ATTRIBUTE_COLUMNS>"]각 메트릭에 대해 다음 파라미터를 설정하십시오:
매개변수 | 설명 |
|---|---|
| 호스트명 또는 IP 주소입니다. 예를 들어,
|
| 포트 번호입니다. 기본값은
|
| 초기 연결 컨텍스트로 사용할 데이터베이스 이름입니다. 예를 들어
|
| PostgreSQL 데이터베이스 사용자 이름입니다. 예를 들어
|
| PostgreSQL 데이터베이스 비밀번호입니다. |
| 쿼리를 실행하고 메트릭을 수집하는 빈도입니다. 예:
,
|
| 실행할 SQL 쿼리. 중요사용자 지정 쿼리가 PII 또는 민감한 데이터를 수집하거나 노출하지 않도록 하십시오. |
| 뉴렐릭에 표시되는 메트릭 이름입니다. 일관성을 위해
접두사를 사용해야 합니다. 예를 들어
|
| 값이 메트릭 값이 되는 쿼리 결과의 열입니다. 예를 들어
|
| 값 열의 데이터 유형입니다. 옵션:
,
. 생략 시
로 기본 설정됩니다. 예를 들어
|
| OTLP 메트릭 유형입니다. 현재/스냅샷 값에
을(를) 사용하십시오. 누적 카운터에
을(를) 사용하십시오. 생략할 경우
(으)로 기본 설정됩니다. 예를 들어
|
| 메트릭 값의 측정 단위입니다. 뉴렐릭에서 메타데이터로 사용됩니다. 예를 들어
,
,
,
,
|
| 메트릭 레이블/차원이 되는 쿼리 결과의 열입니다. NRQL에서 필터링 및 패싯하는 데 사용됩니다. 예를 들어
|
중요
PostgreSQL 서버에 TLS가 필요한 경우 additional_params 아래(접근 방식 1) 또는 datasource 문자열(접근 방식 2)에서 sslmode을(를) 적절히 설정하십시오 ― 예를 들어 sslmode: require. 생략할 경우 기본 드라이버는 로컬이 아닌 연결에 대해 SSL을 협상하도록 기본 설정되며, 이는 SSL이 구성되지 않은 서버에서는 실패합니다.
명명 규칙
뉴렐릭의 올바른 엔티티와 연결되려면 메트릭 이름이 postgresql.로 시작해야 합니다. 다른 접두사가 있는 메트릭은 수집되지만 데이터베이스 엔티티 아래에 표시되지 않습니다.
엔티티 합성
nrpostgresql server.address 및 server.port에서 데이터베이스 엔티티를 합성합니다. 데이터베이스 수신기가 사용하는 것과 동일한 server.address/server.port 값을 부여하도록 resource/add_host 프로세서를 추가하십시오. 이것이 없으면 커스텀 지표가 데이터베이스 엔티티에 연결되지 않습니다.
processors: 섹션에 프로세서를 추가하십시오:
processors: batch: resource/add_host: attributes: - key: server.address value: "<YOUR_DB_HOST>" action: upsert - key: server.port value: "<YOUR_DB_PORT>" action: upsert중요
nrpostgresql 파이프라인에 이미 server.address/server.port (예: resource/postgresql)을(를) 설정하는 resource/* 프로세서가 있는 경우, 이를 복제하는 대신 아래의 metrics/custom 파이프라인에서 동일한 프로세서를 재사용하십시오 — 두 수신자는 동일한 엔티티에 연결하기 위해 동일한 값을 기록해야 합니다.
Pipeline 설정
기존 파이프라인과 함께 구성의 service.pipelines: 섹션에 metrics/custom 파이프라인을 추가하십시오:
service: pipelines: metrics/postgresql: receivers: [nrpostgresql] processors: [resource/add_host, batch] exporters: [otlp/newrelic] logs/postgresql: receivers: [nrpostgresql] processors: [resource/add_host, batch] exporters: [otlp/newrelic] metrics/custom: receivers: [sql_query/postgres] processors: [resource/add_host, batch] exporters: [otlp/newrelic]중요
프로세서 목록에서 batch 앞에 resource/add_host을(를) 추가합니다.
데이터를 검증하기 위한 NRQL
수집기를 다시 시작한 후 다음을 실행하여 커스텀 지표가 수신되는지 확인하십시오:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'postgresql.%'SINCE 1 hour ago문제점 해결 [#troubleshooting-postgresql]
| 문제 | 원인 | 고치다 |
|---|---|---|
pq: SSL is not enabled on the server | sslmode 설정되지 않았으며, 드라이버가 기본적으로 SSL을 협상하도록 설정되었습니다. | additional_params 아래 또는 datasource 문자열에서 sslmode: disable (또는 서버가 지원하는 모드)을(를) 설정하십시오. |
pq: password authentication failed for user | 잘못된 사용자 이름/비밀번호, 또는 원시 datasource 문자열에서 이스케이프되지 않은 특수 문자 | 접근 방식 1(개별 필드)을 사용하거나 ― 수신자가 자동으로 username/password을(를) URL 이스케이프 처리합니다 ― 다음에서 특수 문자를 수동으로 이스케이프 처리하십시오. datasource |
| 데이터베이스 엔티티 아래에 없는 메트릭 | 메트릭 이름에 필수 postgresql. 접두사가 누락되었거나 server.address/server.port이(가) 설정되지 않았거나 일치하지 않습니다. | 메트릭 이름이 postgresql.(으)로 시작하는지 확인하고, 올바른 호스트/포트 값을 사용하여 resource/add_host을(를) 추가(또는 기존 nrpostgresql 리소스 프로세서를 재사용)하십시오. |
위의 방법 중 어느 것으로도 문제가 해결되지 않는 경우, 수집기 자체 로그에 오류가 있는지 확인하십시오:
$sudo journalctl -u nrdot-collector -f