Le sqlqueryreceiver est un Récepteur OpenTelemetry Collector qui vous permet d’exécuter n’importe quelle requête SQL personnalisée sur votre base de données, et d’ingérer les résultats sous forme de métriques dans New Relic.
Utilisez ceci lorsque vous souhaitez monitorer des données non couvertes par les métriques nroracledbreceiver / nrsqlserverreceiver / nrmysqlreceiver / nrpostgresqlreceiver intégrées. Les métriques personnalisées collectées via sqlqueryreceiver apparaissent sous la même entité Oracle, SQL Server, MySQL, ou PostgreSQL dans New Relic que les données intégrées du Récepteur, à condition que les attributs de liaison d’entité soient configurés correctement.
Prérequis
- L’utilisateur de base de données configuré dans la source de données doit avoir le privilège
SELECTsur toute vue ou table que vous avez l’intention d’interroger. - Le binaire du collecteur doit inclure le composant
sqlqueryreceiver.
Configuration
Ajoutez le bloc sqlqueryreceiver dans la section receivers: de votre oracle-config.yaml existant, à côté du bloc nroracledb existant :
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: doubleDéfinissez les paramètres suivants pour chaque métrique :
paramètres | Description |
|---|---|
| Votre nom d’hôte ou adresse IP. Par exemple,
|
| Votre numéro de port. La valeur par défaut est définie sur
|
| Votre nom d’utilisateur de base de données Oracle. Par exemple
|
| Le mot de passe de votre base de données Oracle. |
| Le nom de votre service Oracle. Par exemple
|
| À quelle fréquence exécuter les requêtes et collecter les métriques. Par exemple,
,
|
| La requête SQL à exécuter. ImportantAssurez-vous que vos requêtes personnalisées ne collectent, ni n’exposent de PII, ou de données sensibles. |
| Le nom de votre métrique affiché dans New Relic. Utilisez le préfixe
par souci de cohérence. Par exemple
|
| La colonne du résultat de la requête dont la valeur devient la valeur de la métrique. Par exemple
|
| Type de données de la colonne de valeur. Options :
,
. Par défaut
si omis. Par exemple
|
| Type de métrique OTLP. Utilisez
pour les valeurs actuelles/instantanées. Utilisez
pour les compteurs cumulatifs. Par défaut
si omis. Par exemple
|
| Unité de mesure de la valeur de la métrique. Utilisé comme métadonnées dans New Relic. Par exemple
,
,
,
,
|
| Colonnes du résultat de la requête qui deviennent des étiquettes/dimensions de métrique. Utilisé pour filtrer et facetter dans NRQL. Par exemple
|
Important
Pour les utilisateurs de CDB Oracle (préfixe C##), encodez # en tant que %23 dans l’URL de la source de données. Par exemple : c##newrelic doit être c%23%23newrelic
Convention de nommage
Les noms de métriques doivent commencer par oracledb. pour être associés à l’entité correcte dans New Relic. Les métriques avec un préfixe différent seront ingérées mais n’apparaîtront pas sous l’entité de base de données.
Synthèse d’entité
Ajoutez les Processeurs resource/add_event_name et resource/add_host pour définir server.address et server.port sur les mêmes valeurs que celles utilisées par le Récepteur de base de données. Sans cela, les métriques personnalisées ne seront pas liées à l'entité de base de données.
Ajoutez les processeurs dans la section 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: upsertConfiguration du Pipeline
Ajoutez un pipeline metrics/custom dans la section service.pipelines: de la configuration, à côté des pipelines existants :
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]Important
Ajoutez resource/add_event_name et resource/add_host avant batch dans la liste des Processeurs.
NRQL pour valider les données
Après avoir redémarré le collecteur, exécutez ce qui suit pour confirmer que les métriques personnalisées arrivent :
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'oracledb.%'SINCE 1 hour agoDépannage [#troubleshooting]
| Problème | Cause | Réparer |
|---|---|---|
ORA-00942: table or view does not exist | Privilège SELECT manquant pour l’utilisateur de base de données | Accordez SELECT ON <VIEW_NAME> à l’utilisateur |
missing port in address | # dans le nom d’utilisateur / mot de passe non encodé en URL | Remplacez # par %23 dans l’URL de la source de données |
| Aucune donnée dans New Relic | server.address/server.port non défini ou non concordant | Ajoutez les processeurs resource/add_event_name et resource/add_host avec les valeurs correctes |
| Métriques ne figurant pas sous l’entité de base de données | Préfixe requis manquant dans le nom de métrique | Assurez-vous que les noms des métriques commencent par oracledb. |
Si aucune des solutions ci-dessus ne résout le problème, vérifiez les propres logs du collecteur pour y trouver des erreurs :
$sudo journalctl -u nrdot-collector -fAjoutez le bloc sqlqueryreceiver dans la section receivers: de votre configuration de collecteur SQL Server, à côté du bloc nrsqlserver existant :
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>"]Définissez les paramètres suivants pour chaque métrique :
paramètres | Description |
|---|---|
| Le nom d’hôte ou l’adresse IP de votre serveur. Par exemple,
|
| Votre numéro de port de serveur. La valeur par défaut est définie sur
|
| Votre nom d’utilisateur SQL Server. Omettre pour l’authentification de domaine Windows / GMSA. Par exemple
|
| Votre mot de passe SQL Server. Omettre pour l’authentification de domaine Windows / GMSA. Par exemple
|
| Le nom de votre base de données à utiliser comme contexte de connexion initial. Par exemple
|
| À quelle fréquence exécuter les requêtes et collecter les métriques. Par exemple,
,
|
| La requête SQL à exécuter. Par exemple, ImportantAssurez-vous que vos requêtes personnalisées ne collectent, ni n’exposent de PII, ou de données sensibles. |
| Le nom de votre métrique affiché dans New Relic. Utilisez le préfixe
par souci de cohérence. Par exemple
|
| La colonne du résultat de la requête dont la valeur devient la valeur de la métrique. Par exemple
|
| Type de données de la colonne de valeur. Options :
,
. Par défaut
si omis. Par exemple
|
| Type de métrique OTLP. Utilisez
pour les valeurs actuelles/instantanées. Utilisez
pour les compteurs cumulatifs. Par défaut
si omis. Par exemple
|
| Unité de mesure de la valeur de la métrique. Utilisé comme métadonnées dans New Relic. Par exemple
,
,
,
,
|
| Colonnes du résultat de la requête qui deviennent des étiquettes/dimensions de métrique. Utilisé pour filtrer et facetter dans NRQL. Par exemple
|
Convention de nommage
Les noms de métriques doivent commencer par sqlserver. pour être associés à l’entité correcte dans New Relic. Les métriques avec un préfixe différent seront ingérées mais n’apparaîtront pas sous l’entité de base de données.
Synthèse d’entité
Ajoutez un Processeur resource/add_host pour définir server.address et server.port sur les mêmes valeurs que celles utilisées par le Récepteur de base de données. Sans cela, les métriques personnalisées ne seront pas liées à l'entité de base de données.
Ajoutez le Processeur dans la section processors: :
processors: resource/add_host: attributes: - key: server.address value: "<YOUR_DB_HOST>" action: upsert - key: server.port value: "<YOUR_DB_PORT>" action: upsertConfiguration du Pipeline
Ajoutez un pipeline metrics/custom dans la section service.pipelines: de la configuration, à côté des pipelines existants :
service: pipelines: metrics/custom: receivers: [sqlquery] processors: [resource/add_host, batch] exporters: [otlp]Important
Ajoutez resource/add_host avant batch dans la liste des processeurs.
NRQL pour valider les données
Après avoir redémarré le collecteur, exécutez ce qui suit pour confirmer que les métriques personnalisées arrivent :
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'sqlserver.%'SINCE 1 hour agoAjoutez le bloc sqlqueryreceiver dans la section receivers: de votre mysql-config.yaml existant, à côté du bloc nrmysql existant :
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>"]Définissez les paramètres suivants pour chaque métrique :
paramètres | Description |
|---|---|
| Votre nom d’hôte MySQL ou adresse IP. Par exemple,
|
| Votre numéro de port MySQL. La valeur par défaut est
|
| La base de données à laquelle se connecter. Par exemple
|
| Votre nom d'utilisateur de monitoring MySQL. Par exemple
|
| Votre mot de passe de monitoring MySQL. |
| À quelle fréquence exécuter les requêtes et collecter les métriques. Par exemple,
,
|
| La requête SQL à exécuter. ImportantAssurez-vous que vos requêtes personnalisées ne collectent, ni n’exposent de PII, ou de données sensibles. |
| Le nom de votre métrique affiché dans New Relic. Doit être préfixé par
par souci de cohérence. Par exemple
|
| La colonne du résultat de la requête dont la valeur devient la valeur de la métrique. Par exemple
|
| Type de données de la colonne de valeur. Options :
,
. Par défaut
si omis. Par exemple
|
| Type de métrique OTLP. Utilisez
pour les valeurs actuelles/instantanées. Utilisez
pour les compteurs cumulatifs. Par défaut
si omis. Par exemple
|
| Unité de mesure de la valeur de la métrique. Utilisé comme métadonnées dans New Relic. Par exemple
,
,
,
,
|
| Colonnes du résultat de la requête qui deviennent des étiquettes/dimensions de métrique. Utilisé pour filtrer et facetter dans NRQL. Par exemple
|
Important
La chaîne de connexion datasource de MySQL utilise le format <user>:<password>@tcp(<host>:<port>)/<dbname>. Ne réutilisez pas le format de chaîne de connexion d’une autre base de données ici.
Convention de nommage
Les noms de métriques doivent commencer par mysql. pour être associés à l’entité correcte dans New Relic. Les métriques avec un préfixe différent seront ingérées mais n’apparaîtront pas sous l’entité de base de données.
Configuration du Pipeline
Ajoutez un pipeline metrics/custom dans la section service.pipelines: de la configuration, à côté du pipeline existant :
service: pipelines: metrics/mysql: receivers: [nrmysql] processors: [batch] exporters: [otlp/newrelic] metrics/custom: receivers: [sql_query/mysql] processors: [batch] exporters: [otlp/newrelic]NRQL pour valider les données
Après avoir redémarré le collecteur, exécutez ce qui suit pour confirmer que les métriques personnalisées arrivent :
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'mysql.%'SINCE 1 hour agoDépannage [#troubleshooting-mysql]
| Problème | Cause | Réparer |
|---|---|---|
| Erreur 1045 : accès refusé pour l'utilisateur | Nom d’utilisateur / mot de passe incorrect | Revérifiez les identifiants ; utilisez l’approche par champs individuels plutôt que de construire manuellement la chaîne de la source de données |
| Erreur 1146 : la table n’existe pas / erreur de syntaxe SQL | Le SQL personnalisé fait référence à une table/colonne qui n’existe pas sur cette version de MySQL/MariaDB, ou utilise une syntaxe non prise en charge | Testez d’abord la requête directement sur l’instance avec le même utilisateur avant de l’ajouter à la configuration du Récepteur |
| Métriques ne figurant pas sous l’entité de base de données | Préfixe mysql. manquant dans le nom de la métrique | Assurez-vous que les noms des métriques commencent par mysql. |
| Erreur de négociation TLS/SSL lors de la connexion à un serveur exigeant TLS | Le pilote n'utilise pas TLS par défaut, sauf s'il est configuré. | Définissez le paramètre tls sous additional_params pour répondre aux exigences TLS du serveur |
Si aucune des solutions ci-dessus ne résout le problème, vérifiez les propres logs du collecteur pour y trouver des erreurs :
$sudo journalctl -u nrdot-collector -fAjoutez le bloc sqlqueryreceiver dans la section receivers: de votre postgres-config.yaml existant, à côté du bloc nrpostgresql existant :
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>"]Définissez les paramètres suivants pour chaque métrique :
paramètres | Description |
|---|---|
| Votre nom d’hôte ou adresse IP. Par exemple,
|
| Votre numéro de port. La valeur par défaut est
|
| Le nom de votre base de données à utiliser comme contexte de connexion initial. Par exemple
|
| Votre nom d'utilisateur de base de données PostgreSQL. Par exemple
|
| Votre mot de passe de base de données PostgreSQL. |
| À quelle fréquence exécuter les requêtes et collecter les métriques. Par exemple,
,
|
| La requête SQL à exécuter. ImportantAssurez-vous que vos requêtes personnalisées ne collectent, ni n’exposent de PII, ou de données sensibles. |
| Le nom de votre métrique affiché dans New Relic. Doit être préfixé par
par souci de cohérence. Par exemple
|
| La colonne du résultat de la requête dont la valeur devient la valeur de la métrique. Par exemple
|
| Type de données de la colonne de valeur. Options :
,
. Par défaut
si omis. Par exemple
|
| Type de métrique OTLP. Utilisez
pour les valeurs actuelles/instantanées. Utilisez
pour les compteurs cumulatifs. Par défaut
si omis. Par exemple
|
| Unité de mesure de la valeur de la métrique. Utilisé comme métadonnées dans New Relic. Par exemple
,
,
,
,
|
| Colonnes du résultat de la requête qui deviennent des étiquettes/dimensions de métrique. Utilisé pour filtrer et facetter dans NRQL. Par exemple
|
Important
Si votre serveur PostgreSQL requiert TLS, définissez sslmode en conséquence sous additional_params (Approche 1) ou dans la chaîne datasource (Approche 2), par exemple sslmode: require. En cas d’omission, le pilote sous-jacent négocie par défaut le protocole SSL pour les connexions non locales, ce qui échoue avec un serveur qui n’est pas configuré pour cela.
Convention de nommage
Les noms de métriques doivent commencer par postgresql. pour être associés à l’entité correcte dans New Relic. Les métriques avec un préfixe différent seront ingérées mais n’apparaîtront pas sous l’entité de base de données.
Synthèse d’entité
nrpostgresql synthétise son entité de base de données à partir de server.address et server.port. Ajoutez un Processeur resource/add_host pour appliquer les mêmes valeurs server.address/server.port utilisées par le Récepteur de base de données. Sans cela, les métriques personnalisées ne seront pas liées à l’entité de base de données.
Ajoutez le Processeur dans la section processors: :
processors: batch: resource/add_host: attributes: - key: server.address value: "<YOUR_DB_HOST>" action: upsert - key: server.port value: "<YOUR_DB_PORT>" action: upsertImportant
Si votre pipeline nrpostgresql possède déjà un processeur resource/* définissant server.address/server.port (par exemple resource/postgresql), réutilisez ce même processeur dans le pipeline metrics/custom ci-dessous au lieu de le dupliquer : les deux récepteurs doivent appliquer des valeurs identiques pour être rattachés à la même entité.
Configuration du Pipeline
Ajoutez un pipeline metrics/custom dans la section service.pipelines: de la configuration, à côté des pipelines existants :
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]Important
Ajoutez resource/add_host avant batch dans la liste des processeurs.
NRQL pour valider les données
Après avoir redémarré le collecteur, exécutez ce qui suit pour confirmer que les métriques personnalisées arrivent :
SELECT uniques(metricName) FROM MetricWHERE otel.library.name LIKE '%sqlqueryreceiver%'AND metricName LIKE 'postgresql.%'SINCE 1 hour agoDépannage [#troubleshooting-postgresql]
| Problème | Cause | Réparer |
|---|---|---|
pq: SSL is not enabled on the server | sslmode non défini, le pilote a utilisé par défaut la négociation SSL | Définissez sslmode: disable (ou le mode pris en charge par votre serveur) sous additional_params, ou dans la chaîne datasource |
pq: password authentication failed for user | Nom d’utilisateur / mot de passe incorrect, ou caractères spéciaux non échappés dans une chaîne datasource brute | Utilisez l’approche 1 (champs individuels) — le Récepteur échappe automatiquement username/password au format URL — ou échappez manuellement les caractères spéciaux dans datasource |
| Métriques ne figurant pas sous l’entité de base de données | Le nom de la métrique ne comporte pas le préfixe postgresql. requis, ou server.address/server.port n’est pas défini ou ne correspond pas | Assurez-vous que les noms de métriques commencent par postgresql., et ajoutez resource/add_host (ou réutilisez le processeur de ressources nrpostgresql existant) avec les valeurs d'hôte/port correctes. |
Si aucune des solutions ci-dessus ne résout le problème, vérifiez les propres logs du collecteur pour y trouver des erreurs :
$sudo journalctl -u nrdot-collector -f