• /
  • EnglishEspañolFrançais日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

NRDOTを使用したSQLクエリレシーバー

|View as Markdown (English)

sqlqueryreceiverは、データベースに対して任意のカスタムSQLクエリを実行し、その結果をメトリクスとしてNew Relicに取り込むことができるOpenTelemetry Collectorレシーバーです。

組み込みのnroracledbreceiver/nrsqlserverreceiver/nrmysqlreceiver/nrpostgresqlreceiverメトリクスでカバーされていないデータをモニターする場合は、これを使用してください。エンティティリンク属性が正しく設定されている場合、sqlqueryreceiver経由で収集されたカスタムメトリックは、組み込みのレシーバーデータと同じNew Relic内のOracle、SQL Server、MySQL、またはPostgreSQLエンティティの下に表示されます。

前提条件

  • データソースで構成されたデータベースユーザーは、クエリを実行する予定のすべてのビューまたはテーブルに対するSELECT権限を持っている必要があります。
  • コレクターのバイナリには、sqlqueryreceiverコンポーネントが含まれている必要があります。

構成

既存のoracle-config.yamlのreceivers:セクション内に、既存のnroracledbブロックと並んで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

各メトリクスに対して以下のパラメーターを設定します:

パラメータ

説明

<YOUR_DB_HOST>

ホスト名またはIPアドレス。例:

10.12.0.4

<YOUR_DB_PORT>

ポート番号。デフォルト値は次のように設定されています

1433

<YOUR_DB_USERNAME>

Oracleデータベースのユーザー名。例

newrelic

<YOUR_DB_PASSWORD>

Oracleデータベースのパスワード。

<YOUR_SERVICE_NAME>

Oracleサービス名。例

master

collection_interval

クエリを実行してメトリクスを収集する頻度。例:

30s

、

60s

<YOUR_CUSTOM_SQL>

実行するSQLクエリ。

重要

カスタムクエリがPIIや機密データを収集または公開しないようにしてください。

<YOUR_METRIC_NAME>

New Relicに表示されるメトリクス名。一貫性を保つために、

oracledb.

プレフィックスを使用してください。例

oracledb.custom.wait_time_ms

<VALUE_COLUMN>

その値がメトリクスの値となる、クエリ結果の列。例

wait_time_ms

<VALUE_TYPE>

値の列のデータ型。オプション:

int

、

double

。省略した場合、デフォルトは

int

です。例

int

<DATA_TYPE>

OTLPメトリクスタイプ。現在/スナップショットの値には

gauge

を使用します。累積カウンターには

sum

を使用します。省略した場合、デフォルトは

gauge

です。例

gauge

<UNIT>

メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:

ms

、

By

、

s

、

%

、

1

<ATTRIBUTE_COLUMNS>

メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば

["wait_type", "database_name"]

重要

