Simple Log Service コンソールでログをリアルタイムでクエリし、ビジネスインテリジェンス (BI) 分析およびデータマイニングのために MaxCompute へ転送できます。本トピックでは、Simple Log Service から MaxCompute へログを転送する方法について説明します。
この機能は廃止されています。MaxCompute へのログ転送については、「MaxCompute へのログの転送 (新規)」をご参照ください。
前提条件
MaxCompute を有効化し、テーブルを作成します。詳細については、「テーブルの作成」をご参照ください。
制限事項
-
データ転送ジョブの作成は、Alibaba Cloud アカウント (root ユーザー) のみが実行できます。RAM ユーザーはこの操作を実行できません。
-
異なる Logstore からのデータを同一の MaxCompute テーブルに転送しないでください。稀に、この操作によりテーブル内のパーティションデータが上書きされる場合があります。
-
14 日以上前のログは転送できません。ログの経過日数は、その
__time__予約フィールドに基づいて判定されます。これらのログは転送プロセス中に自動的に破棄されます。 -
Simple Log Service から MaxCompute へのログ転送では、DECIMAL、DATETIME、DATE、TIMESTAMP のデータ型はサポートされていません。詳細については、「データの型 (バージョン 2.0)」をご参照ください。
-
以下の表に、サポートされているリージョンを示します。ご利用の Simple Log Service プロジェクトが下記のリージョンにない場合は、DataWorks を使用してデータ同期を行ってください。詳細については、「Data Integration を使用した Simple Log Service からのデータ転送」をご参照ください。
Simple Log Service プロジェクトのリージョン
MaxCompute プロジェクトのリージョン
中国 (青島)
中国 (上海)
中国 (北京)
中国 (北京)、中国 (上海)
中国 (張家口)
中国 (上海)
中国 (フフホト)
中国 (上海)
中国 (杭州)
中国 (上海)
中国 (上海)
中国 (上海)
中国 (深セン)
中国 (深セン)、中国 (上海)
中国 (香港)
中国 (上海)
ステップ 1:データ転送ジョブの作成
Simple Log Service コンソール にログインします。
Projects セクションで、対象のプロジェクトをクリックします。

