すべてのプロダクト
Search
ドキュメントセンター

DataWorks:LogHub (SLS) データソース

最終更新日:Aug 01, 2026

LogHub (SLS) データソースは、DataWorks の Simple Log Service (SLS) と他のデータソース間の双方向データ同期を提供します。

特徴

Simple Log Service (SLS) は、以下のデータ同期シナリオをサポートしています。

  • 異なるリージョン間での LogHub と MaxCompute などのデータソース間のデータ同期。

  • 異なる Alibaba Cloud アカウント間での LogHub と MaxCompute などのデータソース間のデータ同期。

  • 同じ Alibaba Cloud アカウント内での LogHub と MaxCompute などのデータソース間のデータ同期。

  • パブリッククラウドと金融クラウドのアカウント間での LogHub と MaxCompute などのデータソース間のデータ同期。

制限事項

Data Integration が LogHub (SLS) にオフライン書き込みを実行する際、LogHub (SLS) はべき等ではないため、フェイルオーバー後にタスクが再実行されるとデータが重複する可能性があります。

サポートされているフィールドタイプ

Data Integration は、読み取りと書き込みのために以下の LogHub (SLS) フィールドタイプをサポートしています。

フィールドタイプ

オフライン読み取り (LogHub (SLS) Reader)

オフライン書き込み (LogHub (SLS) Writer)

リアルタイム読み取り

STRING

サポートされています

サポートされています

サポートされています

詳細:

  • オフラインモードで LogHub (SLS) にデータを書き込む場合

    すべてのデータ型は、LogHub (SLS) に書き込まれる前に STRING に変換されます。以下の表にデータ型の変換を示します。

    サポートされている 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 でデータソースを作成します。手順については、「データソースの作成」をご参照ください。設定パラメーターの詳細な説明については、設定ページの各パラメーターのツールチップをご参照ください。

アカウント間でのデータソースの作成

次の例は、アカウント B が Data Integration で同期タスクを設定し、アカウント A の LogHub データをアカウント B の MaxCompute に同期する方法を示しています。アカウント間のシナリオに関する注意事項:

  1. アカウント A の AccessKey ID と AccessKey Secret を使用して、LogHub データソースを作成します。

    この場合、アカウント B はアカウント A の下のすべての SLS プロジェクトからデータを同期できます。

  2. アカウント A の RAM ユーザー A1 の AccessKey ID と AccessKey Secret を使用して、LogHub データソースを作成します。

    • アカウント A は、RAM ユーザー A1 に一般的な SLS 権限を付与します:AliyunLogFullAccess と AliyunLogReadOnlyAccess。詳細については、「RAM ユーザーへの権限付与」をご参照ください。

      説明

      AliyunLogFullAccess と AliyunLogReadOnlyAccess システムポリシーを RAM ユーザーにアタッチすると、その RAM ユーザーは Alibaba Cloud アカウント配下のすべての SLS リソースにアクセスできます。

    • アカウント A は、RAM ユーザー A1 に SLS のカスタム権限を付与します。

      アカウント A で Resource Access Management (RAM) コンソール > 権限管理 > アクセスポリシー ページにログインし、[権限ポリシーの作成] をクリックします。

      権限付与の詳細については、「アクセス制御の概要」および「RAM カスタム権限付与の例」をご参照ください。

      以下のポリシーを使用すると、アカウント B は RAM ユーザー A1 を使用して、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 文 (SLS 処理言語、SLS がログを処理するために使用する構文) を使用して LogHub のデータをフィルタリングできます。構文の詳細については、「付録 1:スクリプトのデモとパラメーターの説明」をご参照ください。

単一テーブルのオフライン同期タスクの設定ガイド

単一テーブルのリアルタイム同期タスクの設定ガイド

手順については、「単一テーブルのリアルタイム同期タスクの設定」をご参照ください。

データベース全体のリアルタイム同期およびその他のデータベースレベルの同期タスクの設定ガイド

手順については、「データベース全体のリアルタイム同期タスクの設定」をご参照ください。

よくある質問

その他の一般的な質問については、「Data Integration に関するよくある質問」をご参照ください。

付録 1:スクリプトのデモとパラメーターの説明

コードエディタを使用したバッチ同期タスクの設定

コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプトフォーマット要件に基づいて、スクリプト内で関連パラメーターを設定する必要があります。詳細については、「スクリプトモードでの設定」をご参照ください。以下の情報は、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明しています。

