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

Simple Log Service:Simple Log Service の論理削除

最終更新日:Nov 10, 2025

Alibaba Cloud Simple Log Service (SLS) は論理削除をサポートしています。この機能を使用すると、ログデータを完全に削除するのではなく、削除済みとしてマークできます。このトピックでは、論理削除を実行する方法について説明します。

重要

Simple Log Service の論理削除機能はグレースケールリリース中であり、特定のリージョンの特定のユーザーが利用できます。この機能を有効にするには、してください

背景情報

データ駆動型の環境では、ログと観測可能なデータは重要なビジネス資産です。しかし、これらはデータ管理、コンプライアンス、セキュリティの面で課題ももたらします。これらの問題に対処するため、Alibaba Cloud Simple Log Service (SLS) は論理削除機能を提供しています。この機能は、追跡可能な削除メカニズムを提供し、データセキュリティとコンプライアンスシステムのセーフティネットとして機能します。

仕組み (クリックして表示)

論理削除は、データを完全に削除するのではなく、削除対象としてマークします。論理削除メカニズムは、論理的な削除と物理的な存在のバランスを取ります。ワークフローは次のとおりです。

  1. 削除タスクの開始: SDK またはコンソールを使用して、非同期の削除タスクを開始します。時間範囲とクエリ条件を指定します。

  2. 正確なマーキング: SLS バックエンドサービスは、クエリ条件に基づいて一致するすべてのログエントリを特定します。データを物理的に消去する代わりに、サービスは各エントリに内部的で非表示の削除マーカーを追加します。

  3. クエリの透明性: データがマークされると、GetLogsGetHistograms、SQL 分析などのすべての通常のクエリリクエストは、このデータを自動的に除外します。アプリケーションやユーザーには、このデータは削除されたように見えます。

  4. 保持と復元: マークされたデータは、1 日から 365 日などの事前に設定された保持期間、物理的に保存されます。データの復元は現在サポートされていません。

  5. 完全削除: 保持期間が終了すると、SLS 回復メカニズムは、ストレージスペースを解放するために、データの元に戻せない物理的な削除を実行します。

シナリオ (クリックして表示)

Alibaba Cloud Simple Log Service (SLS) の論理削除機能は、データを即時かつ完全に削除するのではなく、削除対象としてマークすることで、次の主要なデータ管理の課題に対処します。

  • コンプライアンスと監査の要件

    • シナリオ: 金融監督や GDPR などの規制では、企業は要求に応じてデータを削除し、削除操作の監査記録を保持できる必要があります。

    • 実装: 論理削除操作は、削除時間、オペレーター、およびデータ範囲を記録するシステムログを生成し、監査コンプライアンス要件を満たします。

  • 開発環境とテスト環境でのデータ管理

    • シナリオ: テストチームは、新しいストレステストの準備のために、古いテストデータを定期的にクリーンアップする必要があります。

    • 実装: 指定されたデータのバッチ論理削除を実行できます。これにより、Logstore の構造と構成が保持され、物理的な削除に伴う再構築コストが回避されます。

  • ダーティデータのクリーンアップ

    • シナリオ: オンラインの障害により、異常なデータが収集され、分析の精度に影響を与えます。

    • 実装: ダーティデータを迅速に分離してマークし、ビジネスビューに高品質のデータのみが含まれるようにします。生データは、後でトラブルシューティングするために保持されます。

この機能は、サーバー側暗号化や詳細な権限コントロールなどの SLS のセキュリティおよびコンプライアンス機能と連携して、エンタープライズレベルのデータガバナンスのニーズを満たします。

注意事項

  1. ストレージコストに関する考慮事項: 論理削除されたデータは、保持期間中もストレージスペースを占有し、料金が発生します。データは、保持期間が終了するまで物理的に削除されません。

  2. クエリ文の正確性: 削除する前にクエリを実行してください。削除を実行する前に、まったく同じクエリ時間と検索文を使用してクエリを実行します。削除されるデータをプレビューして、データが正しいことを確認してから削除を進めてください。

  3. 論理削除されたログはクエリまたは分析できません。これには、クエリ、SQL 分析、ScheduledSQL、およびアラートが含まれます。ストリーム処理操作は影響を受けません。これには、消費、データ変換、および配信が含まれます。

  4. 論理削除は元に戻せません。削除されたログは回復できません。

サポートされるリージョン

論理削除は現在、シンガポールおよび中国 (ウランチャブ) でサポートされています。プロジェクトの概要ページで、プロジェクトが配置されているリージョンのエンドポイントを表示できます。リージョン ID の詳細については、「エンドポイント」をご参照ください。

