SQLクエリレシーバー 🔗
SQL クエリレシーバーは、カスタム SQL クエリを使用して、データベース接続からメトリクスを生成します。サポートされているパイプラインは metrics
です。詳細については、パイプラインでデータを処理する を参照してください。
はじめに 🔗
以下の手順に従って、コンポーネントの設定とアクティベーションを行ってください:
Splunk Distribution of the OpenTelemetry Collector をホストまたはコンテナプラットフォームにデプロイします:
次のセクションで説明するように、SQL クエリレシーバーを設定します。
Collector を再起動します。
サンプル構成 🔗
レシーバーをアクティブにするには設定ファイルの receivers
セクションに sqlquery
を追加します:
receivers:
sqlquery:
driver: your.driver
datasource: "your_data_source"
queries:
- sql: "your_query"
次に、設定ファイルの service
セクションの metrics
パイプラインに、レシーバーを含めます:
service:
pipelines:
metrics:
receivers: [sqlquery]
完全な設定例は 例:映画データベースのクエリ を参照してください。
高度な設定 🔗
これらは、最も関連性の高い必須設定フィールドです:
driver
。データベースドライバの名前。postgres
、mysql
、snowflake
、sqlserver
、hdb
(SAP HANA)、またはoracle
(Oracle DB)のいずれか。datasource
。sql.Open
に渡されるデータソース値。これは通常、少なくともデータベース名と接続情報で構成されるドライバ固有の文字列です。ドライバのドキュメントでは、これを「接続文字列」と呼ぶこともあります。例:host=localhost port=5432 user=me password=s3cr3t sslmode=disable
。queries
。クエリとは、SQL ステートメントと、1つ以上のログおよび/またはメトリクスセクションのことです。詳細については、クエリの実行 を参照してください。
オプションのフィールドは以下の通りです:
collection_interval
。デフォルトでは10s
です。クエリの実行間隔。storage
。デフォルトでは""
です。処理結果を追跡するために使用するストレージ拡張のID。telemetry
。コンポーネント自身のテレメトリ(ログ、メトリクス、トレース)の設定を定義します。telemetry.logs
。コンポーネント自身のログの設定を定義します。telemetry.logs.query
。デフォルトではfalse
です。true
に設定すると、SQL クエリが実行されるたびに、クエリのテキストとパラメータの値が 「Running query」 というデバッグログとともに記録されます。
設定の一覧は 設定 を参照してください。
クエリの実行 🔗
クエリは、SQL文と1つ以上のログおよび/またはメトリクスセクションで構成されます:
少なくとも1つのログまたは1つのメトリクスセクションが必要です。
技術的には、ログとメトリクスの両方のセクションを1つのクエリセクションに入れることは可能ですが、ログとメトリクスのクエリの要件はまったく異なります。
クエリメトリクス 🔗
各メトリクススセクションは、metric_name
、value_column
、および追加のオプションフィールドで構成されます。クエリされた各メトリクスに対して、SQL クエリは、返された行ごとに1つのOTelメトリクスを生成します。
これらは、最も関連性の高い必須設定フィールドです:
metric_name
。OTel メトリクスに割り当てられた名前。value_column
。メトリクスのデータポイントの値を設定するために使用する、返されたデータセット内のカラム名。Oracle DB などの一部のドライバでは、大文字小文字を区別します。
関連するオプションフィールドは以下の通りです:
attribute_columns
。データポイントの属性設定に使用される、返されたデータセット内の列名のリスト。Oracle DB などの一部のドライバでは、大文字と小文字が区別されます。data_type
。gauge
(デフォルト)またはsum
。詳しくは メトリクスタイプ を参照してください。value_type
。int
(デフォルト)またはdouble
。monotonic
。デフォルトではfalse
です。累積和の値が単調増加するかどうかを示すブール値。ロールオーバーやリセットは行われません。aggregation
。cumulative
(デフォルト) またはdelta
。sum
メトリクスタイプにのみ適用されます。description
。メトリクスに適用される説明。unit
。メトリクスに適用される単位。static_attributes
。メトリクスに適用される静的属性。start_ts_column
。開始タイムスタンプを含むカラムの名前で、その値がメトリクスの開始タイムスタンプに適用されます。sum
メトリクスタイプにのみ適用されます。ts_column
。タイムスタンプを含む列の名前で、その値がメトリクスのタイムスタンプに適用されます。これは、最後に記録されたメトリクスのデータポイントの時間に応じて、現在のタイムスタンプになります。
例:映画データベースのクエリ 🔗
SQLクエリレシーバーを使用して、データベースから情報を引き出すことができます。
例えば、映画とそのジャンルのリストがある映画データベースがあるとします:
Name |
ジャンル |
---|---|
E.T. |
sci-fi |
スターウォーズ |
sci-fi |
ダイハード |
アクション |
count(*)
クエリは、ジャンル別に分類された映画を返します:
count |
ジャンル |
---|---|
2 |
sci-fi |
1 |
アクション |
以下の設定を使用する場合:
receivers:
sqlquery:
driver: postgres
datasource: "host=localhost port=5432 user=postgres password=s3cr3t sslmode=disable"
storage: file_storage
queries:
- sql: "select count(*) as count, genre from movie group by genre"
metrics:
- metric_name: movie.genres
value_column: "count"
attribute_columns: ["genre"]
static_attributes:
dbinstance: mydbinstance
設定のクエリは、各収集間隔で2つのメトリクスを返します:
メトリクス#0
記述子
名前: movie.genres
DataType: Gauge
NumberDataPoints #0
データポイント属性:
genre: STRING(sci-fi)
dbinstance: STRING(mydbinstance)
値:2
メトリクス#1
記述子
名前: movie.genres
DataType: Gauge
NumberDataPoints #0
データポイント属性:
genre: STRING(action)
dbinstance: STRING(mydbinstance)
値:1
例: oracle
ドライバで映画データベースを照会します。 🔗
Oracle DBドライバを使って接続し、上の例と同じテーブルスキーマと内容を照会します。
sqlquery:
# driver name: oracle
# username: otel
# password: password
# host: localhost
# container exposed port: 51521
# Oracle DB service name: XE
# Refer to Oracle Go Driver go_ora documentation for full connection string options
datasource: "oracle://otel:password@localhost:51521/XE"
driver: oracle
queries:
# Note: The table name may need to be preceded by the name of the user who created the table.
# If the table is created by an initialization script within a docker container, it would be referred
# to as "sys.movie", as the sys user runs initialization scripts. Permission would need to be granted
# to the "otel" user to access or modify the table in that case.
# This example assumes "otel" created the movie table.
- sql: "select count(*) as count, genre, avg(imdb_rating) as avg from otel.movie group by genre"
metrics:
- metric_name: genre.count
# Note that COUNT and GENRE are now all capital letters, the queries will return nothing if this isn't
# accounted for.
value_column: "COUNT"
attribute_columns: [ GENRE ]
- metric_name: genre.imdb
value_column: "AVG"
attribute_columns: [ GENRE ]
value_type: "double"
例:MySQL データソース形式 🔗
MySQL の datasource
フォーマットは user:password@tcp(host:port)/databasename
です。
NULL
値 🔗
注意
NULL
の値を生成するようなクエリは避けてください。
次のことに留意してください:
NULL
の値を生成するクエリは警告を記録します。NULL
値を生成するカラムを参照する設定では、追加のエラーが記録されます。
どちらの場合でも、レシーバーは作動し続けます。
設定 🔗
次の表に、SQL クエリレシーバーの設定オプションを示します:
トラブルシューティング 🔗
Splunk Observability Cloudをご利用のお客様で、Splunk Observability Cloudでデータを確認できない場合は、以下の方法でサポートを受けることができます。
Splunk Observability Cloudをご利用のお客様
Submit a case in the Splunk Support Portal .
Contact Splunk Support .
見込み客および無料トライアルユーザー様
Splunk Answers のコミュニティサポートで質問し、回答を得る
Splunk #observability ユーザーグループの Slack チャンネルに参加して、世界中の顧客、パートナー、Splunk 社員とのコミュニケーションを図る。参加するには、Get Started with Splunk Community マニュアルの チャットグループ を参照してください。