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

Simple Log Service:,

最終更新日:Aug 29, 2026

Log Service (SLS) は、ストレージと分析のためにログデータを MaxCompute (ODPS) に転送することをサポートしています。MaxCompute データ転送ジョブ (新バージョン) を作成して、データパイプラインをセットアップします。

前提条件

注意事項

  • ODPS へのデータ転送をサポートしているリージョンについては、「サポートされているリージョン」をご参照ください。

  • char または varchar 型のフィールドの値が指定された長さを超える場合、超過した部分は ODPS への転送時に切り捨てられます。

    たとえば、長さの制限が 3 でフィールド値が 012345 の場合、ODPS への転送後、値は 012 になります。

  • string、char、または varchar 型のフィールドの値が空の文字列の場合、ODPS への転送後、その値は Null になります。

  • datetime 型のフィールドの値は、YYYY-MM-DD HH:mm:ss フォーマットである必要があります。DD と HH の間には複数のスペースが許可されます。無効なフォーマットは転送エラーを引き起こしませんが、ODPS への転送後、値は Null になります。

  • date 型のフィールドの値が無効なフォーマットである場合、データ転送ジョブはエラーを報告しませんが、ODPS への転送後、値は Null になります。

  • 10 進数フィールドの場合、値が定義されたスケールを超えると、システムはそれを四捨五入します。値が定義された精度を超えると、システムはログ全体をダーティデータとして破棄し、エラーカウントを増分します。

  • デフォルトでは、システムはデータ転送中にダーティデータを破棄します。

  • 転送構成で指定されたフィールドがログに存在しない場合、ODPS での値はデフォルト値または Null になります。

    • ODPS テーブルの作成時にデフォルト値を指定した場合、フィールドにはデフォルト値が割り当てられます。

    • デフォルト値を指定せず、列が Null 値を許可する場合、フィールド値は Null になります。

  • ODPS の制限により、データ転送の最大同時実行数は 64 書き込み操作です。単一パーティションの最大スループットは 10 MB/s です。

