5 Telemetry Streamingの使用
この章では、Telemetry Streamingを使用してデータの取込みおよび問合せを行う方法について説明します。
トピック:
- メトリック・データの取込み
この項では、メトリック・データをTelemetry Streamingに取り込む様々な方法について説明します。 - メトリック・データの問合せ
この項では、Telemetry Streamingでメトリック・データを問い合せる様々な方法について説明します。
5.1 メトリック・データの取込み
この項では、メトリック・データをTelemetry Streamingに取り込む様々な方法について説明します。
Oracle AI Databaseの外部のクライアントの場合、Telemetry StreamingはORDSと統合され、ORDSエンドポイントを介したREST APIコールでTelemetry Streamingにデータを取り込むことができます。SQLクライアントの場合、Telemetry Streamingには、データを取り込むためのPL/SQLパッケージがあります。
5.1.1 PL/SQLを使用したメトリック・データの取込み
既存のOracleユーザーは、ワークスペースの取込みユーザーとして有効にできます。ただし、1人のユーザーは1つのワークスペースに対してのみ取込みユーザーとして追加できます。
DBMS_TELEMETRY_INGEST PL/SQLパッケージを使用すると、取込みユーザーは、単一のサンプル取込みデータまたはCLOBデータとしてデータをTelemetry Streamingに取り込むことができます。
表5-1 DBMS_TELEMETRY_INGESTパッケージ
| ファンクション | 説明 |
|---|---|
|
|
単一のメトリック・サンプル取込み用 |
|
|
|
関連項目:
DBMS_TELEMETRY_INGEST PL/SQLパッケージの詳細は、Oracle AI Database PL/SQLパッケージおよびタイプ・リファレンスのDBMS_TELEMETRY_INGESTを参照してください。
親トピック: メトリック・データの取込み
5.1.2 ORDSを介してREST APIを使用したメトリック・データの取込み
外部クライアントがORDSを介してメトリック・データをTelemetry Streamingにプッシュする場合は、ORDSエンドポイントを介してREST APIを使用できます。ORDSでは、OAuth2認可メカニズムを採用し、ORDSエンドポイントを使用してデータを取り込みます。このため、テレメトリORDS管理者またはワークスペース管理者が作成したクライアント資格証明(クライアントIDとクライアント・シークレットのペア)を使用して、要求を認証する必要があります。
OAuth2のクライアント資格証明フローは、2レッグ・プロセスです。ユーザーは、クライアント資格証明を使用してアクセス・トークンを取得します。その後、アクセス・トークンはORDSエンドポイントへのAPIコールの認証とデータの取込みに使用されます。
ORDS APIを保護するために、Telemetry Streamingでは次のことが保証されます:
-
すべてのREST APIは、OAuth2クライアント資格証明プロトコルを使用して認証されます。
-
ワークスペース管理ユーザー(既存のデータベース・ユーザー)は、ORDS管理ユーザーのOAuth資格証明(
client-id、client-secret)を取得できます。ノート:
ワークスペース管理ユーザーは、ORDS管理資格証明をフェッチする前に、
DBMS_TELEMETRY_ADMIN.ENABLE_WORKSPACE_ORDSを使用してORDSを有効にする必要があります。 -
ORDS取込みユーザーおよびORDS問合せユーザーを作成できるのは、管理権限を持つORDSユーザーのみです。
次の項では、取込みREST APIのREST APIドキュメントを示します。
ノート:
-
REST APIを使用する前に、ORDSがインストールされ、Telemetry StreamingがREST対応であることを確認してください。
-
ORDS取込みAPIコールを実行するには、認可に使用するOAuth2アクセス・トークンが必要です。トークンは、ORDS取込みユーザーのクライアントIDおよびクライアント・シークレットを指定することで、トークンURLを使用して取得できます。
関連項目:
ORDSインストールの詳細は、「Oracle REST Data Servicesのインストール」を参照してください。
REST APIを使用したデータの取込み
ORDS管理ユーザーを使用してORDS取込みユーザーを作成したら、次のAPIエンドポイントを介してデータを取り込むために使用できます。
表5-2 REST APIのサマリー
| APIタイプ | 要約 |
|---|---|
|
POST |
ORDS APIエンドポイント(テレメトリ・プロトコル)を使用して、データをTelemetry Streamingに取り込みます |
|
POST |
ORDS APIエンドポイント(ライン・プロトコル)を使用して、データをTelemetry Streamingに取り込みます |
| データの取込み(テレメトリ・プロトコル) | |
|---|---|
|
メソッド: |
POST |
|
パス: |
|
|
ユーザー: |
ORDS取込みユーザー |
|
要約: |
ORDS APIエンドポイント(テレメトリ・プロトコル)を使用して、データをTelemetry Streamingに取り込みます |
|
データ: |
|
|
HTTPコード: |
|
|
例: |
|
| データの取込み(ライン・プロトコル) | |
|---|---|
|
メソッド: |
POST |
|
パス: |
|
|
ユーザー: |
ORDS取込みユーザー |
|
要約: |
ORDS APIエンドポイント(ライン・プロトコル)を使用して、データをTelemetry Streamingに取り込みます |
|
データ: |
|
|
HTTPコード: |
|
|
例: |
|
cURLを使用した取込みの例
- 新しい取込みユーザーを追加します。
次のcURLコマンドを使用して、ワークスペースORDS管理アクセス・トークンを使用し、
INGESTロールを持つINGEST1という名前の新しいユーザーを追加します:リクエスト:curl -k --request POST -i \ -H "Authorization: Bearer {admin user token}" \ -H "Content-Type: application/json" \ --data '{ "user_name": "<USERNAME>", "role": "<ROLE>" }' \ -v <ADD_USER_URL>レスポンス:{"client_id":<client_id>, "client_secret":<client_secret key>}例:curl -k --request POST -i \ -H "Authorization: Bearer moVgM6Vi6TqJB0xbYezicA" \ -H "Content-Type: application/json" \ --data '{ "user_name": "INGEST1", "role": "INGEST" }' \ -v http://example.com:8085/ords/wksp1/add_userレスポンス:{"client_id":"aBcDefg1hij2k3l..","client_secret":"mNoPq45rst6u7xyz.."} - クライアントIDとクライアント・シークレットを使用してアクセス・トークンを取得します。
リクエスト:
curl -k --request POST \ --user $INGEST_USER_CLIENT_ID:$INGEST_USER_CLIENT_SECRET \ --data "grant_type=client_credentials" <TOKEN_URL>レスポンス:{"access_token":<token>, "token_type":<token type>, "expires_in":<time in seconds>}例:curl -k --request POST \ --user aBcDefg1hij2k3l..:mNoPq45rst6u7xyz.. \ --data "grant_type=client_credentials" <http://example.com:8085/ords/wksp1/oauth/token>レスポンス:{"access_token":"B1o38ikZ55tNMXsuPlksDQ","token_type":"bearer","expires_in":3600} - データを取り込みます。
リクエスト:
curl -k --request POST -i -H "Authorization: Bearer {ingest user token}" \ --header "Content-Type: application/json" \ --data @<file_name> -v <INGESTION URL>レスポンス:{"metrics_data_size":<num>,"metrics_ingested":<num>, "metrics_given":<num>,"metrics_metadata":<num>,"ingest_duration_ms":<time in ms>, "ingest_format":<format>,"ingest_method":<method>,"ingest_user_name":<ingest user name>}例(デフォルトのテレメトリ・プロトコルを使用):curl -k --request POST -i -H "Authorization: Bearer B1o38ikZ55tNMXsuPlksDQ" \ --header "Content-Type: application/json" \ --data @data.json -v https://example.com:8000/ords/workspace1/ingest1/ingestレスポンス:{"metrics_data_size":79,"metrics_ingested":1, "metrics_given":1,"metrics_metadata":1,"ingest_duration_ms":10, "ingest_format":"telemetry","ingest_method":"ords","ingest_user_name":"ingest1"}例(ライン・プロトコルを使用):curl -k --request POST -i -H "Authorization: Bearer B1o38ikZ55tNMXsuPlksDQ" \ --header "Content-Type: application/json" \ --data @data.json -v https://example.com:8000/ords/workspace1/ingest1/ingestlpレスポンス:{"metrics_data_size":79,"metrics_ingested":1, "metrics_given":1,"metrics_metadata":1,"ingest_duration_ms":10, "ingest_format":"line","ingest_method":"ords","ingest_user_name":"ingest1"}
親トピック: メトリック・データの取込み
5.2 メトリック・データの問合せ
この項では、Telemetry Streamingでメトリック・データを問い合せる様々な方法について説明します。
PromQLまたはSQLを使用して、Telemetry Streamingに取り込まれた時系列データを問い合せることができます。
- PromQLを使用したメトリック・データの問合せ
サポートされているPromQL問合せと、Telemetry Streamingで問合せに使用する方法について説明します。 - ORDSを介してREST APIを使用した問合せ
この項では、問合せに使用されるREST APIについて説明します。 - SQLを使用したメトリック・データの問合せ
Telemetry Streamingでの問合せにSQLを使用する方法について説明します。
親トピック: Telemetry Streamingの使用
5.2.1 PromQLを使用したメトリック・データの問合せ
サポートされているPromQL問合せと、Telemetry Streamingで問合せに使用する方法について説明します。
PromQLを使用してデータを問い合せるには、次のいずれかを使用します:
DBMS_TELEMETRY_QUERYパッケージを使用するPL/SQL API関連項目:
DBMS_TELEMETRY_QUERYPL/SQLパッケージの詳細は、Oracle AI Database PL/SQLパッケージおよびタイプ・リファレンスのDBMS_TELEMETRY_QUERYを参照してください。- ORDS RESTエンドポイント
REST APIを使用した問合せについては、この項で後述します。
Oracle AI Database 26aiリリース23.26.0では、PromQLコンストラクトのサブセットのみがサポートされています。
関連項目:
PromQLを使用した問合せの作成を開始するには、PromQLの問合せの基本を参照してください。
親トピック: メトリック・データの問合せ
5.2.1.1 DBMS_TELEMETRY_QUERYに対してサポートされるPromQL問合せ
各問合せカテゴリのDBMS_TELEMETRY_QUERYでは、次のタイプのPromQL問合せがサポートされています。
範囲/インスタントPromQL問合せ
- ベクトル・セレクタ
node_cpu_seconds_total{cpu="1"} - 関数(rate/irate)
rate(node_cpu_seconds_total{cpu="1"}[3m]) - 集計: sum、avg、count、max、min、stddev、stdvar、group、quantile、topk、bottomk、count_values
sum(node_cpu_seconds_total) min(node_boot_time_seconds{device!="eth0"}) stddev(node_disk_info{major!="11"}) group(container_spec_cpu_period{job="cadvisor"}) quantile(0.95,node_arp_entries{device=~"eth0"}) topk(5,node_boot_time_seconds{job="node"}) count_values("values",node_cpu_online) - 単位集計: sum、avg、count、max、min、stddev、stdvar、group、quantile、topk、bottomk、count_values
avg by(cpu)(node_cpu_online{job=~"node"}) count(go_gc_gogc_percent{job="node"}) stdvar by(bios_date)(node_disk_info{job="node"}) group by(address)(container_spec_cpu_period{job="cadvisor"}) quantile by(adminstate)(0.80,go_gc_gogc_percent{job="node"}) bottomk by(tags)(node_boot_time_seconds{job=~"node"}) count_values by(tags)("cpu",node_cpu_load)
ラベル問合せ
- タグ列または指定されたタグ・キーのすべての個別キーをフェッチし、対応するキーのすべての個別値をフェッチします。
シリーズ問合せ
- ラベル・フィルタやメトリック名など、特定の基準に一致する時系列範囲をフェッチします。
node_cpu_seconds_total{cpu="1"}
関連項目:
PromQL問合せの詳細は、PromQL問合せを参照してください。
親トピック: PromQLを使用したメトリック・データの問合せ
5.2.1.2 サポートされているPromQL問合せ演算子の使用
初期バージョンのDBMS_TELEMETRY_QUERYでサポートされるPromQL問合せの使用方法を次に示します。
範囲問合せ
PromQLの範囲問合せは、一定期間にわたる問合せです。
select dbms_telemetry_query.promql_range(promql_query, start_time_epoch, end_time_epoch, step_size_seconds, fetch_sql[optional]) from dual;ノート:
fetch_sql値は0または1のいずれかです。1の場合、PromQL問合せのSQL変換が返されます。0 (デフォルト値)の場合、SQLの実行後の結果がJSONとして返されます。
範囲問合せには次の4つのタイプがあります:
- 単純な式問合せ
select dbms_telemetry_query.promql_range('node_cpu_load{cpu="1"}',1389312400,1389312600,10) from dual; - 単純な集計問合せ(sum、avg、count、count_values、max、min、std deviation、std variance、group、quantile、top_k、bottom_k)
select dbms_telemetry_query.promql_range('sum(node_cpu_load{cpu="1"})',1389312400,1389312600,10) from dual; - 単純な単位集計問合せ(sum、avg、count、count_values、max、min、std deviation、std variance、group、quantile、top_k、bottom_k)
select dbms_telemetry_query.promql_range('sum by(tag)(node_cpu_load{cpu="1"})',1389312400,1389312600,10) from dual; - 関数(Rate/IRate)
select dbms_telemetry_query.promql_range('irate(node_cpu_load{cpu="1"}[5m])',1389312400,1389312600,10) from dual;
インスタント問合せ
PromQLのインスタント問合せでは、特定のタイムスタンプの時系列データが要求されます。
select dbms_telemetry_query.promql_instant(promql_query, instant_time_epoch, fetch_sql[optional]) from dual;ノート:
fetch_sql値は0または1のいずれかです。1の場合、PromQL問合せのSQL変換が返されます。0 (デフォルト値)の場合、SQLの実行後の結果がJSONとして返されます。
インスタント問合せには4つのタイプがあります。
- 単純な式問合せ
select dbms_telemetry_query.promql_instant('node_cpu_load{cpu="1"}',1389312600) from dual; - 単純な集計問合せ(sum、avg、count、count_values、max、min、std deviation、std variance、group、quantile、top_k、bottom_k)
select dbms_telemetry_query.promql_instant('sum(node_cpu_load{cpu="1"})',1389312600) from dual; - 単純な単位集計問合せ(sum、avg、count、count_values、max、min、std deviation、std variance、group、quantile、top_k、bottom_k)
select dbms_telemetry_query.promql_instant('sum by(tag)(node_cpu_load{cpu="1"})',1389312600) from dual; - 関数(Rate/IRate)
select dbms_telemetry_query.promql_instant('rate(node_cpu_load{cpu="1"}[3m])',1389312600) from dual;
ラベル問合せ
PromQLのラベル問合せは、個別キーまたは個別値をフェッチします。
select dbms_telemetry_query.promql_label(promql_query, start_time_epoch, end_time_epoch, fetch_sql[optional]) from dual;ノート:
fetch_sql値は0または1のいずれかです。1の場合、PromQL問合せのSQL変換が返されます。0 (デフォルト値)の場合、SQLの実行後の結果がJSONとして返されます。
ラベル問合せには、2つのタイプがあります。
- タグ内のすべての個別キーをフェッチします(promql問合せが空の場合)
select dbms_telemetry_query.promql_label(' ',1389312400,1389312600) from dual; - タグで特定のキーが持つことができるすべての個別値をフェッチします。
select dbms_telemetry_query.promql_label('cpu',1389312400,1389312600) from dual;
シリーズ問合せ
PromQLのシリーズ問合せは、指定されたPromQL問合せに一致する時系列のメタデータ(メトリック名およびタグ)をフェッチします。
select dbms_telemetry_query.promql_series(promql_query, start_time_epoch, end_time_epoch, fetch_sql[optional]) from dual;ノート:
fetch_sql値は0または1のいずれかです。1の場合、PromQL問合せのSQL変換が返されます。0 (デフォルト値)の場合、SQLの実行後の結果がJSONとして返されます。
select dbms_telemetry_query.promql_series('node_cpu_load{cpu="1"}',1389312400,1389312600) from dual;
関連項目:
PromQL問合せの詳細は、PromQL問合せを参照してください。
親トピック: PromQLを使用したメトリック・データの問合せ
5.2.2 ORDSを介してREST APIを使用した問合せ
この項では、問合せに使用されるREST APIについて説明します。
ORDSワークスペース管理者を使用してORDS問合せユーザーが作成されたら、そのユーザーは次のREST APIエンドポイントを介してデータの問合せまたは問合せ統計の表示を行うことができます。
ノート:
REST APIを使用する前に、ORDSがインストールされ、Telemetry StreamingがREST対応であることを確認してください。
関連項目:
ORDSインストールの詳細は、「Oracle REST Data Servicesのインストール」を参照してください。
表5-3 REST APIのサマリー
| APIタイプ | 要約 |
|---|---|
|
POST |
ORDS APIエンドポイントを使用したTelemetry Streamingデータの問合せ |
| データの問合せ | |
|---|---|
|
メソッド: |
POST |
|
パス: |
|
| 問合せタイプ: |
|
|
ユーザー: |
ORDS問合せユーザー |
|
要約: |
ORDS APIエンドポイントを使用したTelemetry Streamingデータの問合せ |
| 範囲問合せ | |
|---|---|
|
データ: |
|
|
HTTPコード: |
|
|
例 |
|
| インスタント問合せ | |
|---|---|
|
データ: |
|
|
HTTPコード: |
|
|
例 |
|
| シリーズ問合せ | |
|---|---|
|
データ: |
|
|
HTTPコード: |
|
|
例 |
|
| ラベル問合せ | |
|---|---|
|
データ: |
|
|
HTTPコード: |
|
|
例 |
|
cURLを使用した問合せの例
- 新しい問合せユーザーを追加します。
リクエスト:
curl -k --request POST -i \ -H "Authorization: Bearer {admin user token}" \ -H "Content-Type: application/json" \ --data '{ "user_name": "<USERNAME>", "role": "<ROLE>" }' \ -v <ADD_USER_URL>レスポンス:{"client_id":<client_id>, "client_secret":<client_secret key>}例:curl -k --request POST -i \ -H "Authorization: Bearer moVgM6Vi6TqJB0xbYezicA" \ -H "Content-Type: application/json" \ --data '{ "user_name": "QUERY1", "role": "QUERY" }' \ -v http://example.com:8085/ords/wksp1/add_userレスポンス:{"client_id":"fymGQ8uO8zuPTiBWrw8CEw..","client_secret":"fPJ3RcJlR_XEmlrC276dEg.."} - 問合せユーザーのアクセス・トークンを生成します。
client_idおよびclient_secretを使用してOAuthトークンを生成します。リクエスト:curl -k --request POST \ --user $QUERY_USER_CLIENT_ID:$QUERY_USER_CLIENT_SECRET \ --data "grant_type=client_credentials" <TOKEN_URL>レスポンス:{"access_token":<token>, "token_type":<token type>, "expires_in":<time in seconds>}例:curl -X POST \ --user fymGQ8uO8zuPTiBWrw8CEw..:fPJ3RcJlR_XEmlrC276dEg.. \ --data "grant_type=client_credentials" \ http://example.com:8085/ords/wksp1/oauth/tokenレスポンス:{"access_token":"GVCvNXcqRG9OBZM98zHPcQ","token_type":"bearer","expires_in":3600} - アクセス・トークンを使用して、PromQL範囲/PromQLインスタント/PromQL時系列/PromQLラベル問合せを実行します。
生成されたトークン(
GVCvNXcqRG9OBZM98zHPcQなど)を使用して、QUERY1ユーザーとしてPromQLエンドポイントを問い合せます。次の例は、各問合せタイプの問合せ要求および応答を示しています。
PromQLの範囲:
例:curl -k --request POST -i -H "Authorization: Bearer GVCvNXcqRG9OBZM98zHPcQ" \ --header "Content-Type: application/json" \ --data '{ "promql_query": "met1", "start_time": 1759752400, "end_time": 1759752700, "step_size": 10}' \ -v http://example.com:8085/ords/wksp1/QUERY1/promql_rangeレスポンス:{ "status" : "success", "data" : { "resultType" : "matrix", "result" : [ { "metric" : { "__name__" : "met1", "tag1" : "val1" }, "values" : [ [ 1759752590, "10.000000" ] ] } ] } }PromQLインスタント
例:curl -k --request POST -i -H "Authorization: Bearer GVCvNXcqRG9OBZM98zHPcQ" \ --header "Content-Type: application/json" \ --data '{ "promql_query": "met1", "point_time" : 1751460370}' \ -v http://example.com:8085/ords/wksp1/QUERY1/promql_pointレスポンス:{ "status" : "success", "data" : { "resultType" : "vector", "result" : [ { "metric" : { "__name__" : "met1", "tag1" : "val1" }, "value" : [ 1759752700, "10.000000" ] } ] } }PromQLの時系列
例:curl -k --request POST -i -H "Authorization: Bearer GVCvNXcqRG9OBZM98zHPcQ" \ --header "Content-Type: application/json" \ --data '{ "promql_query": "met1", "start_time": 1759752400, "end_time": 1759752700}' \ -v http://example.com:8085/ords/wksp1/QUERY1/promql_seriesレスポンス:{ "status" : "success", "data" : [ { "__name__" : "met1", "tag1" : "val1" } ] }PromQLラベル
例:curl -k --request POST -i -H "Authorization: Bearer GVCvNXcqRG9OBZM98zHPcQ" \ --header "Content-Type: application/json" \ --data '{ "promql_query": "tag1", "start_time": 1759752400, "end_time": 1759752700}' \ -v http://example.com:8085/ords/wksp1/QUERY1/promql_labelレスポンス:{ "status" : "success", "data" : [ "val1" ] }
親トピック: メトリック・データの問合せ
5.2.3 SQLを使用したメトリック・データの問合せ
Telemetry Streamingでの問合せにSQLを使用する方法について説明します。
Telemetry StreamingはOracle AI Database上に構築されているため、時系列データを問い合せるSQLをサポートしています。SQLを使用する利点は、データに対するより優れたインサイトが得られる複雑な問合せを作成できることです。
ワークスペース問合せユーザーは、SQLを使用してワークスペースのTM$<WORKSPACE_NAME>.TELEMETRY_METRICSビューのメトリック・データにアクセスできます。
select metric_name, metric_tags, metric_value, metric_time from TM$WORKSPACE1.TELEMETRY_METRICS.親トピック: メトリック・データの問合せ