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

Simple Log Service:MaxComputeへのログの送信 (旧バージョン)

最終更新日:Aug 30, 2024

収集したログをSimple Log Serviceコンソールでリアルタイムで照会し、ビジネスインテリジェンス (BI) 分析とデータマイニングのためにMaxComputeに送信できます。 このトピックでは、Simple Log ServiceコンソールでログをMaxComputeに送信する方法について説明します。

前提条件

MaxComputeが有効化され、MaxComputeテーブルが作成されます。 詳細については、「テーブルの作成」をご参照ください。

制限事項

  • データシッピングジョブは、Alibaba Cloudアカウントを使用してのみ作成できます。 RAMユーザーを使用してデータ配布ジョブを作成することはできません。

  • 複数のLogstoreからMaxComputeテーブルにログを送信しないでください。 複数のLogstoreからMaxComputeテーブルにログを送信すると、MaxComputeテーブルの既存のデータが上書きされる可能性があります。

  • 当日の14日前に生成されたログは、データ配布ジョブで自動的に破棄されます。 _time_ フィールドは、ログが生成される時点を指定します。

  • データ型がDECIMAL、DATETIME、DATE、またはTIMESTAMPのログをMaxComputeに送信することはできません。 詳細については、「MaxCompute V2.0データ型エディション」をご参照ください。

  • 次の表に、MaxComputeへのデータ転送をサポートするリージョンを示します。 Simple Log Serviceが他のリージョンにデプロイされている場合は、DataWorksを使用してデータを同期します。 詳細については、「Data Integrationを使用してLogHubデータソースのデータを宛先に同期する」をご参照ください。

    Simple Log Serviceプロジェクトが存在するリージョン

    MaxComputeプロジェクトが存在するリージョン

    中国 (青島)

    中国 (上海)

    中国 (北京)

    中国 (北京) と中国 (上海)

    中国 (張家口)

    中国 (上海)

    中国 (フフホト)

    中国 (上海)

    中国 (杭州)

    中国 (上海)

    中国 (上海)

    中国 (上海)

    中国 (深セン)

    中国 (深セン) と中国 (上海)

    中国 (香港)

    中国 (上海)