操作手順

  1. Log Service コンソールにログインします。

  2. [プロジェクト] セクションで、目的のプロジェクトをクリックします。

  3. [ログストレージ] > [Logstores] タブで、ターゲット Logstore の左側にある > アイコンをクリックし、[データ処理] > [エクスポート] > [MaxCompute (ODPS)] を選択します。

  4. ポインターを [MaxCompute (ODPS)] に合わせ、[+] アイコンをクリックします。

  5. [MaxCompute へのデータ転送] パネルで、以下のパラメーターを設定し、[OK] をクリックします。

    パラメーターの説明

    パラメーター

    説明

    ジョブ名

    データ転送ジョブの一意の名前。

    表示名

    データ転送ジョブの表示名。

    ジョブの説明

    データ転送ジョブの説明。

    宛先リージョン

    送信先の ODPS テーブルが配置されているリージョン。

    MaxCompute エンドポイント

    送信先リージョンにおける ODPS サービスのエンドポイント。

    説明

    MaxCompute エンドポイントのパネルは、デフォルトでは折りたたまれています。image アイコンをクリックすると展開されます。

    [Cross-service EndPoint] フィールドで、右側のドロップダウン矢印をクリックして展開し、詳細を表示します。

    トンネルエンドポイント

    送信先リージョンにおける ODPS サービスのトンネルエンドポイント。

    説明

    MaxCompute エンドポイントのパネルは、デフォルトでは折りたたまれています。image アイコンをクリックすると展開されます。

    [Cross-service EndPoint] フィールドで、右側のドロップダウン矢印をクリックして展開し、詳細を表示します。

    プロジェクト名

    送信先テーブルを含む ODPS プロジェクト。

    MaxCompute テーブル名

    ODPS テーブルの名前。

    Log Service 読み取り権限

    データ転送ジョブが Logstore からデータを読み取るための権限。

    • デフォルトロール:データ転送ジョブが Alibaba Cloud のシステムロール AliyunLogDefaultRole を偽装して Logstore からデータを読み取ることを許可します。詳細については、「デフォルトロールに権限を付与する」をご参照ください。

    • カスタムロール:データ転送ジョブがカスタム RAM ロールを偽装して Logstore からデータを読み取ることを許可します。

      まず、Logstore からデータを読み取るために必要な権限をカスタムロールに付与する必要があります。次に、[Log Service 読み取り権限] セクションで、カスタムロールの Alibaba Cloud リソースネーム (ARN) を入力します。詳細については、「RAM ロールに Logstore からのデータ読み取りを許可する」をご参照ください。

    MaxCompute 書き込み権限

    データ転送ジョブが ODPS テーブルにデータを書き込むための権限。

    [自動認証] をクリックする

    承認 をクリックして、ODPS へのデータ書き込み権限を RAM ロールに自動的に付与します。

    重要
    • RAM ユーザーを使用している場合、そのユーザーは ODPS アカウントを管理する権限を持っている必要があります。

    • 自動権限付与が失敗した場合、提供されている 4 つのコマンドを MaxCompute (ODPS) コンソールにコピーして、手動で権限を付与できます。詳細については、「コマンドラインツールを使用して権限を付与する」をご参照ください。

      USE xxxxx;
      ADD USER RAM$xxxxx:`role/xxxxx`;
      GRANT CreateInstance ON PROJECT xxxxx TO USER RAM$xxxxx:`role/xxxxx`;
      GRANT Describe, Alter, update ON TABLE xxxxx TO USER RAM$xxxxx:`role/xxxxx`;

    MaxCompute データ列

    ログフィールドを ODPS テーブルのデータ列にマッピングします。左のテキストボックスにログフィールド名を入力し、右のテキストボックスに対応するデータ列名を入力します。詳細については、「データモデルマッピング」をご参照ください。

    重要
    • データは、指定された順序でログフィールドをテーブル列にマッピングすることによって転送されます。ODPS で列名を変更しても転送には影響しません。ただし、テーブルスキーマを変更した場合は、これらのマッピングを再設定する必要があります。

    • 左のテキストボックスのログフィールド名には、二重引用符 ("")、単一引用符 ('')、またはスペースを含めることはできません。

    • ログに重複したフィールド名 (たとえば、request_time という名前のフィールドが 2 つ) が含まれている場合、Log Service はコンソールで一方を request_time_0 と表示することがあります。基盤となる保存名は request_time のままです。転送ルールを設定する際は、元のフィールド名 request_time を使用してください。

      フィールド名が重複している場合、システムはランダムに 1 つの値のみを転送します。予測可能な結果を得るためには、フィールド名の重複を避けてください。

    MaxCompute パーティション列

    ログフィールドを ODPS テーブルのパーティションキー列にマッピングします。左のテキストボックスにログフィールド名を入力し、右のテキストボックスに対応するパーティションキー列名を入力します。詳細については、「データモデルマッピング」をご参照ください。

    説明
    • 次のフィールドはパーティションフィールドとして使用できません:_extract_others_、__extract_others__、および __extract_others_all__。

    • 過剰なパーティションによるデータ配信の損失を防ぐため、パーティションフィールドとして __receive_time__ を使用することを推奨します。

    • 2 つのフィールドの違いに関する詳細については、「MaxCompute パーティション列:__partition_time__ と __receive_time__」をご参照ください。

    時間パーティションフォーマット

    時間パーティションのフォーマット。設定例と詳細については、「時間パーティションフォーマット」をご参照ください。

    説明
    • このパラメーターは、[MaxCompute パーティション列] のログフィールド名が __receive_time__ または __partition_time__ に設定されている場合にのみ有効です。

    • 秒単位まで精密な日付形式を使用しないでください。これにより、単一テーブルのパーティション数が 60,000 の制限を超える可能性があります。

    タイムゾーン

    時間値と時間パーティションのフォーマットに使用されるタイムゾーン。詳細については、「タイムゾーンフォーマット」をご参照ください。

    配送モード

    リアルタイム転送またはバッチ転送を選択します。

    • リアルタイム転送:Logstore から ODPS へリアルタイムでデータを読み取り、転送します。

    • バッチ転送:Logstore からバッチでデータを読み取り、5〜10 分前のデータを処理します。

    開始時間範囲

    ログ受信時間に基づいた、転送するデータの時間範囲。以下のオプションが利用可能です:

    • 特定の時間から:ジョブは指定された開始時刻からデータ転送を開始し、手動で停止されるまで継続します。

    • 特定の時間範囲:ジョブは指定された開始時刻と終了時刻の間のデータを転送します。ジョブは終了時刻に達すると自動的に停止します。

    説明

    既存データの転送は、スロットと QPS の制限により ODPS の書き込みしきい値を容易に超える可能性があるため、サポートされなくなりました。

    データ転送ジョブを作成した後、新しいジョブは通常約 10 分以内に MaxCompute にデータを転送します。その後、ODPS でデータをクエリできます。詳細については、「Log Service から MaxCompute にデータが転送された後、データの整合性を確認するにはどうすればよいですか?」をご参照ください。

    | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status |
    +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
    | 10.10.*.* | 1642942213 | | 24/Jan/2022:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2022_01_23_20_50 | 200 |
    +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+