Oracle CDBユーザー(C##プレフィックス)の場合は、データソースURLで#を%23としてエンコードしてください。たとえば、c##newrelicは次のようにする必要があります。 c%23%23newrelic

命名規則

New Relicで正しいエンティティに関連付けるには、メトリクス名がoracledb.で始まる必要があります。異なるプレフィックスを持つメトリクスは取り込まれますが、データベースエンティティの下には表示されません。

エンティティ合成

resource/add_event_nameおよびresource/add_hostプロセッサーを追加して、server.addressとserver.portをデータベースレシーバーで使用されるのと同じ値に設定します。これを行わないと、カスタムメトリックはデータベースエンティティにリンクされません。

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: upsert

Pipeline設定

設定の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 Metric
WHERE 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に置き換えてください。
New Relicにデータがありませんserver.address/server.portが設定されていないか、一致しません正しい値で resource/add_event_name および resource/add_host プロセッサーを追加してください
データベースエンティティの下にないメトリクスメトリクス名に必須のプレフィックスがありません。メトリクス名が次で始まるようにしてください oracledb.

上記のいずれの方法でも問題が解決しない場合は、エラーがないかコレクター自体のログを確認してください:

bash
$
sudo journalctl -u nrdot-collector -f

SQL 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>"]

各メトリクスに対して以下のパラメーターを設定します:

パラメータ

説明

<YOUR_DB_HOST>

サーバーのホスト名またはIPアドレスです。例:

10.12.0.4

<YOUR_DB_PORT>

サーバーのポート番号。デフォルト値は次に設定されています

1433

<YOUR_DB_USERNAME>

SQL Serverのユーザー名です。Windowsドメイン/GMSA認証の場合は省略します。たとえば

newrelic

<YOUR_DB_PASSWORD>

SQL Serverのパスワード。Windowsドメイン/GMSA認証の場合は省略します。たとえば

secret

<YOUR_DATABASE_NAME>

初期接続コンテキストとして使用するデータベース名。例:

master

collection_interval

クエリを実行してメトリクスを収集する頻度。例:

30s

、

60s

<YOUR_CUSTOM_SQL>

実行するSQLクエリ。例: SELECT SUM(pages_kb) / 1024 AS size_mb, type FROM sys.dm_os_memory_clerks GROUP BY type

重要

カスタムクエリがPIIや機密データを収集または公開しないようにしてください。

<YOUR_METRIC_NAME>

New Relicに表示されるメトリクス名。一貫性を保つために、

sqlserver.

プレフィックスを使用してください。例

sqlserver.custom.wait_time_ms

<VALUE_COLUMN>

その値がメトリクスの値となる、クエリ結果の列。例

wait_time_ms

<VALUE_TYPE>

値の列のデータ型。オプション:

int

、

double

。省略した場合、デフォルトは

int

です。例

int

<DATA_TYPE>

OTLPメトリクスタイプ。現在/スナップショットの値には

gauge

を使用します。累積カウンターには

sum

を使用します。省略した場合、デフォルトは

gauge

です。例

gauge

<UNIT>

メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:

ms

、

By

、

s

、

%

、

1

<ATTRIBUTE_COLUMNS>

メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば

["wait_type", "database_name"]

命名規則

New Relicで正しいエンティティに関連付けるには、メトリクス名が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: upsert

Pipeline設定

設定の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 Metric
WHERE otel.library.name LIKE '%sqlqueryreceiver%'
AND metricName LIKE 'sqlserver.%'
SINCE 1 hour ago

既存のmysql-config.yamlのreceivers:セクション内に、既存のnrmysqlブロックと並んで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>"]

各メトリクスに対して以下のパラメーターを設定します:

パラメータ

説明

<YOUR_DB_HOST>

MySQLのホスト名またはIPアドレス。例:

10.12.0.4

<YOUR_DB_PORT>

MySQLのポート番号。デフォルト値は次のとおりです

3306

<YOUR_DATABASE_NAME>

接続するデータベース。例

information_schema

<YOUR_DB_USERNAME>

MySQL監視ユーザー名。例

newrelic

<YOUR_DB_PASSWORD>

MySQLの監視パスワード。

collection_interval

クエリを実行してメトリクスを収集する頻度。例:

30s

、

60s

<YOUR_CUSTOM_SQL>

実行するSQLクエリ。

重要

カスタムクエリがPIIや機密データを収集または公開しないようにしてください。

<YOUR_METRIC_NAME>

New Relicに表示されるメトリクス名。一貫性を保つため、

mysql.

をプレフィックスとして付ける必要があります。例

mysql.custom.wait_time_ms

<VALUE_COLUMN>

その値がメトリクスの値となる、クエリ結果の列。例

wait_time_ms

<VALUE_TYPE>

値の列のデータ型。オプション:

int

、

double

。省略した場合、デフォルトは

int

です。例

int

<DATA_TYPE>

OTLPメトリクスタイプ。現在/スナップショットの値には

gauge

を使用します。累積カウンターには

sum

を使用します。省略した場合、デフォルトは

gauge

です。例

gauge

<UNIT>

メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:

ms

、

By

、

s

、

%

、

1

<ATTRIBUTE_COLUMNS>

メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば

["wait_type", "database_name"]

重要

MySQLのdatasource接続文字列は、<user>:<password>@tcp(<host>:<port>)/<dbname>の形式を使用します。ここでは別のデータベースの接続文字列形式を再利用しないでください。

命名規則

New Relicで正しいエンティティに関連付けるには、メトリクス名が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 Metric
WHERE 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パラメーターを設定してください

上記のいずれの方法でも問題が解決しない場合は、エラーがないかコレクター自体のログを確認してください:

bash
$
sudo journalctl -u nrdot-collector -f

既存のpostgres-config.yamlのreceivers:セクション内に、既存のnrpostgresqlブロックと並んで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>"]

各メトリクスに対して以下のパラメーターを設定します:

パラメータ

説明

<YOUR_DB_HOST>

ホスト名またはIPアドレス。例:

10.12.0.4

<YOUR_DB_PORT>

ポート番号。デフォルト値は次のとおりです

5432

<YOUR_DATABASE_NAME>

初期接続コンテキストとして使用するデータベース名。例:

testdb

<YOUR_DB_USERNAME>

PostgreSQL データベースのユーザー名。例

newrelic

<YOUR_DB_PASSWORD>

PostgreSQLデータベースのパスワード。

collection_interval

クエリを実行してメトリクスを収集する頻度。例:

30s

、

60s

<YOUR_CUSTOM_SQL>

実行するSQLクエリ。

重要

カスタムクエリがPIIや機密データを収集または公開しないようにしてください。

<YOUR_METRIC_NAME>

New Relicに表示されるメトリクス名。一貫性を保つため、

postgresql.

をプレフィックスとして付ける必要があります。例

postgresql.custom.connections_by_state

<VALUE_COLUMN>

その値がメトリクスの値となる、クエリ結果の列。例

conn_count

<VALUE_TYPE>

値の列のデータ型。オプション:

int

、

double

。省略した場合、デフォルトは

int

です。例

int

<DATA_TYPE>

OTLPメトリクスタイプ。現在/スナップショットの値には

gauge

を使用します。累積カウンターには

sum

を使用します。省略した場合、デフォルトは

gauge

です。例

gauge

<UNIT>

メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:

ms

、

By

、

s

、

%

、

1

<ATTRIBUTE_COLUMNS>

メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば

["state"]

重要

PostgreSQLサーバーでTLSが必要な場合は、additional_params(アプローチ1)の下、またはdatasource文字列(アプローチ2)でsslmodeを適切に設定してください — たとえばsslmode: require。省略した場合、基盤となるドライバーはデフォルトで非ローカル接続に対してSSLをネゴシエートしますが、SSLが構成されていないサーバーに対しては失敗します。

命名規則

New Relicで正しいエンティティに関連付けるには、メトリクス名が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/*プロセッサ(たとえばresource/postgresql)がすでにある場合は、複製するのではなく、以下の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 Metric
WHERE otel.library.name LIKE '%sqlqueryreceiver%'
AND metricName LIKE 'postgresql.%'
SINCE 1 hour ago

トラブルシューティング [#troubleshooting-postgresql]

問題原因修理
pq: SSL is not enabled on the serversslmode 設定されていません、ドライバーはデフォルトで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リソース・プロセッサを再利用)してください

上記のいずれの方法でも問題が解決しない場合は、エラーがないかコレクター自体のログを確認してください:

bash
$
sudo journalctl -u nrdot-collector -f
Copyright © 2026 New Relic株式会社。

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