All Products
Search
Document Center

Simple Log Service:Soft deletion di Simple Log Service

Last Updated:Jun 23, 2026

Simple Log Service mendukung soft deletion, yaitu menandai data log untuk dihapus alih-alih menghapusnya secara permanen.

Informasi latar belakang

Dalam lingkungan berbasis data, log dan data observabilitas merupakan aset utama perusahaan, tetapi juga menimbulkan tantangan dalam manajemen data, kepatuhan (compliance), dan keamanan. Untuk mengatasi isu tersebut, Simple Log Service (SLS) menyediakan soft deletion—mekanisme penghapusan yang dapat dilacak dan berfungsi sebagai jaring pengaman dalam kerangka kerja keamanan serta kepatuhan data Anda.

Cara kerja

Soft deletion menandai data untuk dihapus tanpa menghapusnya secara fisik, sehingga data tersebut secara logis dihapus namun tetap disimpan secara fisik. Alur kerjanya sebagai berikut:

  1. Mulai tugas penghapusan: Jalankan tugas penghapusan asinkron menggunakan SDK atau Konsol. Tentukan rentang waktu dan kondisi kueri.

  2. Penandaan tepat: Layanan backend SLS menemukan semua entri log yang sesuai berdasarkan kondisi kueri Anda. Alih-alih menghapus data secara fisik, layanan ini menambahkan penanda penghapusan internal yang tidak terlihat ke setiap entri.

  3. Transparansi kueri: Setelah data ditandai, semua permintaan kueri reguler seperti GetLogs, GetHistograms, dan kueri analisis SQL secara otomatis memfilter data tersebut. Hal ini membuat data tampak telah dihapus bagi aplikasi dan pengguna Anda.

  4. Retensi dan pemulihan: Data yang ditandai tetap disimpan secara fisik tetapi tidak dapat diakses melalui kueri. Pemulihan data saat ini tidak didukung.

  5. Penghapusan permanen: Setelah periode retensi Logstore berakhir, mekanisme pembersihan SLS melakukan penghapusan fisik yang tidak dapat dikembalikan untuk membebaskan storage space.

Kasus penggunaan

Dengan menandai data untuk dihapus alih-alih langsung menghapusnya, soft deletion membantu mengatasi tantangan manajemen data berikut:

  • Kebutuhan kepatuhan dan audit

    • Skenario: Regulasi seperti regulasi keuangan atau GDPR mewajibkan bisnis menghapus data sesuai permintaan dan menyimpan catatan audit atas operasi penghapusan tersebut.

    • Implementasi: Operasi soft deletion menghasilkan log sistem yang mencatat waktu penghapusan, operator, dan cakupan data untuk memenuhi persyaratan audit dan kepatuhan.

  • Manajemen data di lingkungan pengembangan dan pengujian

    • Skenario: Tim pengujian perlu membersihkan data uji lama secara berkala untuk mempersiapkan pengujian stres baru.

    • Implementasi: Anda dapat melakukan soft delete terhadap data tertentu secara batch. Pendekatan ini mempertahankan struktur dan konfigurasi Logstore, sehingga menghindari biaya pembuatan ulang.

  • Pembersihan data kotor

    • Skenario: Kegagalan online menyebabkan pengumpulan data abnormal yang memengaruhi akurasi analisis.

    • Implementasi: Cepat isolasi dan tandai data kotor agar tampilan bisnis hanya berisi data berkualitas tinggi. Data mentah tetap disimpan untuk troubleshooting selanjutnya.

Soft deletion bekerja bersama fitur keamanan dan kepatuhan lain dari Simple Log Service, seperti server-side encryption dan kontrol izin detail halus, untuk memenuhi kebutuhan tata kelola data tingkat perusahaan.

Peringatan

  1. Biaya penyimpanan: Data yang di-soft-delete tetap menempati storage space dan dikenai biaya selama periode retensi. Data tidak dihapus secara fisik hingga periode retensi Logstore berakhir.

  2. Akurasi kueri: Lakukan kueri sebelum menghapus. Sebelum menghapus, jalankan kueri dengan rentang waktu dan pernyataan kueri yang sama persis. Pratinjau data yang akan dihapus untuk memastikan kebenarannya.

  3. Anda tidak dapat melakukan kueri atau analisis terhadap log yang telah di-soft-delete. Pembatasan ini berlaku untuk fitur seperti kueri, analisis SQL, ScheduledSQL, dan alerting. Operasi pemrosesan aliran (stream processing), termasuk konsumsi, transformasi data, dan pengiriman (shipping), tidak terpengaruh.

  4. Soft deletion bersifat ireversibel. Log yang dihapus tidak dapat dipulihkan.