Reader スクリプトのデモ

Logstore からの読み取りデモ

{
 "type":"job",
 "version":"2.0",// バージョン番号。
 "steps":[
     {
         "stepType":"LogHub",// プラグイン名。
         "parameter":{
             "datasource":"",// データソース。
             "column":[// 列。
                 "col0",
                 "col1",
                 "col2",
                 "col3",
                 "col4",
                 "__category__",
                 "__source__",
                 "__topic__", // ログトピック。
                 "__machineUUID__", // 収集マシンのユニークな識別子。
                 "__tag__:__hostname__", // ホスト名。
                 "__tag__:__path__", // パス。
                 "__time__" // イベント時間。
             ],
             "beginDateTime":"",// データ消費の開始時刻。
             "batchSize":"",// 1 回のクエリで SLS から取得するデータエントリの数。
             "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"
         }
     ]
 }
}

SPL データ処理後の Logstore からの読み取りデモ

{
 "type":"job",
 "version":"2.0",// バージョン番号。
 "steps":[
     {
         "stepType":"LogHub",// プラグイン名。
         "parameter":{
             "datasource":"",// データソース。
             "column":[// 列。
                 "col100",
                 "col1"
             ],
             "beginDateTime":"",// データ消費の開始時刻。
             "batchSize":"",// 1 回のクエリで SLS から取得するデータエントリの数。
             "endDateTime":"",// データ消費の終了時刻。
             "fieldDelimiter":",",// 列区切り文字。
             "logstore":"",// 送信先 Logstore の名前。
             "query":"* | where regexp_like(col0, '[0-9]+') | project col100=col0, col1 " // SPL
         },
         "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"
         }
     ]
 }
}

SPL でフィールドを拡張した後の Logstore からの読み取りデモ

