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
Kasus penggunaan
Peringatan
-
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.
-
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.
-
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.
-
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:
-
Dalam skrip, ganti
Project namedanLogstore namedengan nilai aktual Anda. -
Untuk informasi lebih lanjut tentang cara mengonfigurasi izin untuk Pengguna RAM, lihat Konfigurasi izin RAM untuk Simple Log Service dan Informasi otorisasi.
{ "Version": "1", "Statement": [ { "Action": [ "log:DeleteLogStoreLogs", "log:GetDeleteLogStoreLogsTask", "log:ListDeleteLogStoreLogsTasks" ], "Resource": [ "acs:log:*:*:project/ProjectName/logstore/LogstoreName" ], "Effect": "Allow" } ] } -
-
Operasi Konsol
Masuk ke Konsol Simple Log Service. Pada bagian Projects, klik proyek yang diinginkan.
-
Di tab , klik logstore yang diinginkan.
-
Di halaman Search & Analysis Logstore, masukkan pernyataan kueri dan pilih rentang waktu. Di tab Raw Log, klik .
-
Di kotak dialog Soft Delete Log, baca informasi dengan cermat lalu klik Confirm. Setelah log dihapus, log tersebut tidak lagi terlihat.
-
Setelah penghapusan selesai, di tab Raw Log, klik . Di daftar Soft Delete Task, Anda dapat melihat riwayat tugas penghapusan.
Operasi SDK
Python
-
Gunakan
pip show aliyun-log-python-sdkuntuk memeriksa versialiyun-log-python-sdk.Versi
aliyun-log-python-sdkharus 0.9.28 atau lebih baru. Jika versi Anda lebih lama, gunakan perintahpip install -U aliyun-log-python-sdkuntuk meningkatkan versi SDK. -
Kirim tugas soft deletion.
DeleteLogsRequestmemiliki 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
intWajibAwal 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. -
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_logsadalah API asinkron. Pemanggilan yang berhasil hanya menunjukkan bahwa tugas diterima. Anda harus menggunakantask_idyang 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) -
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}")
> Soft Delete Log