Wilayah yang didukung

Anda dapat menemukan endpoint layanan untuk wilayah Project Anda di halaman ikhtisarnya. Untuk ID setiap wilayah, lihat Endpoints.

Izin

  • Jika Anda menggunakan Akun Alibaba Cloud, Anda memiliki semua izin secara default dan dapat langsung mengelola Projects.

  • Jika Anda menggunakan Pengguna RAM, Anda harus meminta pemilik Akun Alibaba Cloud untuk memberikan izin yang diperlukan. Simple Log Service menyediakan dua jenis kebijakan sistem berikut:

    • Kebijakan sistem: Kebijakan ini memberikan izin luas. Anda tidak dapat mengubah isi kebijakan sistem, tetapi mudah dikonfigurasi.

      • AliyunLogFullAccess: Memberikan izin manajemen penuh untuk Simple Log Service.

      • AliyunLogReadOnlyAccess: Memberikan izin read-only untuk Simple Log Service.

    • Kebijakan kustom: Kami menyarankan Anda mengikuti prinsip least privilege. Berikan hanya izin minimum yang diperlukan kepada personel tepercaya atau layanan otomatis.

      Kode berikut menyediakan contoh kebijakan kustom:

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

Operasi Konsol

  1. Masuk ke Konsol Simple Log Service. Pada bagian Projects, klik proyek yang diinginkan.

  2. Di tab Log Storage > Logstores, klik logstore yang diinginkan.

  3. Di halaman Search & Analysis Logstore, masukkan pernyataan kueri dan pilih rentang waktu. Di tab Raw Log, klik image > Soft Delete Log.

  4. Di kotak dialog Soft Delete Log, baca informasi dengan cermat lalu klik Confirm. Setelah log dihapus, log tersebut tidak lagi terlihat.

  5. Setelah penghapusan selesai, di tab Raw Log, klik image > Soft Delete Task. Di daftar Soft Delete Task, Anda dapat melihat riwayat tugas penghapusan.

Operasi SDK