データモデルマッピング

SLS から ODPS テーブルにログを転送するには、2 つのサービスのデータモデルをマッピングする必要があります。以下のセクションでは、マッピングルールと例について説明します。

  • ODPS テーブルには、少なくとも 1 つのデータ列と 1 つのパーティションキー列が含まれている必要があります。

  • SLS の予約フィールドである __partition_time__、__source__、および __topic__ を使用することを推奨します。

  • ODPS テーブルは最大 60,000 のパーティションを持つことができます。この制限を超えると、テーブルにデータを書き込むことができません。

  • システム予約フィールド __extract_others__ は、以前は _extract_others_ という名前でした。古い名前は互換性のために引き続きサポートされています。

  • ODPS パーティションキー列の値は、ODPS の予約語またはキーワードであってはなりません。詳細については、「予約語とキーワード」をご参照ください。

  • ODPS パーティションテーブルのパーティションは空にできません。システム予約フィールドやログフィールドなどの特定のフィールドをパーティションキー列にマッピングする必要があります。マッピングされたフィールドの値は空または null であってはなりません。ログフィールドが文字列型の場合、パーティションキー列のデータ型に変換可能でなければなりません。変換に失敗し、パーティションキーが空になった場合、システムは転送中にそのログを破棄します。

  • SLS では、1 つのログフィールドは ODPS テーブルの 1 つの列 (データ列またはパーティションキー列のいずれか) にのみマッピングできます。フィールドの冗長性はサポートされていません。

以下の表は、ODPS 列と SLS フィールド間のマッピング関係の例を示しています。SLS の予約フィールドに関する詳細については、「予約フィールド」をご参照ください。

MaxCompute 列タイプ

列名 (MaxCompute)

データ型 (MaxCompute)

ログフィールド名 (Log Service)

フィールドタイプ (Log Service)

説明

データ列

log_source

string

__source__

予約フィールド

ログのソース。

log_time

bigint

__time__

予約フィールド

UNIX タイムスタンプ形式のログの時間。これはデータモデルの時間フィールドに対応します。

log_topic

string

__topic__

予約フィールド

ログのトピック。

time

string

time

ログフィールド

ログコンテンツから解析されたフィールドで、データモデルのキーと値のペアに対応します。多くの場合、Logtail によって収集された __time__ フィールドの値は time フィールドの値と同じです。

ip

string

ip

ログフィールド

ログコンテンツから解析されたフィールド。

thread

string

thread

ログフィールド

ログコンテンツから解析されたフィールド。

log_extract_others

string

__extract_others__

予約フィールド

システムは、マッピングされていない他のログフィールドをフラットなキーと値のペアの JSON オブジェクトにシリアル化します。ネストされた JSON オブジェクトはサポートされていません。

パーティションキー列

log_partition_time

string

__partition_time__

予約フィールド

SLS は、ログの __time__ フィールドからこの値を計算し、それを調整します。パーティションの粒度は設定可能です。

status

string

status

ログフィールド

ログコンテンツから解析されたフィールド。このフィールドの値を列挙することで、パーティション数が制限を超えないようにできます。

時間パーティションフォーマット

MaxCompute データ転送 (新バージョン) は、StrfTimeFormat と SimpleDateFormat の 2 つの時間パーティションフォーマットをサポートしています。時間パーティションフォーマットは、MaxCompute パーティションキー列のフィールドが __receive_time__ または __partition_time__ に設定されている場合にのみ有効です。

StrfTimeFormat

strftime は、日付と時刻をフォーマットする標準的な UNIX C ライブラリ関数です。% 文字で始まるフォーマットコードを使用して、時間パーティションを文字列に変換します。たとえば、%Y_%m_%d は年、月、日を表します。