権限

  • Alibaba Cloud アカウントでログインすると、デフォルトですべての操作権限があり、プロジェクトで直接操作を実行できます。

  • Resource Access Management (RAM) ユーザーでログインする場合は、Alibaba Cloud アカウントのオーナーに必要な権限を要求する必要があります。Simple Log Service は、次のシステムポリシーを提供します。

    • システムポリシー: これらのポリシーは広範な権限を付与します。ユーザーはシステムポリシーの内容を変更できませんが、構成手順は簡単です。

      • AliyunLogFullAccess: Simple Log Service に対する完全な管理権限を付与します。

      • AliyunLogReadOnlyAccess: Simple Log Service に対する読み取り専用権限を付与します。

    • カスタムポリシー: 最小権限の原則に従ってください。信頼できる担当者または自動化されたサービスにのみ、必要最小限の権限を付与してください。

      次のコードは、カスタムポリシーのサンプルを提供します。

      • ポリシー内の ProjectNameLogStoreName を、実際のプロジェクト名と Logstore 名に置き換えてください。

      • RAM ユーザーの権限を構成する方法の詳細については、「Simple Log Service の RAM 権限を構成する」および「承認情報」をご参照ください。

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "log:DeleteLogStoreLogs",
              "log:GetDeleteLogStoreLogsTask",
              "log:ListDeleteLogStoreLogsTasks",
            ],
            "Resource": [
              "acs:log:*:*:project/ProjectName/logstore/LogStoreName"
            ]
            "Effect": "Allow"
          }
        ]
      }

コンソール操作

  1. Simple Log Service コンソールにログインします。[プロジェクト] セクションで、目的のプロジェクトをクリックします。

  2. [ログストレージ] > [Logstores] タブで、目的の Logstore をクリックします。

  3. Logstore の [クエリと分析] ページで、検索文を入力し、時間範囲を指定します。[Raw ログ] タブで、image > [ログの論理削除] をクリックします。

    image

  4. [ログの論理削除] ダイアログボックスで、情報を注意深く読み、[確認] をクリックします。削除が完了すると、ログは表示されなくなります。

  5. 削除が完了したら、[Raw ログ] タブで、image > [論理削除タスク] をクリックします。[論理削除タスク] リストで、削除タスクの履歴を表示できます。

SDK 操作