Python

  1. Gunakan pip show aliyun-log-python-sdk untuk memeriksa versi aliyun-log-python-sdk.

    Versi aliyun-log-python-sdk harus 0.9.28 atau lebih baru. Jika versi Anda lebih lama, gunakan perintah pip install -U aliyun-log-python-sdk untuk meningkatkan versi SDK.

  2. Kirim tugas soft deletion.

    DeleteLogsRequest memiliki parameter berikut:

    Parameter

    Contoh

    # Impor library yang diperlukan
    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:
        """
        Menjalankan tugas soft deletion asinkron.
    
        :param client: Instans client Simple Log Service yang telah diinisialisasi.
        :param project: Nama Project Simple Log Service Anda.
        :param logstore: Nama Logstore Anda.
        :param from_time: Timestamp awal rentang penghapusan (dalam detik).
        :param to_time: Timestamp akhir rentang penghapusan (dalam detik).
        :param query: Pernyataan pencarian berbasis indeks yang digunakan untuk memfilter log yang akan dihapus. Kueri SQL, scan, dan frasa tidak didukung.
        :return: ID tugas dari tugas penghapusan asinkron, digunakan untuk memeriksa status tugas nanti.
        """
        print(f"Menyiapkan soft deletion di Logstore '{logstore}' pada Project '{project}'...")
        print(f"Rentang waktu: {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"Kondisi penghapusan (Query): {query}")
    
        # 1. Buat objek permintaan penghapusan.
        request = DeleteLogsRequest(project, logstore, from_time, to_time, query=query)
    
        # 2. Kirim permintaan penghapusan asinkron.
        try:
            res: DeleteLogsResponse = client.delete_logs(request)
            
            # 3. Cetak informasi permintaan dan ID tugas yang dikembalikan.
            print("\n--- Tanda Terima Permintaan ---")
            res.log_print()
            task_id = res.get_taskid()
            print(f"✅ Tugas soft deletion berhasil dikirim! Request ID: {res.get_request_id()}, Task ID: {task_id}")
            return task_id
        except Exception as e:
            print(f"❌ Gagal mengirim tugas soft deletion: {e}")
            return ""
    
    # --- Cara memanggil ---
    # client = LogClient(...) # Proses inisialisasi client dihilangkan di sini.
    
    # project_name = "my-prod-app"
    # logstore_name = "nginx-access-log"
    # # Skenario: Hapus log akses 24 jam terakhir dengan kode status 500 dari alamat IP tertentu.
    # 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"\nSilakan gunakan Task ID '{task_id}' untuk memeriksa status eksekusi tugas.")
    

    project String (Wajib)

    Nama project. Project di Simple Log Service digunakan untuk mengisolasi resource pengguna berbeda dan mengontrol akses ke resource tertentu. Lihat Kelola projects.

    LogStore String (Wajib)

    Nama logstore. Logstore di Simple Log Service digunakan untuk mengumpulkan, menyimpan, dan melakukan kueri log. Lihat Kelola Logstores.

    fromTime int Wajib

    Awal rentang waktu kueri, ditentukan sebagai Unix timestamp.

    toTime int (Wajib)

    Akhir rentang waktu kueri, ditentukan sebagai Unix timestamp.

    query String (Wajib)

    Pernyataan pencarian atau analitik. Untuk informasi lebih lanjut, lihat Ikhtisar kueri dan analisis.

    Berhati-hatilah saat menetapkan "*" atau "level: ERROR". Pengaturan ini dapat menyebabkan penghapusan tidak disengaja terhadap sejumlah besar data.
  3. Pantau status tugas secara berkala.

    Blok kode ini terus-menerus memeriksa progres tugas hingga selesai atau timeout. Ini merupakan langkah kunci untuk memastikan operasi penghapusan berhasil dieksekusi.

    delete_logs adalah API asinkron. Pemanggilan yang berhasil hanya menunjukkan bahwa tugas diterima. Anda harus menggunakan task_id yang dikembalikan untuk memantau status akhir tugas.

    from aliyun.log import GetDeleteLogsStatusRequest, GetDeleteLogsStatusResponse
    def wait_for_task_completion(client: LogClient, project: str, logstore: str, task_id: str, timeout_seconds: int = 300):
        """Menunggu tugas soft deletion selesai dengan memantau statusnya."""
        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"Memeriksa status tugas '{task_id}'... Progres: {progress:.2f}%")
                if progress >= 100.0:
                    print("✅ Tugas selesai!")
                    return True
                time.sleep(2)  # Hindari polling terlalu sering.
            except Exception as e:
                print(f"❌ Gagal memeriksa status tugas: {e}")
                return False
        print(f"⌛️ Tugas timeout (melebihi {timeout_seconds} detik). Silakan coba lagi nanti atau periksa status tugas.")
        return False
    # --- Cara memanggil ---
    # task_id = execute_soft_delete(...)
    # if task_id:
    #     wait_for_task_completion(client, project_name, logstore_name, task_id)
    
  4. Audit dan kelola tugas (lihat riwayat tugas).

    Fitur ini sangat penting untuk audit keamanan dan manajemen operasional karena menyediakan riwayat lengkap semua operasi penghapusan.
    from aliyun.log import ListDeleteLogsTasksRequest
    def list_all_delete_tasks(client: LogClient, project: str, logstore: str):
        """Menampilkan riwayat semua tugas soft deletion untuk Logstore tertentu."""
        print(f"\nMenampilkan riwayat tugas soft deletion untuk Logstore '{logstore}' di Project '{project}'...")
        request = ListDeleteLogsTasksRequest(project=project, logstore=logstore)
        try:
            res = client.list_delete_logs_tasks(request)
            print("✅ Daftar tugas berhasil diambil!")
            res.log_print() # log_print() mencetak semua detail tugas dalam format yang mudah dibaca.
        except Exception as e:
            print(f"❌ Gagal mengambil daftar tugas: {e}")