El sqlqueryreceiver es un receptor de OpenTelemetry Collector que permite ejecutar cualquier consulta SQL personalizada en la base de datos e ingerir los resultados como métricas en New Relic.
Úselo cuando desee monitorear datos que no estén cubiertos por las métricas integradas de nroracledbreceiver / nrsqlserverreceiver / nrmysqlreceiver / nrpostgresqlreceiver. Las métricas personalizadas recopiladas mediante sqlqueryreceiver aparecen bajo la misma entidad de Oracle, SQL Server, MySQL o PostgreSQL en New Relic que los datos del receptor integrado, siempre que los atributos de vinculación de entidades estén configurados correctamente.
Requisitos previos
- El usuario de la base de datos configurado en la fuente de datos debe tener el privilegio
SELECTen cualquier vista o tabla que pretenda consultar. - El binario del recolector debe incluir el componente
sqlqueryreceiver.
Configuración
Agregue el bloque sqlqueryreceiver dentro de la sección receivers: de oracle-config.yaml existente, junto al bloque nroracledb existente:
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: doubleEstablezca los siguientes parámetros para cada métrica:
Parámetro | Descripción |
|---|---|
| Su nombre de host o dirección IP. Por ejemplo,
|
| El número de puerto. El valor predeterminado está establecido en
|
| Su nombre de usuario de la base de datos Oracle. Por ejemplo
|
| La contraseña de su base de datos Oracle. |
| El nombre del servicio de Oracle. Por ejemplo
|
| Con qué frecuencia ejecutar las consultas y recopilar métricas. Por ejemplo,
,
|
| La consulta SQL a ejecutar. ImportanteAsegúrese de que sus consultas personalizadas no recopilen ni expongan PII o datos confidenciales. |
| El nombre de su métrica que se muestra en New Relic. Use el prefijo
para mantener la coherencia. Por ejemplo
|
| La columna del resultado de la consulta cuyo valor se convierte en el valor de la métrica. Por ejemplo
|
| Tipo de datos de la columna de valor. Opciones:
,
. Por defecto es
si se omite. Por ejemplo
|
| Tipo de métrica OTLP. Use
para valores actuales/de instantánea. Use
para contadores acumulativos. Por defecto es
si se omite. Por ejemplo
|
| Unidad de medida para el valor de la métrica. Utilizado como metadatos en New Relic. Por ejemplo
,
,
,
,
|
| Columnas del resultado de la consulta que se convierten en etiquetas/dimensiones de métrica. Se utiliza para filtrar y facetar en NRQL. Por ejemplo
|
Importante
Para los usuarios de Oracle CDB (prefijo C##), codifique # como %23 en la URL de la fuente de datos. Por ejemplo: c##newrelic debe ser c%23%23newrelic
Convención de nomenclatura
Los nombres de las métricas deben comenzar con oracledb. para asociarse con la entidad correcta en New Relic. Las métricas con un prefijo diferente se ingerirán, pero no aparecerán bajo la entidad de la base de datos.
Síntesis de entidad
Agregue los procesadores resource/add_event_name y resource/add_host para establecer server.address y server.port en los mismos valores utilizados por el receptor de la base de datos. Sin esto, las métricas personalizadas no se vincularán a la entidad de la base de datos.
Agregue los procesadores en la sección 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: upsertConfiguración del Pipeline
Agregue un pipeline metrics/custom en la sección service.pipelines: de la configuración, junto a los pipelines existentes:
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]Importante
Agregue tanto resource/add_event_name como resource/add_host antes de batch en la lista de procesadores.
NRQL para validar datos
Después de reiniciar el recolector, ejecute lo siguiente para confirmar que están llegando las métricas personalizadas:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'oracledb.%'SINCE 1 hour agoResolución de problemas [#troubleshooting]
| Problema | Causa | Arreglar |
|---|---|---|
ORA-00942: table or view does not exist | Al usuario de la base de datos le falta el privilegio SELECT | Otorgue SELECT ON <VIEW_NAME> al usuario |
missing port in address | # en nombre de usuario/contraseña no codificados en URL | Reemplace # con %23 en la URL de la fuente de datos |
| No hay datos en New Relic | server.address/server.port no establecido o no coincide | Agregue los procesadores resource/add_event_name y resource/add_host con los valores correctos |
| Métricas que no están bajo la entidad de base de datos | Nombre de la métrica sin el prefijo requerido | Asegúrese de que los nombres de las métricas comiencen con oracledb. |
Si nada de lo anterior resuelve el problema, revise los logs del propio recolector en busca de errores:
$sudo journalctl -u nrdot-collector -fAgregue el bloque sqlqueryreceiver dentro de la sección receivers: de la configuración del recolector de SQL Server, junto al bloque nrsqlserver existente:
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>"]Establezca los siguientes parámetros para cada métrica:
Parámetro | Descripción |
|---|---|
| El nombre de host o la dirección IP del servidor. Por ejemplo,
|
| El número de puerto del servidor. El valor predeterminado está establecido en
|
| Su nombre de usuario de SQL Server. Omita para la autenticación de dominio de Windows/GMSA. Por ejemplo
|
| Su contraseña de SQL Server. Omita para la autenticación de dominio de Windows/GMSA. Por ejemplo
|
| El nombre de su base de datos para usar como contexto de conexión inicial. Por ejemplo
|
| Con qué frecuencia ejecutar las consultas y recopilar métricas. Por ejemplo,
,
|
| La consulta SQL a ejecutar. Por ejemplo, ImportanteAsegúrese de que sus consultas personalizadas no recopilen ni expongan PII o datos confidenciales. |
| El nombre de su métrica que se muestra en New Relic. Use el prefijo
para mantener la coherencia. Por ejemplo
|
| La columna del resultado de la consulta cuyo valor se convierte en el valor de la métrica. Por ejemplo
|
| Tipo de datos de la columna de valor. Opciones:
,
. Por defecto es
si se omite. Por ejemplo
|
| Tipo de métrica OTLP. Use
para valores actuales/de instantánea. Use
para contadores acumulativos. Por defecto es
si se omite. Por ejemplo
|
| Unidad de medida para el valor de la métrica. Utilizado como metadatos en New Relic. Por ejemplo
,
,
,
,
|
| Columnas del resultado de la consulta que se convierten en etiquetas/dimensiones de métrica. Se utiliza para filtrar y facetar en NRQL. Por ejemplo
|
Convención de nomenclatura
Los nombres de las métricas deben comenzar con sqlserver. para asociarse con la entidad correcta en New Relic. Las métricas con un prefijo diferente se ingerirán, pero no aparecerán bajo la entidad de la base de datos.
Síntesis de entidad
Agregue un procesador resource/add_host para establecer server.address y server.port en los mismos valores utilizados por el receptor de la base de datos. Sin esto, las métricas personalizadas no se vincularán a la entidad de la base de datos.
Agregue el procesador en la sección processors::
processors: resource/add_host: attributes: - key: server.address value: "<YOUR_DB_HOST>" action: upsert - key: server.port value: "<YOUR_DB_PORT>" action: upsertConfiguración del Pipeline
Agregue un pipeline metrics/custom en la sección service.pipelines: de la configuración, junto a los pipelines existentes:
service: pipelines: metrics/custom: receivers: [sqlquery] processors: [resource/add_host, batch] exporters: [otlp]Importante
Agregue resource/add_host antes de batch en la lista de procesadores.
NRQL para validar datos
Después de reiniciar el recolector, ejecute lo siguiente para confirmar que están llegando las métricas personalizadas:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'sqlserver.%'SINCE 1 hour agoAgregue el bloque sqlqueryreceiver dentro de la sección receivers: de mysql-config.yaml existente, junto al bloque nrmysql existente:
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>"]Establezca los siguientes parámetros para cada métrica:
Parámetro | Descripción |
|---|---|
| El nombre de host o la dirección IP de MySQL. Por ejemplo,
|
| El número de puerto de MySQL. El valor predeterminado es
|
| La base de datos a la cual conectarse. Por ejemplo
|
| Su nombre de usuario de monitoreo de MySQL. Por ejemplo
|
| La contraseña de monitoreo de MySQL. |
| Con qué frecuencia ejecutar las consultas y recopilar métricas. Por ejemplo,
,
|
| La consulta SQL a ejecutar. ImportanteAsegúrese de que sus consultas personalizadas no recopilen ni expongan PII o datos confidenciales. |
| El nombre de su métrica que se muestra en New Relic. Debe tener el prefijo
por coherencia. Por ejemplo
|
| La columna del resultado de la consulta cuyo valor se convierte en el valor de la métrica. Por ejemplo
|
| Tipo de datos de la columna de valor. Opciones:
,
. Por defecto es
si se omite. Por ejemplo
|
| Tipo de métrica OTLP. Use
para valores actuales/de instantánea. Use
para contadores acumulativos. Por defecto es
si se omite. Por ejemplo
|
| Unidad de medida para el valor de la métrica. Utilizado como metadatos en New Relic. Por ejemplo
,
,
,
,
|
| Columnas del resultado de la consulta que se convierten en etiquetas/dimensiones de métrica. Se utiliza para filtrar y facetar en NRQL. Por ejemplo
|
Importante
La cadena de conexión datasource de MySQL utiliza el formato <user>:<password>@tcp(<host>:<port>)/<dbname>. No reutilice aquí el formato de la cadena de conexión de otra base de datos.
Convención de nomenclatura
Los nombres de las métricas deben comenzar con mysql. para asociarse con la entidad correcta en New Relic. Las métricas con un prefijo diferente se ingerirán, pero no aparecerán bajo la entidad de la base de datos.
Configuración del Pipeline
Agregue un pipeline metrics/custom en la sección service.pipelines: de la configuración, junto al pipeline existente:
service: pipelines: metrics/mysql: receivers: [nrmysql] processors: [batch] exporters: [otlp/newrelic] metrics/custom: receivers: [sql_query/mysql] processors: [batch] exporters: [otlp/newrelic]NRQL para validar datos
Después de reiniciar el recolector, ejecute lo siguiente para confirmar que están llegando las métricas personalizadas:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'mysql.%'SINCE 1 hour agoResolución de problemas [#troubleshooting-mysql]
| Problema | Causa | Arreglar |
|---|---|---|
| Error 1045: acceso denegado para el usuario | Nombre de usuario/contraseña incorrectos | Verifique las credenciales; utilice el enfoque de campos individuales en lugar de crear manualmente la cadena del origen de datos |
| Error 1146: la tabla no existe/error de sintaxis SQL | El SQL personalizado hace referencia a una tabla/columna que no existe en esta versión de MySQL/MariaDB, o utiliza una sintaxis no admitida | Pruebe primero la consulta directamente contra la instancia con el mismo usuario antes de agregarla a la configuración del receptor. |
| Métricas que no están bajo la entidad de base de datos | Falta el prefijo mysql. en el nombre de la métrica | Asegúrese de que los nombres de las métricas comiencen con mysql. |
| Error de negociación de TLS/SSL al conectarse a un servidor que requiere TLS | El controlador no usa TLS de forma predeterminada a menos que se configure | Configure el parámetro tls en additional_params para que coincida con los requisitos de TLS del servidor. |
Si nada de lo anterior resuelve el problema, revise los logs del propio recolector en busca de errores:
$sudo journalctl -u nrdot-collector -fAgregue el bloque sqlqueryreceiver dentro de la sección receivers: de postgres-config.yaml existente, junto al bloque nrpostgresql existente:
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>"]Establezca los siguientes parámetros para cada métrica:
Parámetro | Descripción |
|---|---|
| Su nombre de host o dirección IP. Por ejemplo,
|
| El número de puerto. El valor predeterminado es
|
| El nombre de su base de datos para usar como contexto de conexión inicial. Por ejemplo
|
| Su nombre de usuario de la base de datos PostgreSQL. Por ejemplo
|
| Su contraseña de la base de datos PostgreSQL. |
| Con qué frecuencia ejecutar las consultas y recopilar métricas. Por ejemplo,
,
|
| La consulta SQL a ejecutar. ImportanteAsegúrese de que sus consultas personalizadas no recopilen ni expongan PII o datos confidenciales. |
| El nombre de su métrica que se muestra en New Relic. Debe tener el prefijo
por coherencia. Por ejemplo
|
| La columna del resultado de la consulta cuyo valor se convierte en el valor de la métrica. Por ejemplo
|
| Tipo de datos de la columna de valor. Opciones:
,
. Por defecto es
si se omite. Por ejemplo
|
| Tipo de métrica OTLP. Use
para valores actuales/de instantánea. Use
para contadores acumulativos. Por defecto es
si se omite. Por ejemplo
|
| Unidad de medida para el valor de la métrica. Utilizado como metadatos en New Relic. Por ejemplo
,
,
,
,
|
| Columnas del resultado de la consulta que se convierten en etiquetas/dimensiones de métrica. Se utiliza para filtrar y facetar en NRQL. Por ejemplo
|
Importante
Si el servidor de PostgreSQL requiere TLS, configure sslmode en consecuencia en additional_params (enfoque 1) o en la cadena datasource (enfoque 2) —por ejemplo, sslmode: require. Cuando se omite, el controlador subyacente negocia SSL de forma predeterminada para las conexiones no locales, lo que falla en un servidor que no está configurado para ello.
Convención de nomenclatura
Los nombres de las métricas deben comenzar con postgresql. para asociarse con la entidad correcta en New Relic. Las métricas con un prefijo diferente se ingerirán, pero no aparecerán bajo la entidad de la base de datos.
Síntesis de entidad
nrpostgresql sintetiza su entidad de base de datos a partir de server.address y server.port. Agregue un procesador resource/add_host para marcar los mismos valores server.address/server.port que usa el receptor de la base de datos. Sin esto, las métricas personalizadas no se vincularán a la entidad de base de datos.
Agregue el procesador en la sección processors::
processors: batch: resource/add_host: attributes: - key: server.address value: "<YOUR_DB_HOST>" action: upsert - key: server.port value: "<YOUR_DB_PORT>" action: upsertImportante
Si su pipeline nrpostgresql ya tiene un procesador resource/* que establece server.address/server.port (por ejemplo, resource/postgresql), reutilice ese mismo procesador en el pipeline metrics/custom a continuación en lugar de duplicarlo —ambos receptores deben asignar valores idénticos para asociarse a la misma entidad.
Configuración del Pipeline
Agregue un pipeline metrics/custom en la sección service.pipelines: de la configuración, junto a los pipelines existentes:
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]Importante
Agregue resource/add_host antes de batch en la lista de procesadores.
NRQL para validar datos
Después de reiniciar el recolector, ejecute lo siguiente para confirmar que están llegando las métricas personalizadas:
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'postgresql.%'SINCE 1 hour agoResolución de problemas [#troubleshooting-postgresql]
| Problema | Causa | Arreglar |
|---|---|---|
pq: SSL is not enabled on the server | sslmode no establecido, el controlador usó de forma predeterminada la negociación de SSL | Establezca sslmode: disable (o el modo que admita su servidor) en additional_params o en la cadena datasource |
pq: password authentication failed for user | Nombre de usuario/contraseña incorrectos, o caracteres especiales no escapados en una cadena datasource sin procesar | Use el Enfoque 1 (campos individuales) —el receptor escapa username/password para URL automáticamente— o escape manualmente los caracteres especiales en datasource |
| Métricas que no están bajo la entidad de base de datos | Falta el prefijo postgresql. requerido en el nombre de la métrica, o server.address/server.port no están configurados o no coinciden | Asegúrese de que los nombres de las métricas comiencen con postgresql. y agregue resource/add_host (o reutilice el procesador de recursos nrpostgresql existente) con los valores correctos de host/puerto |
Si nada de lo anterior resuelve el problema, revise los logs del propio recolector en busca de errores:
$sudo journalctl -u nrdot-collector -f