Secara otomatis membersihkan log IIS menggunakan PowerShell

Server web IIS (Internet Information Services) menghasilkan sejumlah besar log dalam proses, yang ditulis ke file log. Masalah utama adalah bahwa, secara default, log IIS terletak pada disk sistem, dan seiring waktu, file log dapat menyumbat semua ruang disk yang tersedia dan operasi server akan lumpuh. Misalnya, dalam kasus saya di Exchange Server 2013 dengan hampir 1000 kotak pesan, IIS menghasilkan file log 200 MB per hari. Jadi, dalam setahun, file log IIS akan menempati 70 GB ruang disk. Apakah mungkin untuk mengendalikan proses ini entah bagaimana?

IIS tidak memiliki prosedur rotasi log IIS bawaan, jadi administrator harus menemukan skema mereka sendiri untuk secara otomatis memutar atau menghapus log IIS pada server web.

Pertama-tama, administrator harus memutuskan secara prinsip apakah log yang dihasilkan IIS diperlukan sama sekali. Jika pertanyaannya negatif - pencatatan log dapat dinonaktifkan di pengaturan situs di konsol Manajer Layanan Informasi Internet (IIS) di bagian ini Penebangan. Dalam beberapa kasus, transfer file log dari disk sistem ke disk data / disk khusus juga berlaku. Untuk melakukan ini, di bagian yang sama, cukup ubah path ke direktori LogFiles.

Jadi secara default, di Windows Server 2003, log IIS disimpan di folder%windir% \ system32 \ LogFiles \ dan di Windows Server 2008/2012 / R2 di folder % SystemDrive% \ inetpub \ logs \ LogFiles \.

Dalam hal kehabisan ruang kosong pada disk sistem, administrator dengan panik mencoba menemukan apa yang tersumbat dengan disk, dan dengan aman tidak memperhatikan direktori inetpub, karena Sekilas, ukurannya bisa diabaikan. Masalahnya adalah bahwa secara default administrator tidak memiliki izin untuk melihat direktori standar di dalam folder inetpub, dan dengan demikian Windows Explorer tidak menunjukkan ukuran sebenarnya dari subfolder.

Jika Anda mencoba membuka direktori% SystemDrive% \ inetpub \ logs \ LogFiles, mengonfirmasi izin yang diperlukan (atau meluncurkan Explorer dengan hak administrator), Anda dapat melihat bahwa ukuran folder log sebenarnya cukup besar.

Sebagai aturan, Anda dapat dengan aman menghapus semua file log yang lebih lama dari 3-7 hari. Ini dapat dilakukan secara manual (bukan opsi terbaik), atau secara otomatis menggunakan skrip PowerShell yang akan menghapus file log lama sesuai jadwal.

Script PowerShell sederhana yang secara rekursif akan menghapus file dengan ekstensi * .log dari direktori C: \ inetpub \ logs bisa seperti ini:

gci 'C: \ inetpub \ logs -Include' * .log '-Recurse | ? LastWriteTime -LT (Get-Date) .AddDays (-7) | Hapus-Item

Untuk menjalankan skrip secara otomatis, Anda dapat membuat tugas berikut dalam penjadwal (Penjadwal Tugas):

  1. Lari Penjadwal tugas
  2. Di panel kanan Aksi klik Buat tugas dasar
  3. Tentukan nama tugas: CleanIISLog
  4. Atur tugas peluncuran mingguan pada hari Sabtu
  5. Program yang diluncurkan: powershell.exe
  6. Argumen: -NoProfile -command "gci 'C: \ inetpub \ logs -Include' * .log '-Recurse | ? LastWriteTime -LT (Get-Date) .AddDays (-7) | Hapus-Barang ยป
  7. Sekarang buka properti dari tugas yang dibuat
  8. Tentukan bahwa tugas akan diluncurkan dari bawah Sistem (NT AUTHORITY \ System) dan centang kotak Jalankan dengan hak istimewa tertinggi
  9. Uji tugas dengan mengkliknya dengan RMB dan memilih Lari
  10. Pastikan semua file log yang lebih dari 7 hari dihapus secara otomatis

Kiat. Cara lain untuk "cepat" mengurangi ukuran log ketika tidak mungkin untuk menghapusnya karena alasan tertentu adalah mengaktifkan kompresi NTFS pada direktori log. Karena log adalah file teks sederhana, mereka dikompres dengan sangat kuat (4-5 kali). Untuk mengaktifkan kompresi NTFS, buka properti folder log dan klik tombol Advanced. Centang kotak Kompres konten untuk menghemat ruang disk dan klik dua kali OK.