{
 "type":"job",
 "version":"2.0",// バージョン番号。
 "steps":[
     {
         "stepType":"LogHub",// プラグイン名。
         "parameter":{
             "datasource":"",// データソース。
             "column":[// 列。
               "col0",
               "col1",
               "col2",
               "col3",
               "col4",
               "__category__",
               "__source__",
               "__topic__", // ログトピック。
               "__machineUUID__", // 収集マシンのユニークな識別子。
               "__tag__:__hostname__", // ホスト名。
               "__tag__:__path__", // パス。
               "__time__", // イベント時間。
               "col100",
               "col101"
             ],
             "beginDateTime":"",// データ消費の開始時刻。
             "batchSize":"",// 1 回のクエリで SLS から取得するデータエントリの数。
             "endDateTime":"",// データ消費の終了時刻。
             "fieldDelimiter":",",// 列区切り文字。
             "logstore":"",// 送信先 Logstore の名前。
             "query":"* | where regexp_like(col0, '[0-9]+') | extend col100=cast(col2 as BIGINT), extend col101=date_parse(col3, '%Y-%m-%d %H:%i') ",// SPL
         },
         "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

SLS エンドポイントは、プロジェクトとそのログデータにアクセスするための URL です。これは、プロジェクトが存在する Alibaba Cloud リージョンによって決定されます。各リージョンのエンドポイントについては、「エンドポイント」をご参照ください。

はい

なし

accessId

SLS にアクセスするための AccessKey ID。

はい

なし

accessKey

SLS にアクセスするための AccessKey Secret。

はい

N/A

project

SLS プロジェクトの名前。プロジェクトは、リソースを分離および制御するための SLS のリソース管理単位です。

はい

N/A

logstore

Logstore の名前。Logstore は、ログデータを収集、保存、クエリするための SLS の単位です。

はい

N/A

batchSize

1 回のクエリで SLS から取得するデータレコードの数。

いいえ

128

column

各データレコードの列名。ログトピック、収集マシンの UUID、ホスト名、パス、ログ時間などの SLS メタデータフィールドも同期列として設定できます。

説明

列名は大文字と小文字を区別します。詳細については、以下の「付録 3:列に設定可能な値」の説明をご参照ください。

はい

N/A

beginDateTime

データ消費の開始時刻。これは、ログデータが LogHub (SLS) に到着した時刻です。このパラメーターは、時間範囲の左境界 (含む) を定義します。値は yyyyMMddHHmmss 形式 (例:20180111013000) の時間文字列で、DataWorks のスケジューリングパラメーターと併用できます。

例えば、ノード編集ページの右側にある スケジューリング設定 で、パラメーター フィールドに beginDateTime=${yyyymmdd-1} を設定します。次に、ログ開始時間 を ${beginDateTime}000000 に設定します。これは、ログの開始時刻が業務日付の 00:00:00 であることを示します。詳細については、「スケジューリングパラメーター」をご参照ください。

説明
  • beginDateTime と endDateTime は一緒に使用する必要があります。

  • すべてのデータを同期するには、beginDateTime をデータの開始時刻に、endDateTime を現在の日付に設定できます。ただし、データ量が多いため、大量のリソースを消費する可能性があります。必要に応じてリソースグループの仕様を調整してください。

はい

N/A

endDateTime

データ消費の終了時刻。これは、時間範囲の右境界 (含まない) を定義します。値は yyyyMMddHHmmss 形式 (例:20180111013010) の時間文字列で、DataWorks のスケジューリングパラメーターと併用できます。

たとえば、ノード編集ページの右側にある スケジューリング設定 で、パラメーター フィールドに endDateTime=${yyyymmdd} を設定します。次に、ログ終了時刻 を ${endDateTime}000000 に設定します。これは、ログの終了時刻がビジネス日付の翌日の 00:00:00 であることを示します。詳細については、「スケジューリングパラメーター」をご参照ください。

重要
  • endDatetime に指定する時刻は、(2038-01-19 11:14:07 +8:00)より前である必要があります。そうでない場合、データのプルに失敗する可能性があります。

  • 前のサイクルの endDateTime は、次のサイクルの beginDateTime と同じか、それ以降である必要があります。そうでない場合、一部の範囲のデータがプルされない可能性があります。

はい

N/A

query

LogHub クエリ構文または SPL 文 (SLS 処理言語は、SLS がログを処理するために使用する構文) を使用して LogHub のデータをフィルタリングします。

はい

N/A

説明

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": ""// 送信先の LogService 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 からデータを受信し、すべてのデータ型を STRING に変換し、指定された batchSize に達したときに LogService Java SDK を使用してデータを LogHub (SLS) にバッチでプッシュします。

パラメーター

説明

必須

デフォルト値

endpoint

SLS エンドポイントは、プロジェクトとそのログデータにアクセスするための URL です。これは、プロジェクトが存在する Alibaba Cloud リージョンによって決定されます。各リージョンのサービスエンドポイントについては、「エンドポイント」をご参照ください。

はい

なし

accessKeyId

Simple Log Service へのアクセスに使用する AccessKeyId。

はい

なし

accessKeySecret

Simple Log Service へのアクセスに使用する AccessKeySecret。

はい

なし

project

SLS プロジェクトの名前。

はい

なし

logstore

Logstore の名前。Logstore は、SLS でログデータを収集、保存、クエリするための単位です。

はい

なし

topic

SLS の送信先のトピック名。

いいえ

空の文字列

batchSize

バッチごとに同期するデータレコードの数。デフォルト値は 1,024 で、最大値は 4,096 です。

説明

各バッチは 5 MB を超えてはなりません。個々のレコードのサイズに基づいて、バッチあたりのレコード数を調整してください。

いいえ

1,024

column

各データレコードの列名。

はい

なし

付録 2:LogHub SPL 構文フィルタリング

LogHub がデータソースである場合、タスク設定中に LogHub クエリ構文または SPL 文 (SLS 処理言語) を使用してデータをフィルタリングできます。構文は以下の通りです:

説明

SPL の詳細については、「SPL 構文」をご参照ください。

シナリオ

SQL 文

SPL 文

データフィルタリング

SELECT * WHERE Type='write'

  • 条件付きフィルタリング。

    * | where Type='write'
  • あいまいクエリ。

    * | where Type like '%write%'
  • 正規表現。

    * | where regexp_like(server_protocol, '\d+')
  • その他 (SQL 式)。

    * | where <sql-expr> 

フィールドの処理と選択

特定のフィールドを選択し、名前を変更します:

SELECT "__tag__:node" AS node, path
  • 特定のフィールドを選択し、名前を変更します。

    * | project node="__tag__:node", path
  • パターンでフィールドを選択します。

    * | project -wildcard "__tag__:*"
  • 他のフィールドに影響を与えずに特定のフィールドの名前を変更します。

    * | project-rename node="__tag__:node"
  • パターンでフィールドを除外します。

    * | project-away -wildcard "__tag__:*"

データ変換

(SQL 関数の呼び出し)

データ型の変換、タイムスタンプの解析など:

SELECT 
  CAST(Status AS BIGINT) AS Status, 
  date_parse(Time, '%Y-%m-%d %H:%i') AS Time

データ型の変換、タイムスタンプの解析など:

* | extend Status=cast(Status as BIGINT), extend Time=date_parse(Time, '%Y-%m-%d %H:%i')

フィールドの抽出

正規表現による抽出:

SELECT 
  CAST(Status AS BIGINT) AS Status, 
  date_parse(Time, '%Y-%m-%d %H:%i') AS Time

JSON 抽出:

SELECT 
  CAST(Status AS BIGINT) AS Status, 
  date_parse(Time, '%Y-%m-%d %H:%i') AS Time
  • 正規表現による抽出:1 回限りのマッチング。

    * | parse-regexp protocol, '(\w+)/(\d+)' as scheme, version
  • JSON 抽出:完全展開。

    * | parse-json -path='$.0' content
  • CSV 抽出。

    * | parse-csv -delim='^_^' content as ip, time, host

付録 3:列の設定

全フィールド読み取りロジックは、column に * または "*" の単一要素が含まれている場合にのみトリガーされます。それ以外の場合、各 column 要素は通常のマッチング順序で処理されます。たとえば、設定が ["*", "__time__"] の場合、* は全フィールド読み取りロジックをトリガーしません。代わりに、通常のフィールド名としてマッチングされ、通常は null を出力します。

通常のマッチング順序は次のとおりです:通常のログコンテンツフィールド → Reader の組み込みメタフィールドマッピング → 単一引用符で囲まれた定数 → __tag__:<tagKey> → null。通常のログコンテンツフィールドがメタフィールドまたは LogTag キーと同じ名前を持つ場合、通常のログコンテンツフィールドが優先されます。

以下の表は、SLS 予約済みフィールドのフィールド定義に基づいて、LogHub Reader の column 設定でユーザー向けに推奨される一般的に使用されるフィールドを示しています。フィールドに値があるかどうかは、実際のログコンテンツ、LogGroup メタデータ、および取得された LogTag に依存します。

設定方法

動作

通常のフィールド名、例:content または level

各ログエントリのコンテンツフィールド (contents) からキーで読み取ります。フィールド名は大文字と小文字を区別します。

__time__、__logtime__

各ログエントリの log.getTime() を読み取ります。これは秒単位のタイムスタンプとしてのログ時間です。

__source__

LogGroup の source フィールドを読み取ります。これはログソースデバイスに対応します。

__topic__

LogGroup の topic フィールドを読み取ります。これはログトピックに対応します。

__category__

LogGroup の category フィールドを読み取ります。

__machineUUID__

LogGroup の machineUUID フィールドを読み取ります。

__tag__:__receive_time__

LogTag から __receive_time__ フィールドを読み取ります。これはログがサーバーに到着した時刻を示します。このタグは実際にログに存在する必要があります。

__tag__:__client_ip__

LogTag から __client_ip__ フィールドを読み取ります。これはログソースデバイスのパブリック IP アドレスを示します。このタグは実際にログに存在する必要があります。

__tag__:__path__

LogTag から __path__ フィールドを読み取ります。これは通常、Logtail によって収集されたログファイルのパスを示します。このタグは実際にログに存在する必要があります。

__tag__:__hostname__

LogTag から __hostname__ フィールドを読み取ります。これは通常、Logtail がデータを収集するマシンのホスト名を示します。このタグは実際にログに存在する必要があります。

__tag__:<tagKey>

他の指定された LogTag を読み取ります。例:__tag__:__pack_id__ および __tag__:__user_defined_id__。

__raw_log__、__raw__

このフィールドがログコンテンツフィールドとして存在する場合、通常のフィールド名として読み取ることができます。

'Fixed value'

定数文字列を出力します (外側の単一引用符を削除した後のコンテンツ)。

["*"]

column に単一の * のみが含まれている場合にのみ有効です。すべての通常のログコンテンツフィールドを読み取り、キーでソートし、各列を key:value 形式で出力します。

一致しないフィールド

エラーを報告せずに null を出力します。

設定例:

"column": [
  "content",
  "__time__",
  "__source__",
  "__tag__:__receive_time__",
  "'constant_value'"
]