LogHub (SLS) データソースを使用すると、Simple Log Service (SLS) との間でデータの読み書きが可能になります。このトピックでは、DataWorks が LogHub (SLS) のデータ同期をどのようにサポートするかについて説明します。
特徴
Simple Log Service (SLS) は、以下のデータ同期シナリオで使用できます。
-
異なるリージョン間
-
異なる Alibaba Cloud アカウント間
-
同一の Alibaba Cloud アカウント内
-
パブリッククラウドと金融クラウドのアカウント間
制限事項
Data Integration が LogHub (SLS) にオフラインで書き込みを行う際、フェールオーバー後にタスクが再実行されると、データの重複が発生する可能性があります。これは、LogHub (SLS) がべき等ではないためです。
サポートされているフィールドタイプ
Data Integration は、以下の LogHub (SLS) フィールドタイプの読み書きをサポートしています。
フィールドタイプ | オフライン読み取り (LogHub (SLS) Reader) | オフライン書き込み (LogHub (SLS) Writer) | リアルタイム読み取り |
STRING | サポートされています | サポートされています | サポートされています |
詳細:
オフラインモードで LogHub (SLS) にデータを書き込む場合
サポートされているすべてのデータ型は、LogHub (SLS) に書き込まれる前に STRING 型に変換されます。次の表に、LogHub (SLS) Writer のデータ型変換を示します。
サポートされている Data Integration の内部タイプ
LogHub (SLS) への書き込み時のデータ型
LONG
STRING
DOUBLE
STRING
STRING
STRING
DATE
STRING
BOOLEAN
STRING
BYTES
STRING
リアルタイムモードで LogHub (SLS) からデータを読み取る場合
デフォルトでは、以下のメタデータフィールドが含まれます。
LogHub (SLS) リアルタイム同期フィールド
データ型
説明
__time__
STRING
SLS の予約フィールド:__time__。ログデータが書き込まれる際に指定されたログ時刻です。これは秒単位の UNIX タイムスタンプです。
__source__
STRING
SLS の予約フィールド:__source__。ログのソースデバイスです。
__topic__
STRING
SLS の予約フィールド:__topic__。トピック名です。
__tag__:__receive_time__
STRING
ログがサーバーに到着した時刻です。パブリック IP アドレスを記録する機能を有効にすると、サーバーは受信時にこのフィールドを生ログに追加します。これは秒単位の UNIX タイムスタンプです。
__tag__:__client_ip__
STRING
ログソースデバイスのパブリック IP アドレスです。パブリック IP アドレスを記録する機能を有効にすると、サーバーは受信時にこのフィールドを生ログに追加します。
__tag__:__path__
STRING
Logtail によって収集されたログファイルのパスです。Logtail は自動的にこのフィールドをログに追加します。
__tag__:__hostname__
STRING
Logtail がデータを収集するマシンのホスト名です。Logtail は自動的にこのフィールドをログに追加します。
データソースの作成
データソースの設定
データ同期タスクを開発する前に、DataWorks で対応するデータソースを作成する必要があります。詳細については、「データソースの管理」をご参照ください。各パラメーターの詳細な説明は、設定 UI 上のヒントで確認できます。
アカウント間データソースの作成
この例では、アカウント B で設定されたタスクを使用して、アカウント A の LogHub サービスからアカウント B の MaxCompute サービスにデータを同期する方法を示します。アカウント間のデータ同期については、以下の点にご注意ください。
-
アカウント A の AccessKey ID と AccessKey Secret を使用して、LogHub (SLS) データソースを作成します。
この設定により、アカウント B はアカウント A のすべての Simple Log Service (SLS) プロジェクトからデータを同期できます。
-
アカウント A の RAM ユーザー (例:A1) の AccessKey ID と AccessKey Secret を使用して、LogHub (SLS) データソースを作成します。
-
アカウント A は、RAM ユーザー A1 に
AliyunLogFullAccessやAliyunLogReadOnlyAccessなどの Simple Log Service (SLS) の一般的な権限を付与します。詳細については、「RAM ユーザーの作成と権限付与」をご参照ください。説明AliyunLogFullAccessおよびAliyunLogReadOnlyAccessシステムポリシーを付与すると、RAM ユーザーはメインアカウントのすべての Simple Log Service リソースをクエリできます。 -
アカウント A は、RAM ユーザー A1 に Simple Log Service (SLS) のカスタム権限ポリシーを付与します。
アカウント A は、 ページに移動し、[ポリシーの作成] をクリックします。
権限付与の詳細については、「RAM の概要」および「概要」をご参照ください。
以下のポリシーに基づいて権限を付与した後、アカウント B は RAM ユーザー A1 を使用して、Simple Log Service (SLS) の
project_name1およびproject_name2プロジェクトからのみデータを同期できます。{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*", "log:CreateConsumerGroup", "log:UpdateConsumerGroup", "log:DeleteConsumerGroup", "log:ListConsumerGroup", "log:ConsumerGroupUpdateCheckPoint", "log:ConsumerGroupHeartBeat", "log:GetConsumerGroupCheckPoint" ], "Resource": [ "acs:log:*:*:project/project_name1", "acs:log:*:*:project/project_name1/*", "acs:log:*:*:project/project_name2", "acs:log:*:*:project/project_name2/*" ], "Effect": "Allow" } ] }
-
データ同期タスクの開発
同期タスクの設定のエントリポイントと手順については、以下の設定ガイドをご参照ください。
LogHub をソースとして使用する場合、LogHub のクエリ構文または構造化プロセス言語 (SPL) のステートメントを使用してデータをフィルタリングできます。構文の詳細については、「付録2:フィルタリングのための SPL 構文」をご参照ください。
単一テーブルのオフライン同期タスクの設定
詳細については、「コードレス UI の使用」および「コードエディタの使用」をご参照ください。
説明コードレス UI で同期タスクを設定する場合、パラメーターのフォーマットが「付録1:スクリプト例とパラメーターの説明」で説明されているフォーマットと一致していることを確認してください。
コードエディタのすべてのパラメーターとスクリプト例については、「付録1:スクリプト例とパラメーターの説明」をご参照ください。
単一テーブルのリアルタイム同期タスクの設定
手順については、「単一テーブルのリアルタイム同期タスクの設定」をご参照ください。
データベース全体のリアルタイム同期タスクの設定
詳細については、「データベース全体のリアルタイム同期タスクの設定」をご参照ください。
よくある質問
Data Integration に関するその他のよくある質問については、「Data Integration に関するよくある質問」をご参照ください。
付録1:スクリプト例とパラメーターの説明
コードエディタを使用したバッチ同期タスクの設定
コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプトフォーマット要件に基づいて、スクリプト内で関連パラメーターを設定する必要があります。詳細については、「コードエディタの使用」をご参照ください。以下では、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明します。
Reader スクリプトの例
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"LogHub",// プラグイン名。
"parameter":{
"datasource":"",// データソース。
"column":[// フィールド。
"col0",
"col1",
"col2",
"col3",
"col4",
"C_Category",
"C_Source",
"C_Topic",
"C_MachineUUID", // トピック。
"C_HostName", // ホスト名。
"C_Path", // パス。
"C_LogTime" // イベント時刻。
],
"beginDateTime":"",// データ消費の開始時刻。
"batchSize":"",// 一度に Simple Log Service からクエリするデータエントリの数。
"endDateTime":"",// データ消費の終了時刻。
"fieldDelimiter":",",// 列のデリミタ。
"logstore":""// 送信先の Logstore の名前。
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// エラーレコードの数。
},
"speed":{
"throttle":true,// throttle が false に設定されている場合、mbps パラメーターは効果がなく、データレートは制限されません。throttle が true に設定されている場合、データレートは制限されます。
"concurrent":1, // 同時実行ジョブの数。
"mbps":"12"// 最大データレート。1 mbps = 1 MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Reader スクリプトのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
endPoint | Simple Log Service のエンドポイントです。エンドポイントは、プロジェクトとそのログデータにアクセスするために使用される URL です。エンドポイントは、プロジェクトが配置されている Alibaba Cloud リージョンとプロジェクト名に関連しています。各リージョンのエンドポイントについては、「エンドポイント」をご参照ください。 | はい | なし |
accessId | Simple Log Service へのアクセスに使用される AccessKey ID です。ユーザーを識別します。 | はい | なし |
accessKey | Simple Log Service へのアクセスに使用される AccessKey Secret です。ユーザーを認証します。 | はい | なし |
project | 送信先の Simple Log Service プロジェクトの名前です。プロジェクトは、Simple Log Service におけるリソース管理の単位であり、リソースの分離と制御に使用されます。 | はい | なし |
logstore | 送信先の Logstore の名前です。Logstore は、Simple Log Service におけるログデータの収集、ストレージ、クエリの単位です。 | はい | なし |
batchSize | 一度に Simple Log Service からクエリするデータエントリの数です。 | いいえ | 128 |
column | 各データエントリの列名です。Simple Log Service のメタデータを同期列として設定できます。Simple Log Service は、トピック、一意のマシングループ識別子、ホスト名、パス、ログ時刻などのメタデータをサポートしています。 説明 列名では大文字と小文字が区別されます。メタデータの書き方については、「Simple Log Service のマシングループ」をご参照ください。 | はい | なし |
beginDateTime |
データ消費の開始オフセットです。これは、ログデータが LogHub (SLS) に到着した時刻です。このパラメーターは時間範囲の開始を指定し、その時刻を含みます。時刻は yyyyMMddHHmmss 形式の文字列である必要があります (例:20180111013000)。このパラメーターは DataWorks のスケジューリングパラメーターと組み合わせて使用できます。 たとえば、ノード設定ページの右側にある [スケジューリング設定] タブで、Parameter を 説明
|
はい |
なし |
endDateTime |
データ消費の終了オフセットです。このパラメーターは時間範囲の終了を指定し、その時刻を含みません。時刻は yyyyMMddHHmmss 形式の文字列である必要があります (例:20180111013010)。このパラメーターは DataWorks のスケジューリングパラメーターと組み合わせて使用できます。 たとえば、ノード設定ページの右側にある [スケジューリング設定] タブで、Parameter を endDateTime=${yyyymmdd} に設定します。次に、Log End Time を ${endDateTime}000000 に設定します。これにより、ログの終了時刻がビジネス日付の翌日の 00:00:00 に設定されます。詳細については、「サポートされているスケジューリングパラメーターのフォーマット」をご参照ください。 重要
|
はい |
なし |
query | LogHub クエリ構文または SPL ステートメントを使用して LogHub のデータをフィルタリングします。SPL (構造化プロセス言語) は、SLS がログを処理するために使用する構文です。 | はい | なし |
LogHub から読み取った後にデータが欠落している場合は、LogHub コンソールに移動し、receive_time メタデータフィールドがタスクに設定された時間範囲内にあるかどうかを確認してください。
Writer スクリプトの例
{
"type": "job",
"version": "2.0",// バージョン番号。
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "LogHub",// プラグイン名。
"parameter": {
"datasource": "",// データソース。
"column": [// フィールド。
"col0",
"col1",
"col2",
"col3",
"col4",
"col5"
],
"topic": "",// トピックを選択します。
"batchSize": "1024",// バッチ送信でのレコード数。
"logstore": ""// 送信先の Simple Log Service Logstore の名前。
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""// エラーレコードの数。
},
"speed": {
"throttle":true,// throttle が false に設定されている場合、mbps パラメーターは効果がなく、データレートは制限されません。throttle が true に設定されている場合、データレートは制限されます。
"concurrent":3, // 同時実行ジョブの数。
"mbps":"12"// 最大データレート。1 mbps = 1 MB/s。
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}Writer スクリプトのパラメーター
LogHub (SLS) Writer は、Data Integration フレームワークを介して Reader からデータを取得します。その後、Writer はサポートされている Data Integration のデータ型を STRING 型に変換します。レコード数が指定された batchSize に達すると、データは Simple Log Service Java SDK を使用して一度に LogHub (SLS) にプッシュされます。
パラメーター | 説明 | 必須 | デフォルト値 |
endpoint | Simple Log Service のエンドポイントです。エンドポイントは、プロジェクトとそのログデータにアクセスするために使用される URL です。エンドポイントは、プロジェクトが配置されている Alibaba Cloud リージョンとプロジェクト名に関連しています。各リージョンのエンドポイントについては、「エンドポイント」をご参照ください。 | はい | なし |
accessKeyId |
Simple Log Service (SLS) にアクセスするための AccessKey ID です。 |
はい |
なし |
accessKeySecret | Simple Log Service へのアクセスに使用される AccessKeySecret です。 | はい | なし |
project | 送信先の Simple Log Service プロジェクトの名前です。 | はい | なし |
logstore | 送信先の Logstore の名前です。Logstore は、Simple Log Service におけるログデータの収集、ストレージ、クエリの単位です。 | はい | なし |
topic | 送信先の Simple Log Service の トピック名です。 | いいえ | 空の文字列 |
batchSize | 一度に LogHub (SLS) に同期するデータエントリの数です。デフォルト値は 1,024 です。最大値は 4,096 です。 説明 一度に LogHub (SLS) に同期されるデータのサイズは 5 MB を超えることはできません。1つのデータエントリのサイズに基づいて、一度にプッシュするエントリの数を調整してください。 | いいえ | 1,024 |
column | 各データエントリの列名です。 | はい | なし |
付録2:フィルタリングのための SPL 構文
LogHub をソースとして使用する場合、LogHub のクエリ構文または構造化プロセス言語 (SPL) のステートメントを使用して LogHub からデータをフィルタリングできます。次の表に構文を示します。
SPL の詳細については、「SPL 構文」をご参照ください。
シナリオ | SQL ステートメント | SPL ステートメント |
データフィルタリング | |
|
フィールドの処理とフィルタリング | 特定のフィールドを選択して名前を変更します: |
|
データクレンジング (SQL 関数の呼び出し) | データ型の変換、時刻の解析など: | データ型の変換、時刻の解析など: |
フィールド抽出 | 正規表現による抽出: JSON 抽出: |
|