ステップ1: データ配布ジョブの作成

  1. Simple Log Serviceコンソール.

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

    image

  3. [ログストレージ] > [Logstore] を選択します。 [Logstores] タブで、管理するLogstoreを見つけ、> をクリックし、[Data Transformation] > [Export] > [MaxCompute (旧ODPS)] を選択します。

  4. MaxCompute (旧ODPS) LogShipperページで、[有効化] をクリックします。

  5. [配送メモ] ダイアログボックスで、[配送] をクリックします。

  6. [MaxComputeにデータを発送] パネルで、発送ルールを設定し、[OK] をクリックします。

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    [リージョンの選択]

    MaxComputeがサポートされているリージョンは、Simple Log Serviceプロジェクトが存在するリージョンによって異なります。 詳細については、「制限事項」をご参照ください。

    配送ジョブ名

    データ配布ジョブの名前。

    MaxComputeプロジェクト名

    MaxCompute プロジェクトの名前を設定します。

    テーブル名

    MaxComputeテーブルの名前。

    MaxCompute共通列

    MaxComputeテーブルのログフィールドとデータ列の間のマッピング。 左側のフィールドに、MaxComputeテーブルのデータ列にマップするログフィールドの名前を入力します。 右側のフィールドに、列の名前を入力します。 詳細については、「データモデルマッピング」をご参照ください。

    重要
    • Simple Log Serviceは、指定されたログフィールドとMaxComputeテーブル列の順序に基づいて、ログをMaxComputeに送信します。 これらの列の名前を変更しても、データ配布プロセスには影響しません。 MaxComputeテーブルのスキーマを変更する場合は、ログフィールドとMaxComputeテーブル列の間のマッピングを再設定する必要があります。

    • 左側のフィールドで指定するログフィールドの名前には、二重引用符 ("") または一重引用符 (") を含めることはできません。 名前はスペースを含む文字列にすることはできません。

    • ログにrequest_timeなどの同じ名前の2つのフィールドが含まれている場合、log Serviceはいずれかのフィールドをrequest_time_0として表示します。 2つのフィールドは引き続きrequest_timeとしてLog Serviceに保存されます。 配送ルールを設定する場合、元のフィールド名request_timeのみを使用できます。

      ログに同じ名前のフィールドが含まれている場合、log Serviceはいずれかのフィールドの値をランダムに送信します。 同じ名前のフィールドをログに含めないことをお勧めします。

    MaxComputeパーティション列

    MaxComputeテーブルのログフィールドとパーティションキー列の間のマッピング。 左側のフィールドに、MaxComputeテーブルのパーティションキー列にマップするログフィールドの名前を入力します。 右側のフィールドに、列の名前を入力します。 詳細については、「データモデルマッピング」をご参照ください。

    説明

    最大3つのパーティションキー列を指定できます。 カスタムフィールドをパーティションキー列として指定する場合は、データ配布ジョブで生成できるパーティションの数が512未満であることを確認してください。 パーティションの数が512以上の場合、データ配布ジョブは指定されたMaxComputeテーブルにデータを書き込むことができず、データを配布することはできません。

    パーティション形式

    パーティション形式の設定例とパラメーターについては、「examples」および「Java SimpleDateFormat」をご参照ください。

    説明
    • パーティション形式は、MaxCompute partition Columnパラメーターのpartitionフィールド__partition_time__ に設定されている場合にのみ有効になります。

    • 秒単位の時間パーティション形式を指定しないことをお勧めします。 秒単位のタイムパーティション形式を指定すると、MaxComputeテーブルのパーティション数が60,000を超える可能性があります。

    • 各データ配布ジョブで処理されるパーティションの数が512未満であることを確認します。

    配送間隔

    データ配布ジョブの期間。 デフォルト値: 1800 単位は秒です。

    指定された期間が経過すると、別のデータ配布ジョブが作成されます。

    データ転送が有効になると、ログデータはLogstoreに書き込まれてから1時間後にMaxComputeに転送されます。 ログデータの出荷後、MaxComputeでログデータを表示できます。 詳細については、「」をご参照ください。Simple Log ServiceからMaxComputeに出荷されるデータの完全性を確認するにはどうすればよいですか?

ステップ2: MaxComputeでデータを表示する

データがMaxComputeに出荷された後、MaxComputeでデータを表示できます。 サンプルデータを次のコードに示します。 MaxComputeと統合されたビッグデータ開発ツールdata IDEを使用して、データを消費し、BI分析とデータマイニングを視覚化して実行できます。

| 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コンソールでMaxComputeテーブルを削除して新しいMaxComputeテーブルを作成すると、前のテーブルに対して実行されたデフォルトの権限付与は無効になります。 Simple Log Serviceにデータを送信する権限を付与する必要があります。

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

  2. 上部のナビゲーションバーで、必要なリージョンを選択します。

  3. 左側のナビゲーションペインで、[ワークスペース] をクリックします。

  4. [ワークスペース] ページで、管理するワークスペースを見つけ、ポインターを [ショートカット] に移動し、[データ開発] をクリックします。

  5. ワークフローの作成

    1. [スケジュールされたワークフロー] ページで、[作成] > [ワークフローの作成] を選択します。

    2. [ワークフローの作成] ダイアログボックスで、[ワークフロー名] パラメーターを設定し、[作成] をクリックします。

  6. ノードを作成します。

    1. [スケジュールされたワークフロー] ページで、[作成] > [ノードの作成] > [ODPS SQL] を選択します。

    2. [ノードの作成] ダイアログボックスで、[名前][パス] パラメーターを設定し、[コミット] をクリックします。

      手順5で作成したワークフローにパスを設定する必要があります。

  7. ノードのエディタで、必要なコマンドを実行して承認を完了します。 次の表にコマンドを示します。

    授权

    コマンド

    説明

    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テーブルの名前を指定します。 変数を実際のテーブル名に置き換えます。

    aliyun$shennong_open@aliyun.com;

    承認が成功したかどうかを確認します。

    次の例に似た出力が表示された場合、承認は成功します。

    A       projects/{ODPS_PROJECT_NAME}: List | Read
    A       projects/{{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update

関連する API 操作

データシッピングジョブを作成した後、MaxCompute (旧ODPS) LogShipperページでジョブを変更できます。 データ配布機能を無効にしたり、ジョブのステータスとエラーメッセージを表示したり、失敗したジョブを再試行したりすることもできます。

  • データ配布ジョブを変更します。

    [設定] をクリックして、データ配布ジョブを変更します。 パラメーターの詳細については、「手順1: データ配布ジョブの作成」をご参照ください。 列を追加する場合は、MaxComputeの対応するテーブルのスキーマを変更できます。

  • データ配布機能を無効にします。

    [無効化] をクリックします。 LogstoreのデータはMaxComputeに送信されなくなりました。

  • データシッピングジョブのステータスとエラーメッセージを表示します。

    過去2日間に実行されたデータ配布ジョブとジョブのステータスを表示できます。

    • ジョブステータス

      ステータス

      説明

      Success

      データ配布ジョブが成功しました。

      Running

      データ配布ジョブが実行中です。 ジョブが後で成功するかどうかを確認します。

      失敗した

      データ配布ジョブに失敗しました。 外部からの理由でジョブを再起動できない場合は、エラーメッセージに基づいて障害のトラブルシューティングを行い、ジョブを再試行してください。 たとえば、MaxComputeスキーマがSimple Log Serviceの仕様に準拠していないか、またはSimple Log ServiceがMaxComputeへのアクセスを許可されていません。

      Simple Log Serviceを使用すると、過去2日間に失敗したすべてのジョブを再試行できます。

    • エラーメッセージ

      データ配布ジョブが失敗した場合、ジョブのエラーメッセージが返されます。

      エラーメッセージ

      解決策

      MaxComputeプロジェクトは存在しません。

      指定されたMaxComputeプロジェクトがMaxComputeコンソールに存在するかどうかを確認します。 MaxComputeプロジェクトが存在しない場合は、MaxComputeプロジェクトを作成する必要があります。 Simple Log Serviceは、このエラーにより失敗したジョブを自動的に再試行しません。 問題を修正した後、ジョブを手動で再試行する必要があります。

      MaxComputeテーブルは存在しません。

      指定されたMaxComputeテーブルが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日間に失敗したすべてのジョブを自動的に再試行します。

      MaxComputeスキーマがSimple Log Serviceの仕様に準拠していません。

      MaxComputeテーブルの列とSimple log Serviceのログフィールドの間のマッピングを再構成します。 Simple Log Serviceは、このエラーにより失敗したジョブを自動的に再試行しません。 問題を修正した後、ジョブを手動で再試行する必要があります。

    • データ配布ジョブの再試行

      SIMPLE Log Serviceは、内部エラーのために失敗したジョブを自動的に再試行します。 それ以外の場合は、失敗したジョブを手動で再試行する必要があります。 2つの連続した自動再試行の最小間隔は30分です。 ジョブが失敗した場合は、30分待ってからジョブを再試行してください。 Simple Log Serviceを使用すると、過去2日間に失敗したすべてのジョブを再試行できます。

      失敗したジョブをすぐに再試行するには、[すべての失敗したタスクを再試行] をクリックします。 API操作を呼び出すか、SDKを使用してジョブを再試行することもできます。

関連ドキュメント

  • __partition_time__

    ほとんどの場合、MaxComputeはデータを時間でフィルタリングするか、ログのタイムスタンプをパーティションフィールドとして使用します。

    • Format

      __partition_time__ フィールドの値は、Simple Log Serviceの __time__ フィールドの値に基づいて計算され、パーティションの時間形式に基づいて最も近い整数に切り捨てられます。 日付パーティションキー列の値は、出荷間隔に基づいて指定されます。 これにより、1つのMaxComputeテーブルのパーティション数が制限を超えないようにします。

      たとえば、Simple log Serviceのログのタイムスタンプが27/Jan/2016 20:50:13 + 0800の場合、Simple Log Serviceはタイムスタンプに基づいて __time__ フィールドの値を計算します。 値は1453899013のUNIXタイムスタンプです。 次の表に、さまざまな設定での時間パーティション列の値を示します。

      配送間隔

      パーティション形式

      __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

      yyyMMddHHHmm

      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にデータを出荷する場合、2つのサービス間のデータモデルマッピングが有効になります。 次の表では、使用上の注意事項と例を示します。

    • 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では、ログフィールドをMaxComputeテーブルの1つのデータ列またはパーティションキー列にのみマッピングできます。 フィールド冗長性はサポートされていません。 同じフィールド名を再利用する場合、出荷される値はnullになります。 パーティションキー列にnullが表示されている場合、データを出荷できません。

    次の表に、MaxComputeデータ列、パーティションキー列、およびSimple Log Serviceフィールド間のマッピング関係を示します。 Simple Log Serviceの予約フィールドの詳細については、「予約フィールド」をご参照ください。

    MaxCompute列タイプ

    MaxComputeの列名

    MaxComputeのデータ型

    Simple Log Serviceのログフィールド名

    Simple Log Serviceのフィールドタイプ

    説明

    データ列

    log_source

    String

    __source__

    予約フィールド

    ログのソースです。

    log_time

    bigint

    __time__

    予約フィールド

    ログのUNIXタイムスタンプ。 1970年1月1日木曜日のUTC 00:00:00から経過した秒数です。 このフィールドは、データモデルのTimeフィールドに対応します。

    log_topic

    文字列

    __topic__

    予約フィールド

    ログのトピックです。

    時間

    文字列

    時間

    Log contentフィールド

    このフィールドはログから解析され、データモデルのkey-valueフィールドに対応します。 ほとんどの場合、Logtailを使用して収集されるデータの__time__フィールドの値は、timeフィールドの値と同じです。

    ip

    String

    ip

    Log contentフィールド

    このフィールドはログから解析されます。

    スレッド

    String

    スレッド

    Log contentフィールド

    このフィールドはログから解析されます。

    log_extract_others

    String

    __extract_others__

    予約フィールド

    設定でマップされていない他のログフィールドは、key-valueフィールドに基づいてJSONデータにシリアル化されます。 JSONデータは単層構造であり、JSONネストはログフィールドではサポートされていません。

    パーティションキー列

    log_partition_time

    String

    __partition_time__

    予約フィールド

    このフィールドは、ログの__time__フィールドの値に基づいて計算されます。 フィールドのパーティションの粒度を指定できます。

    status

    String

    status

    Log contentフィールド

    このフィールドはログから解析されます。 このフィールドの値は、パーティションの数が上限を超えないように列挙をサポートします。