-
タブで、管理対象の Logstore の横にある > アイコンをクリックし、 を選択します。
-
[配送を有効にする] をクリックします。
-
転送に関する注意事項 ダイアログボックスで、直接転送 をクリックします。
-
MaxCompute へのデータ転送 ページで、転送ルールを構成し、OK をクリックします。
以下の表に、主なパラメーターを示します。
パラメーター
説明
リージョン
MaxCompute プロジェクトを作成できるリージョンは、ご利用の Simple Log Service プロジェクトのリージョンによって異なります。詳細については、「制限事項」をご参照ください。
ジョブ名
データ転送ジョブの名称です。
MaxCompute プロジェクト
MaxCompute プロジェクトの名称です。
MaxCompute テーブル
MaxCompute テーブルの名称です。
カラムマッピング
左側のテキストボックスに、MaxCompute テーブルのカラムにマップするログフィールドの名称を入力します。右側のテキストボックスに、対応する MaxCompute テーブルのカラムの名称を入力します。詳細については、「データモデルのマッピング」をご参照ください。
重要-
Simple Log Service では、ログフィールドを MaxCompute テーブルのカラムに順番にマップすることでログを転送します。MaxCompute テーブルのカラム名を変更しても、データ転送には影響しません。ただし、MaxCompute テーブルのスキーマを変更した場合は、ログフィールドとテーブルカラム間のマッピングを再構成する必要があります。
-
左側のテキストボックスに入力するログフィールド名には、二重引用符 ("")、一重引用符 ('')、および空白文字を含めないでください。
ログに request_time のように同じ名称のフィールドが 2 つ含まれている場合、Log Service ではそのうちの 1 つを request_time_0 として表示します。ただし、Log Service 内では両方のフィールドは依然として request_time として保存されます。転送ルールを構成する際には、元のフィールド名 request_time のみを使用できます。
ログに同じ名称のフィールドが複数含まれている場合、Log Service ではランダムにいずれかのフィールドの値を転送します。ログ内に同じ名称のフィールドを含めないことを推奨します。
パーティションキーのマッピング
左側のテキストボックスに、MaxCompute のパーティションキー列にマップするログフィールドの名称を入力します。右側のテキストボックスに、対応する MaxCompute テーブルのパーティションキー列の名称を入力します。詳細については、「データモデルのマッピング」をご参照ください。
説明パーティションキー列は最大 3 列まで設定できます。カスタムフィールドをパーティションキーとして使用する際は注意してください。各データ転送ジョブで生成されるパーティション数は 512 未満である必要があります。これを超えると、ジョブは MaxCompute テーブルへのデータ書き込みに失敗し、そのバッチ全体のデータが転送されません。
時間パーティションのフォーマット
時間パーティションのフォーマットです。設定例およびパラメーターの詳細については、「例」および「Java SimpleDateFormat」をご参照ください。
説明-
パーティションフィールド が
__partition_time__に設定されている場合にのみ、時間パーティションのフォーマットが有効になります。 -
秒単位の精度を持つ日付フォーマットは使用しないでください。これにより、テーブル内のパーティション数が 60,000 の上限を超える可能性が高くなります。
-
単一のデータ転送ジョブにおけるデータパーティション数は 512 未満である必要があります。
インポート間隔
新しいデータ転送ジョブを作成する間隔 (秒単位) です。デフォルト値は 1800 です。
この間隔が経過すると、新しいデータ転送ジョブが自動的に作成されます。
データ転送を有効化すると、通常、ログが Logstore に書き込まれてから 1 時間以内に MaxCompute にインポートされます。インポートが成功した後は、MaxCompute でログデータを確認できます。詳細については、「MaxCompute へのログ転送後にデータ整合性を確認する方法」をご参照ください。
-
ステップ 2:MaxCompute でのデータの確認
データが転送された後、MaxCompute でそのデータを確認できます。以下の出力はデータサンプルを示しています。BI 分析およびデータマイニングのためのデータ活用には、MaxCompute と統合されたビッグデータ開発ツール Data IDE を使用できます。
| log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status |
+------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
| 10.10.*.* | 1453899013 | | 27/Jan/2016: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"} | 2016_01_27_20_50 | 200 |
+------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
Simple Log Service への権限付与
DataWorks でテーブルを削除して再作成すると、Simple Log Service に対する権限付与が取り消されます。この場合、必要な権限を手動で再度付与する必要があります。
-
DataWorksコンソールにログインします。
-
ページの左上隅で、リージョンを選択します。
-
左側のナビゲーションウィンドウで、ワークスペース をクリックします。
-
ワークスペース ページで、対象のワークスペースの ショートカット セクションにカーソルを合わせ、データ開発 をクリックします。
-
ワークフローを作成します。
-
データ開発 ページで、 を選択します。
-
ワークフローの作成 ダイアログボックスで、ワークフロー名 パラメーターを構成し、作成 をクリックします。
-
-
ノードを作成します。
-
データ開発 ページで、 を選択します。
-
ノードの作成 ダイアログボックスで、名前 および パス パラメーターを構成し、コミット をクリックします。
パス パラメーターは、ステップ 5 で作成したワークフローに設定します。
-
-
ノードエディターで、以下のコマンドを実行して必要な権限を付与します。