Python

  1. pip show aliyun-log-python-sdk を実行して、aliyun-log-python-sdk のバージョンを確認します。

    aliyun-log-python-sdk のバージョンは 0.9.28 以降である必要があります。バージョンが古い場合は、pip install -U aliyun-log-python-sdk を実行して SDK をアップグレードします。

  2. 論理削除タスクを送信します。

    次の表に、DeleteLogsRequest のパラメーターを示します。

    パラメーター

    # 必要なライブラリをインポート
    import time
    from aliyun.log import LogClient, DeleteLogsRequest, DeleteLogsResponse
    
    def execute_soft_delete(client: LogClient, project: str, logstore: str, from_time: int, to_time: int, query: str) -> str:
        """
        非同期の論理削除タスクを実行します。
    
        :param client: 初期化された SLS クライアントインスタンス。
        :param project: SLS プロジェクト名。
        :param logstore: Logstore 名。
        :param from_time: 削除範囲の開始タイムスタンプ (秒単位)。
        :param to_time: 削除範囲の終了タイムスタンプ (秒単位)。
        :param query: 削除対象のログをフィルタリングするために使用されるインデックスのみの検索文 (SQL、スキャン、およびフレーズクエリはサポートされていません)。
        :return: 後でタスクのステータスをクエリするために使用される非同期削除タスクのタスク ID。
        """
        print(f"プロジェクト '{project}' の Logstore '{logstore}' で論理削除を実行する準備をしています...")
        print(f"時間範囲: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(from_time))} -> {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(to_time))}")
        print(f"削除条件 (クエリ): {query}")
    
        # 1. 削除リクエストオブジェクトを構築します
        request = DeleteLogsRequest(project, logstore, from_time, to_time, query=query)
    
        # 2. 非同期削除リクエストを開始します
        try:
            res: DeleteLogsResponse = client.delete_logs(request)
            
            # 3. リクエスト情報と返されたタスク ID を出力します
            print("\n--- リクエスト受領書 ---")
            res.log_print()
            task_id = res.get_taskid()
            print(f"✅ 論理削除タスクが正常に送信されました! リクエスト ID: {res.get_request_id()}, タスク ID: {task_id}")
            return task_id
        except Exception as e:
            print(f"❌ 論理削除タスクの送信に失敗しました: {e}")
            return ""
    
    # --- 呼び出し方法 ---
    # client = LogClient(...) # クライアントの初期化プロセスはここでは省略します
    
    # project_name = "my-prod-app"
    # logstore_name = "nginx-access-log"
    # # シナリオ: 特定の IP アドレスから過去 24 時間のステータスコード 500 のアクセスログを削除します
    # start_time = int(time.time()) - 86400 
    # end_time = int(time.time())
    # delete_query = "__source__: 123.123.XXX.XXX and status: 500"
    
    # task_id = execute_soft_delete(client, project_name, logstore_name, start_time, end_time, delete_query)
    # if task_id:
    #     print(f"\nタスク ID '{task_id}' を使用してタスクの実行ステータスをクエリしてください。")
    

    project String (必須)

    プロジェクトの名前。Simple Log Service のプロジェクトは、異なるユーザーのリソースを分離し、特定のリソースへのアクセスを制御するために使用されます。詳細については、「プロジェクトの管理」をご参照ください。

    logstore String (必須)

    Logstore の名前。Simple Log Service の Logstore は、ログの収集、保存、クエリに使用されます。詳細については、「Logstore の管理」をご参照ください。

    fromTime int (必須)

    クエリする時間範囲の開始時刻。UNIX タイムスタンプとして時間を指定します。

    toTime int (必須)

    クエリする時間範囲の終了時刻。UNIX タイムスタンプとして時間を指定します。

    query String (必須)

    検索文または分析文。詳細については、「クエリと分析の概要」をご参照ください。

    クエリを "*" または "level: ERROR" に設定する場合は注意してください。これにより、大量のデータが予期せず削除される可能性があります。
  3. タスクステータスをポーリングします。

    このコードブロックは、タスクが完了するかタイムアウトするまで、タスクの進行状況を継続的にチェックします。これは、削除操作が正常に実行されたことを確認するための重要なステップです。

    delete_logs は非同期 API です。呼び出しが成功したことは、タスクが受け入れられたことのみを示します。返された task_id を使用して、タスクの最終ステータスをポーリングする必要があります。

    from aliyun.log import GetDeleteLogsStatusRequest, GetDeleteLogsStatusResponse
    
    def wait_for_task_completion(client: LogClient, project: str, logstore: str, task_id: str, timeout_seconds: int = 300):
        """ポーリングによって論理削除タスクが完了するのを待ちます。"""
        start_time = time.time()
        while time.time() - start_time < timeout_seconds:
            request = GetDeleteLogsStatusRequest(project, logstore, task_id)
            try:
                res: GetDeleteLogsStatusResponse = client.get_delete_logs_status(request)
                progress = res.get_process()
                print(f"タスク '{task_id}' のステータスをクエリしています... 進行状況: {progress:.2f}%")
                if progress >= 100.0:
                    print("✅ タスクが完了しました!")
                    return True
                time.sleep(2)  # ポーリングが頻繁になりすぎないようにします
            except Exception as e:
                print(f"❌ タスクステータスのクエリに失敗しました: {e}")
                return False
        print(f"⌛️ タスクがタイムアウトしました ({timeout_seconds} 秒を超えました)。後で再試行するか、タスクのステータスを確認してください。")
        return False
    
    # --- 呼び出し方法 ---
    # task_id = execute_soft_delete(...)
    # if task_id:
    #     wait_for_task_completion(client, project_name, logstore_name, task_id)
    
  4. 削除タスクの監査と管理 (履歴タスクの表示)。

    この機能は、すべての削除操作の完全な履歴を提供するため、セキュリティ監査と運用管理にとって重要です。
    from aliyun.log import ListDeleteLogsTasksRequest
    
    def list_all_delete_tasks(client: LogClient, project: str, logstore: str):
        """指定された Logstore のすべての論理削除タスクの履歴を一覧表示します。"""
        print(f"\nプロジェクト '{project}' の Logstore '{logstore}' の論理削除タスクの履歴を一覧表示しています...")
        request = ListDeleteLogsTasksRequest(project=project, logstore=logstore)
        try:
            res = client.list_delete_logs_tasks(request)
            print("✅ タスクリストが正常に取得されました!")
            res.log_print() # log_print() は、すべてのタスクの詳細を読みやすい形式で出力します
        except Exception as e:
            print(f"❌ タスクリストの取得に失敗しました: {e}")