説明

新しい ODPS データ転送ジョブを作成する場合、StrfTimeFormat を使用する必要があります。

時間パーティションフォーマット

テーブルパーティションの例

%Y_%m_%d_%H_%M_00

2024_12_27_20_30_00

%Y_%m_%d_%H_%M

2024_12_27_20_30

%Y_%m_%d_%H

2024_12_27_20

%Y_%m_%d

2024_12_27

%Y_%m

2024_12

%Y

2024

%Y%m%d%H%M

202412272030

%Y%m%d%H

2024122720

%Y%m%d

20241227

%Y%m

202412

SimpleDateFormat

Java の SimpleDateFormat 構文の時間フォーマット。例:yyyy-MM-dd HH:mm。詳細については、「Class SimpleDateFormat」をご参照ください。

説明

SimpleDateFormat は、古いバージョンからの移行時の下位互換性のためにサポートされています。新しい MaxCompute タスクには StrfTimeFormat を使用してください。

レガシー移行タスクは、以下のパーティションフォーマットをサポートしています:

パーティション時間フォーマット

テーブルパーティションの例

yyyy-MM-ddHH:mm

2024-12-2720-30

yyyy_MM_dd_HH_mm

2024_12_27_20_30

yyyy_MM_dd_HH

2024_12_27_20

yyyy-MM-dd HH:mm

2024-12-27 20:30

yyyyMMddHHmm

202412272030

yyyyMMddHH

2024122720

yyyyMMdd

20241227

yyyy_MM-dd_HH_mm

2024_12-27_20_30

yyyy-MM-dd

2024-12-27

参考情報

説明

パーティションフィールドとして __receive_time__ を使用することを推奨します。ビジネス要件でログ時間による厳密なパーティション分割が必須の場合は、__partition_time__ を代わりに使用することもできますが、遅れて到着したデータが古いパーティションを上書きする、異常なタイムスタンプが未来のパーティションに書き込まれる、パーティションの完全性に遅延が生じるなどの関連リスクを明示的に受け入れる必要があります。

  • __partition_time__ フィールド

    MaxCompute でデータをフィルターする一般的な方法は、ログ時間をパーティションキー列として使用することです。

    • フォーマット

      __partition_time__ フィールドは、SLS の __time__ フィールドから派生します。タイムゾーンとパーティション時間フォーマットに基づいて時間文字列を生成します。単一の MaxCompute テーブルのパーティション制限を超えないようにするため、日付パーティションキーの値は 1800 秒 (30 分) 間隔に調整されます。

      たとえば、SLS のログ時間が 27/Jan/2022 20:50:13 +0800 の場合、SLS は予約フィールド __time__ を 1643287813 (UNIX タイムスタンプ) として計算します。以下の表は、異なる設定での時間パーティションキー列の値を示しています。

      パーティション時間フォーマット

      __partition_time__

      %Y_%m_%d_%H_%M_00

      2022_01_27_20_30_00

      %Y_%m_%d_%H_%M

      2022_01_27_20_30

      %Y%m%d

      20220127

    • 使用方法

      __partition_time__ を使用してデータをフィルターすると、テーブル全体のスキャンを回避できます。たとえば、2024 年 12 月 26 日のログデータをクエリする場合:

      select * from {ODPS_TABLE_NAME} where log_partition_time >= "2024_12_26" and log_partition_time < "2024_12_27";
  • __receive_time__ フィールド

    MaxCompute でデータをフィルターする一般的な方法は、ログの到着時間をパーティションキー列として使用することです。

    • フォーマット

      パーティション時間フォーマット

      __receive_time__

      %Y_%m_%d_%H_%M_00

      2022_01_27_20_30_00

      %Y_%m_%d_%H_%M

      2022_01_27_20_30

      %Y%m%d

      20220127

  • __extract_others__ および __extract_others_all__ フィールド

    • __extract_others__ フィールドには、ログフィールドからマッピングされていないすべてのフィールドが含まれますが、__topic__、__tag__:*、および __source__ は除外されます。

    • __extract_others_all__ フィールドには、ログフィールドからマッピングされていないすべてのフィールドが含まれ、__topic__、__tag__:*、および __source__ も含まれます。

SDK の例

export_odps_sink_demo.py