DataWorks の Data Integration を使用すると、TSDB Writer を利用して Alibaba Cloud Lindorm TSDB データベースにデータポイントを書き込むことができます。このトピックでは、TSDB Writer のデータ書き込み機能について説明します。
サポートされるバージョン
TSDB Writer は、Lindorm TSDB のすべてのバージョンと HiTSDB 2.4.x 以降をサポートしています。他のバージョンとの互換性は保証されていません。
制限事項
TSDB Writer は、サーバーレスリソースグループ (推奨) および Data Integration 専用リソースグループ をサポートしています。
TSDB Writer は、コードエディタでのみタスクを設定できます。
仕組み
TSDB Writer プラグインは、TSDB クライアント (hitsdb-client) を使用して TSDB インスタンスに接続し、HTTP API を使用してデータポイントを書き込みます。書き込み API の詳細については、「SDK リファレンス」をご参照ください。
サポートされるフィールドタイプ
`sourceDbType` が `TSDB` に設定されている場合、つまりソースが TSDB Reader または OpenTSDB Reader である場合、プラグインはソースデータを JSON 文字列として直接書き込みます。`sourceDbType` が `RDB` に設定されている場合、つまりソースがリレーショナルデータベースである場合、プラグインはデータをリレーショナルデータベースからのレコードとして解析します。次のセクションでは、`sourceDbType` が `RDB` に設定されている場合の `columnType` の設定と、対応する `column` に書き込むことができるデータの型について説明します。
データモデル | columnType の設定 | データの型 |
データタグ | tag | 文字列。タグはデータソースの特性を記述するもので、通常は時間とともに変化しません。 |
データ生成時間 | timestamp | タイムスタンプ。タイムスタンプは、データが生成された時点を表します。書き込み操作中に指定することも、システムが自動的に生成することもできます。 |
データコンテンツ | field_string | このフィールドの値は文字列です。フィールドは、データソースの測定されたメトリックを記述するもので、通常は時間とともに変化します。 |
field_double | このフィールドの値は数値型です。フィールドは、データソースの測定されたメトリックを記述するもので、通常は時間とともに変化します。 | |
field_boolean | このフィールドの値はブール型です。フィールドは、データソースの測定されたメトリックを記述するもので、通常は時間とともに変化します。 |
データ同期タスクの開発
同期タスクの設定のエントリポイントと手順については、以下の設定ガイドをご参照ください。
手順については、「コードエディタでタスクを設定する」をご参照ください。
コードエディタでの設定に関するすべてのパラメーターとサンプルスクリプトについては、「付録:スクリプトのデモとパラメーターの説明」をご参照ください。
付録:スクリプトのデモとパラメーターの説明
コードエディタを使用したバッチ同期タスクの設定
コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプトフォーマットの要件に基づいて、スクリプト内の関連パラメーターを設定する必要があります。詳細については、「コードエディタでタスクを設定する」をご参照ください。以下では、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明します。
Writer スクリプトのデモ
RDB から TSDB へのデフォルト設定 (推奨)
{ "type": "job", "version": "2.0", "steps": [ { "stepType": "stream",// stream プラグインは、特定の RDB タイプのプラグインの JSON に置き換えることができます。RDB タイプのデータベースには、MySQL、Oracle、PostgreSQL、DRDS が含まれます。 "parameter": {}, "name": "Reader", "category": "reader" }, { "stepType": "tsdb", "parameter": { "endpoint": "http://localhost:8242", "username": "xxx", "password": "xxx", "sourceDbType": "RDB", "batchSize": 256, "columnType": [ "tag", "tag", "field_string", "field_double", "timestamp", "field_bool" ], "column": [ "tag1", "tag2", "field1", "field2", "timestamp", "field3" ], "multiField": "true", "table": "testmetric", "ignoreWriteError": "false", "database": "default" }, "name": "Writer", "category": "writer" } ], "setting": { "errorLimit": { "record": "0" }, "speed": { "throttle":true,// throttle が false に設定されている場合、mbps パラメーターは無視され、速度制限は無効になります。throttle が true に設定されている場合、速度制限は有効になります。 "concurrent":1, // 同時ジョブ数。 "mbps":"12"// 速度制限。ここでは、1 mbps = 1 MB/秒 です。 } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } }OpenTSDB プロトコルをサポートするデータベースから TSDB にデータを同期する:
{ "type": "job", "version": "2.0", "steps": [ { "stepType": "opentsdb", "parameter": { "endpoint": "http://localhost:4242", "column": [ "m1", "m2", "m3", "m4", "m5", "m6" ], "startTime": "2019-01-01 00:00:00", "endTime": "2019-01-01 03:00:00" }, "name": "Reader", "category": "reader" }, { "stepType": "tsdb", "parameter": { "endpoint": "http://localhost:8242" }, "name": "Writer", "category": "writer" } ], "setting": { "errorLimit": { "record": "0" }, "speed": { "throttle":true,// throttle が false に設定されている場合、mbps パラメーターは無視され、速度制限は無効になります。throttle が true に設定されている場合、速度制限は有効になります。 "concurrent":1, // 同時ジョブ数。 "mbps":"12"// 速度制限。ここでは、1 mbps = 1 MB/秒 です。 } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } }OpenTSDB (単一値) プロトコルを使用して TSDB に書き込む (非推奨):
{ "type": "job", "version": "2.0", "steps": [ { "stepType": "stream",// stream プラグインは、特定の RDB タイプのプラグインの JSON に置き換えることができます。RDB タイプのデータベースには、MySQL、Oracle、PostgreSQL、DRDS が含まれます。 "parameter": {}, "name": "Reader", "category": "reader" }, { "stepType": "tsdb", "parameter": { "endpoint": "http://localhost:8242", "username": "xxx", "password": "xxx", "sourceDbType": "RDB", "batchSize": 256, "columnType": [ "tag", "tag", "field_string", "field_double", "timestamp", "field_boolean" ], "column": [ "tag1", "tag2", "field_metric_1", "field_metric_2", "timestamp", "field_metric_3" ], "ignoreWriteError": "false" }, "name": "Writer", "category": "writer" } ], "setting": { "errorLimit": { "record": "0" }, "speed": { "throttle":true,// throttle が false に設定されている場合、mbps パラメーターは無視され、速度制限は無効になります。throttle が true に設定されている場合、速度制限は有効になります。 "concurrent":1, // 同時ジョブ数。 "mbps":"12"// 速度制限。ここでは、1 mbps = 1 MB/秒 です。 } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } }説明宛先の TSDB テーブル名 (メトリック) は、`column` 内のフィールドに対応する列名から派生します。上記の設定に基づき、リレーショナルデータの 1 行が `field_metric_1`、`field_metric_2`、`field_metric_3` の 3 つのメトリックに書き込まれます。
Writer スクリプトのパラメーター
データソース | パラメーター | 説明 | 必須 | デフォルト値 |
共通パラメーター | sourceDbType | データソースのタイプ。 | いいえ | TSDB 説明 有効な値は `TSDB` と `RDB` です。`TSDB` には OpenTSDB、Prometheus、TimeScale が含まれます。`RDB` には MySQL、Oracle、PostgreSQL、DRDS が含まれます。 |
endpoint | TSDB インスタンスの HTTP エンドポイント。プロダクトコンソールにログインしてエンドポイントを取得します。 | はい。フォーマットは http://IP:Port です。 | なし | |
database | データをインポートする TSDB データベースの名前。 | いいえ | default 説明 事前に TSDB でデータベースを作成する必要があります。 | |
username | TSDB データベースのユーザー名。TSDB で認証が有効になっている場合に必要です。 | いいえ | なし | |
batchSize | 各バッチで書き込むデータエントリの数。`batchSize` が大きいと、タスクにより多くのメモリが必要になります。 | いいえ。データの型は INT です。値は 0 より大きい必要があります。 | 100 | |
ソースが TSDB | maxRetryTime | 失敗後の再試行回数。 | いいえ。データの型は INT です。値は 1 より大きい必要があります。 | 3 |
ignoreWriteError | このパラメーターが true に設定されている場合、書き込みエラーは無視され、書き込み操作は続行されます。指定された再試行回数後に書き込み操作が失敗した場合、同期タスクは終了します。 | いいえ。データの型は BOOL です。 | false | |
ソースが RDB | table | TSDB にインポートするテーブル (メトリック) の名前。multiField が `false` に設定されている場合、このパラメーターを指定する必要はありません。代わりに、`column` フィールドに対応するメトリックを指定します。 | multiField が true の場合に必須。 | なし |
multiField | HTTP API を使用して、複数の値 (フィールド) を TSDB に書き込むことができます。 説明 Lindorm TSDB のネイティブ SQL 機能を使用して HTTP API 経由で書き込まれたデータにアクセスする場合、事前に TSDB でテーブルを作成する必要があります。そうしないと、TSDB HTTP API を使用してのみデータをクエリできます。詳細については、「複数値データのクエリ」をご参照ください。 | 必須。 | false 説明 現在の TSDB バージョンでは、複数値の書き込みにはこの値を `true` に設定する必要があります。 | |
column | リレーショナルデータベース内のテーブルのフィールド名。 | はい | なし 説明 フィールドの順序は、Reader プラグインの `column` パラメーターで設定されたフィールドの順序と同じである必要があります。 | |
columnType | リレーショナルデータベーステーブルのフィールドがマップされる TSDB のタイプ。サポートされているタイプは次のとおりです:
| はい | なし 説明 フィールドの順序は、Reader プラグインで設定された列フィールドの順序と一致する必要があります。 | |
batchSize | 各バッチで書き込むデータエントリの数。 | いいえ。データの型は INT です。値は 0 より大きい必要があります。 | 100 |
パフォーマンスレポート
パフォーマンステストのデータ特性
メトリック:メトリックは `m` として指定されます。
tagkv:最初の 4 つの tagkv の組み合わせにより、
10 × 20 × 100 × 100 = 2,000,000の時系列が生成されます。最後の IP アドレスは 2,000,000 の時系列に対応し、1 から自動的にインクリメントされます。tag_k
tag_v
zone
z1~z10
cluster
c1~c20
group
g1~100
app
a1~a100
ip
ip1~ip2,000,000
value:メジャー値は 1 から 100 までのランダムな値です。
interval:収集間隔は 10 秒です。データは 3 時間取り込まれます。総データ量は
3 × 60 × 60 / 10 × 2,000,000 = 2,160,000,000データポイントです。
パフォーマンステストの結果
チャネル数
Data Integration 速度 (レコード/秒)
Data Integration トラフィック (MB/秒)
1
129,753
15.45
2
284,953
33.70
3
385,868
45.71