コマンド
説明
ADD USER aliyun$shennong_open@aliyun.com;MaxCompute プロジェクトにユーザーを追加します。
shennong_open@aliyun.comは Simple Log Service の固定アカウントであり、変更できません。GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com;ユーザーに MaxCompute プロジェクト内のリソースを読み取るおよび一覧表示する権限を付与します。
{ODPS_PROJECT_NAME} は MaxCompute プロジェクトの名称です。このプレースホルダーを実際のプロジェクト名に置き換えてください。
GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com;ユーザーに Describe、Alter、Update の各権限を付与します。
{ODPS_TABLE_NAME} は MaxCompute テーブルの名称です。このプレースホルダーを実際のテーブル名に置き換えてください。
SHOW GRANTS FOR aliyun$shennong_open@aliyun.com;権限付与が正常に完了したかどうかを検証します。
コマンドの出力が以下の内容の場合、権限付与は成功しています。
A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
関連操作
データ転送ジョブを作成した後は、MaxCompute (旧称 ODPS) 転送管理 ページから、転送構成の変更、ジョブの無効化、ジョブのステータスおよびエラーメッセージの確認、失敗したジョブの再試行などが可能です。
-
配送構成を変更する
転送構成 をクリックし、転送構成を変更します。パラメーターの詳細については、「ステップ 1:データ転送ジョブの作成」をご参照ください。新しいカラムを追加する場合は、MaxCompute の送信先テーブルのカラム情報を変更できます。
-
データ転送ジョブの無効化
転送の無効化 をクリックして、データ転送ジョブを無効化します。
-
データ転送ジョブのステータスおよびエラーメッセージの確認
Simple Log Service では、過去 2 日間に実行されたすべてのデータ転送ジョブのステータスを確認できます。
-
ジョブのステータス
ステータス
説明
成功
データ転送ジョブが正常に完了しました。
実行中
データ転送ジョブが進行中です。後ほどステータスを確認してください。
失敗
互換性のない MaxCompute テーブルスキーマや権限不足などの理由により、自動再試行ができないエラーが発生したため、ジョブが失敗しました。
Simple Log Service では、過去 2 日間に失敗したすべてのジョブを再試行できます。
-
エラーメッセージ
データ転送ジョブが失敗した場合、コンソールに該当するエラーメッセージが表示されます。
エラーメッセージ
推奨される解決方法
MaxCompute プロジェクトが存在しません。
MaxCompute コンソールで、構成済みの MaxCompute プロジェクトが存在するかどうかを確認してください。存在しない場合は、プロジェクトを作成してください。このエラーにより失敗したジョブは、Simple Log Service で自動的に再試行されません。問題を解決した後は、手動でジョブを再試行する必要があります。
MaxCompute テーブルが存在しません。
MaxCompute コンソールで、構成済みの MaxCompute テーブルが存在するかどうかを確認してください。存在しない場合は、テーブルを作成してください。このエラーにより失敗したジョブは、Simple Log Service で自動的に再試行されません。問題を解決した後は、手動でジョブを再試行する必要があります。
Simple Log Service に MaxCompute プロジェクトまたはテーブルへのアクセス権限が付与されていません。
MaxCompute コンソールで、Simple Log Service アカウントに権限が付与されているかどうかを確認してください。付与されていない場合は、再度権限を付与してください。詳細については、「Simple Log Service への権限付与」をご参照ください。このエラーにより失敗したジョブは、Simple Log Service で自動的に再試行されません。問題を解決した後は、手動でジョブを再試行する必要があります。
MaxCompute エラーが発生しました。
このエラーメッセージは、データ転送ジョブが MaxCompute からエラーを受け取ったことを示しています。詳細については、関連する MaxCompute のドキュメントをご参照いただくか、MaxCompute チームにお問い合わせください。Simple Log Service では、過去 2 日間に失敗したジョブを自動的に再試行します。
Simple Log Service のインポートフィールド構成が MaxCompute テーブルのカラムと一致していません。
MaxCompute テーブルのカラムと Simple Log Service のログフィールド間のマッピングを再構成してください。問題を解決した後は、手動でジョブを再試行する必要があります。
-
ジョブの再試行
内部エラーの場合、Simple Log Service では事前定義されたポリシーに基づく自動再試行がサポートされています。その他のケースでは、手動で再試行する必要があります。自動再試行の最小間隔は 30 分です。ジョブが失敗した場合、30 分待ってから再試行してください。Simple Log Service では、過去 2 日間に失敗したすべてのジョブを再試行できます。
失敗したジョブを即座に再試行する必要がある場合は、すべての失敗タスクを再試行 をクリックしてください。また、API または SDK を使用して特定のジョブを再試行することもできます。
-
リファレンス
-
__partition_time__
MaxCompute でデータをフィルター処理する一般的な方法として、ログ時刻をパーティションフィールドとして使用し、時刻に基づいてデータをフィルター処理することが挙げられます。
-
フォーマット
__partition_time__フィールドの値は、Simple Log Service の__time__フィールドの値に基づいて計算され、パーティション時刻のフォーマットに従って切り捨てられます。日付パーティションキー列の値は、転送間隔に基づいて整列され、単一テーブル内のパーティション数が MaxCompute の上限を超えないようにします。たとえば、Simple Log Service のログ時刻が
27/Jan/2016 20:50:13 +0800の場合、Simple Log Service では__time__予約フィールドの値が UNIX タイムスタンプ1453899013として計算されます。以下の表に、さまざまな構成における時間パーティションキー列の値を示します。出荷間隔
パーティション時刻のフォーマット
__partition_time__
1800
yyyy_MM_dd_HH_mm_00
2016_01_27_20_30_00
1800
yyyy-MM-dd HH:mm
2016-01-27 20:30
1800
yyyyMMdd
20160127
3600
yyyyMMddHHmm
201601272000
3600
yyyy_MM_dd_HH
2016_01_27_20
-
使用方法
__partition_time__フィールドを使用してデータをフィルター処理することで、フルテーブルスキャンを回避できます。たとえば、2016 年 1 月 26 日のログデータをクエリするには、以下のクエリ文を使用します。select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27";
-
-
__extract_others__
__extract_others__は JSON 文字列です。たとえば、このフィールドから user-agent の内容を取得するには、以下のクエリ文を使用します。select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10;説明-
get_json_object は MaxCompute が提供する標準 UDF です。この標準 UDF を使用する権限を取得するには、MaxCompute チームにお問い合わせください。詳細については、「MaxCompute が提供する標準 UDF」をご参照ください。
-
この例は参考用です。公式の MaxCompute ドキュメントが優先されます。
-
-
データモデルのマッピング
Simple Log Service から MaxCompute へのログ転送では、両サービス間のデータモデルマッピングが関係します。以下に、補足情報および例を示します。
-
MaxCompute テーブルには、少なくとも 1 つのデータカラムと 1 つのパーティションキー列が必要です。
-
Simple Log Service の以下の予約フィールドの使用を推奨します:
__partition_time__、__source__、および__topic__。 -
MaxCompute テーブルのパーティション数の上限は 60,000 です。この上限を超えると、テーブルへのデータ書き込みができなくなります。
-
データ転送ジョブはバッチ単位で実行されます。パーティションキー列およびその型を設定する際は注意してください。単一のデータ転送ジョブで処理されるデータパーティション数が 512 未満になるよう、十分に配慮してください。これを超えると、そのバッチ全体のデータを MaxCompute に書き込めません。
-
システム予約フィールド
__extract_others__には、レガシ名_extract_others_もサポートされています。 -
MaxCompute のパーティションキー列の値は、MaxCompute の予約語またはキーワードであってはなりません。詳細については、「予約語およびキーワード」をご参照ください。
-
MaxCompute のパーティションキー列の値は空であってはなりません。したがって、パーティションキー列にマップされるフィールドは、予約フィールドまたはログフィールドである必要があります。文字列型フィールドの値を対応するパーティションキー列のデータ型に CAST 演算子で変換できることを確認してください。パーティションキー値が空になるログは、転送時に破棄されます。
-
Simple Log Service では、1 つのログフィールドを MaxCompute テーブルの 1 つのカラム (データカラムまたはパーティションキー列) にのみマップできます。同一のログフィールドを 2 番目のカラムにマップした場合、そのカラムにおける値は null になります。null 値がパーティションキー列に現れた場合、データは転送されません。
以下の表に、MaxCompute カラムと Simple Log Service フィールド間のマッピング関係の例を示します。Simple Log Service の予約フィールドの詳細については、「予約フィールド」をご参照ください。
MaxCompute カラムの種類
MaxCompute カラム
MaxCompute の型
SLS フィールド
SLS フィールドの型
説明
データカラム
log_source
string
__source__
予約フィールド
ログのソースです。
log_time
bigint
__time__
予約フィールド
ログの UNIX タイムスタンプです。これは、1970 年 1 月 1 日 00:00:00 UTC からの経過秒数です。このフィールドは、データモデルの Time フィールドに対応します。
log_topic
string
__topic__
予約フィールド
ログの Topic です。
time
string
time
ログコンテンツフィールド
Logtail によって収集されたデータの場合、コンテンツフィールド
timeの値は、予約フィールド__time__の値と一致することが多いです。ip
string
ip
ログコンテンツフィールド
このフィールドはログコンテンツから解析されます。
thread
string
thread
ログコンテンツフィールド
このフィールドはログコンテンツから解析されます。
log_extract_others
string
__extract_others__
予約フィールド
構成でマップされていないその他のログフィールドは、キーと値のペアの JSON 文字列としてシリアル化されます。この JSON 文字列は単一レベルの構造であり、そのフィールド内にネストされた JSON オブジェクトはサポートされません。
パーティションキー列
log_partition_time
string
__partition_time__
予約フィールド
このフィールドは、ログの
__time__フィールドの値を基準に計算されます。パーティションの粒度は構成可能です。status
string
status
ログコンテンツフィールド
このフィールドはログコンテンツから解析されます。このフィールドの値は列挙をサポートしており、パーティション数が上限を超えないように保証します。
-