SQL クエリレシーバー
SQL クエリレシーバーは、カスタム 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]
完全な設定例については「Example: Query a movie database」を参照してください。
TCPを使用したMySQLデータソースの設定例
これは、user@unix(/mysql/run/mysql.sock)/schema/autocommit=trueでオートコミットモードを有効にして、MySQLデータソースをソケット経由でデータベースに接続する例です:
receivers:
sqlquery:
driver: your.driver
datasource: "user:password@tcp(host:port)/schema"
queries:
- sql: "your_query"
高度な設定
これらは、最も関連性の高い必須設定フィールドです:
-
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 つ以上のログまたはメトリクスのセクションのことです。詳しくは「Perform queries」を参照してください。
以下のフィールドはオプションです。
-
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 クエリレシーバーの設定オプションを示します。
同梱
https://raw.githubusercontent.com/splunk/collector-config-tool/main/cfg-metadata/receiver/sqlquery.yaml
トラブルシューティング
__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____
_________ __ ______ _____________ _____ _________
-
______ _ ____ __ ___ ______ _______ _______
-
_______ ______ ________
_________ __ ___________ _________ ___ ____ _____ _____
-
___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________
-
____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______