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各メトリクスに対して以下のパラメーターを設定します:
パラメータ | 説明 |
|---|---|
| ホスト名またはIPアドレス。例:
|
| ポート番号。デフォルト値は次のように設定されています
|
| Oracleデータベースのユーザー名。例
|
| Oracleデータベースのパスワード。 |
| Oracleサービス名。例
|
| クエリを実行してメトリクスを収集する頻度。例:
、
|
| 実行するSQLクエリ。 重要カスタムクエリがPIIや機密データを収集または公開しないようにしてください。 |
| New Relicに表示されるメトリクス名。一貫性を保つために、
プレフィックスを使用してください。例
|
| その値がメトリクスの値となる、クエリ結果の列。例
|
| 値の列のデータ型。オプション:
、
。省略した場合、デフォルトは
です。例
|
| OTLPメトリクスタイプ。現在/スナップショットの値には
を使用します。累積カウンターには
を使用します。省略した場合、デフォルトは
です。例
|
| メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:
、
、
、
、
|
| メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば
|
重要
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: 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に置き換えてください。 |
| New Relicにデータがありません | 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や機密データを収集または公開しないようにしてください。 |
| New Relicに表示されるメトリクス名。一貫性を保つために、
プレフィックスを使用してください。例
|
| その値がメトリクスの値となる、クエリ結果の列。例
|
| 値の列のデータ型。オプション:
、
。省略した場合、デフォルトは
です。例
|
| OTLPメトリクスタイプ。現在/スナップショットの値には
を使用します。累積カウンターには
を使用します。省略した場合、デフォルトは
です。例
|
| メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:
、
、
、
、
|
| メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば
|
命名規則
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: 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既存の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>"]各メトリクスに対して以下のパラメーターを設定します:
パラメータ | 説明 |
|---|---|
| MySQLのホスト名またはIPアドレス。例:
|
| MySQLのポート番号。デフォルト値は次のとおりです
|
| 接続するデータベース。例
|
| MySQL監視ユーザー名。例
|
| MySQLの監視パスワード。 |
| クエリを実行してメトリクスを収集する頻度。例:
、
|
| 実行するSQLクエリ。 重要カスタムクエリがPIIや機密データを収集または公開しないようにしてください。 |
| New Relicに表示されるメトリクス名。一貫性を保つため、
をプレフィックスとして付ける必要があります。例
|
| その値がメトリクスの値となる、クエリ結果の列。例
|
| 値の列のデータ型。オプション:
、
。省略した場合、デフォルトは
です。例
|
| OTLPメトリクスタイプ。現在/スナップショットの値には
を使用します。累積カウンターには
を使用します。省略した場合、デフォルトは
です。例
|
| メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:
、
、
、
、
|
| メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば
|
重要
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 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既存の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>"]各メトリクスに対して以下のパラメーターを設定します:
パラメータ | 説明 |
|---|---|
| ホスト名またはIPアドレス。例:
|
| ポート番号。デフォルト値は次のとおりです
|
| 初期接続コンテキストとして使用するデータベース名。例:
|
| PostgreSQL データベースのユーザー名。例
|
| PostgreSQLデータベースのパスワード。 |
| クエリを実行してメトリクスを収集する頻度。例:
、
|
| 実行するSQLクエリ。 重要カスタムクエリがPIIや機密データを収集または公開しないようにしてください。 |
| New Relicに表示されるメトリクス名。一貫性を保つため、
をプレフィックスとして付ける必要があります。例
|
| その値がメトリクスの値となる、クエリ結果の列。例
|
| 値の列のデータ型。オプション:
、
。省略した場合、デフォルトは
です。例
|
| OTLPメトリクスタイプ。現在/スナップショットの値には
を使用します。累積カウンターには
を使用します。省略した場合、デフォルトは
です。例
|
| メトリクスの値の測定単位。New Relicでメタデータとして使用されます。例:
、
、
、
、
|
| メトリクスのラベル/ディメンションになるクエリ結果の列。NRQLでのフィルタリングとファセットに使用されます。たとえば
|
重要
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 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