Dotyczy wersji: dowolnej; Autor: Karol Woźniak
Logi zajmujące większość wolnego miejsca na dysku są częstym zjawiskiem w systemach wykorzystujących IIS oraz platformę SharePoint. Pomimo istnienia wielu różnych praktyk pozwalających na radzenie sobie z tym problemem zwykle muszą one być każdorazowo dostosowywane do potrzeb danego scenariusza. Kluczową kwestią determinującą rodzaj podejścia do zarządzania rozmiarem logów jest m.in. rodzaj środowiska tzn. DEV/TEST/PROD.
Poza pewnymi prostymi radami zaprezentowane zostanie rozwiązanie z użyciem skryptu PowerShell, które w połączeniu z Harmonogramem Zadań system Windows pozwala na automatyzację usuwania rozrastających się logów IIS i SharePoint zgodnie ze zdefiniowanymi regułami.
WAŻNE: Należy mieć na uwadze, iż rozwiązanie przedstawione poniżej jest przeznaczone głównie na środowiska developerskie oraz testowe i powinno być wdrażane ze szczególną uwagą na produkcji.
Kompresja logów IIS
Domyślnie IIS przechowuję swoje logi w lokalizacji %SystemDrive%\inetpub\logs\LogFiles. Automatyzacja tego procesu nie jest dostępna bezpośrednio z poziomu usługi IIS, aczkolwiek istnieją praktyki pozwalające zmniejszyć ilość miejsca na dysku wykorzystywaną przez usługę na przechowywanie logów. Najprostszym rozwiązaniem jest uruchomienie kompresji danych na folderze zawierającym pliki dziennika. By tego dokonać należy wybrać opcję „Właściwości” po kliknięciu prawym przyciskiem myszy na folderze a następnie wybrać opcję „Zaawansowane” na zakładce „Ogólne”.
W nowo otwartym oknie należy zaznaczyć checkbox „Kompresuj zawartość, aby zaoszczędzić miejsce na dysku”.
Pliki dziennika SharePoint
W przeciwieństwie do IIS, SharePoint dysponuję wbudowaną funkcjonalnością pozwalającą na zarządzanie generowanymi logami. Opcje to dostępne są z poziomu Centralnej Administracji platformy SharePoint. Można je znaleźć w kategorii Monitorowanie, a następnie wybrać opcję “Konfiguruj rejestrowanie diagnostyczne”
Dostępne są następujące opcje:
- Zmiana domyślnej ścieżki zapisu logów
- Ustalenie liczby dni przechowywania plików dziennika (domyślnie 14 dni)
- Ograniczenie użycia miejsca na dysku na przechowywanie logów (domyślnie wyłączone)
Administratorzy mogą (i powinni!) stosować powyższe opcje by świadomie kontrolować ilość miejsca zajmowanego przez dzienniki zdarzeń zgodnie z polityką firmy i dobrymi praktykami.
Rozwiązanie PowerShell dla IIS i SharePoint
Użycie PowerShella w celu rozwiązania problemu opisanego powyżej jest rozwiązaniem uniwersalnym dla IIS i SharePoint. W połączeniu z Harmonogramem Zadań systemu Windows daję to administratorowi elastyczność w ustaleniu kiedy i w ramach jakich warunków skrypt powinien być uruchomiony, a w konsekwencji nadmiarowe pliki dziennika usunięte z dysku.
Dodatkowo możliwe jest wprowadzenie pewnych reguł (np. jaka stare powinny być logi przeznaczone do usunięcia), które będą obowiązywały dla obu kategorii logów oraz ponowne użycie tak przygotowanego rozwiązania na wielu odmiennych środowiskach.
Skrypt można pobrać klikając tutaj:
Informacje dot. skryptu
- Sprawdzana jest zainstalowana wersja SharePoint (2010/2013/2016) oraz ustala domyślna ścieżka przechowywania logów
- Próba usunięcia wszystkich plików z rozszerzeniem .log z domyślnego folderu logów IIS oraz ustalonego folderu plików dziennika SharePoint
- Zostaną usunięte tylko pliki starsze niż N dni (gdzie N to parametr przekazywany przy wywoływaniu funkcji np. -30 oznacza pliki starsze niż 30 dni)
- W celu wywołania funkcji należy wprowadzić trzy parametry: liczbę dni (tylko pliki starsze niż ta wartość zostaną usunięte), ścieżka zapisu logów wykonania skryptu, nazwa pliku logu wykonania skryptu
Zalecany sposób użycia tego rozwiązania wykorzystuję Harmonogram Zadań systemu Windows:
- Otwórz Harmonogram Zadań w systemie Windows
- Dodaj nowe zadanie
- Uzupełnij konfigurację na zakładce Ogólne [propozycja konfiguracji na screenie]:
4. Skonfiguruj Wyzwalacze zgodnie z preferencjami [propozycja konfiguracji na screenie]:
5. Konfiguracja Akcji: w tym kroku skrypt PowerShell zostanie wykonany z odpowiednimi parametrami
Należy pamiętać o przekazaniu prawidłowych parametrów wywołując skrypt, np.:
"C:\Users\k.wozniak\Desktop\clearSpandIISLogs.ps1" -10 "C:\logFiles\" "cleanLog.txt"
Uogólniając:
"ścieżka do skryptu .ps1" liczbaDni "ścieżka do zapisu logu wykonania" "nazwa logu z rozszerzeniem"
gdzie:
liczbaDni – jeżeli ustawione na wartość np. -30 oznacza, że zostaną usunięte tylko pliki starsze niż 30 dni
6. Konfiguracja pozostałych kroków zgodnie z preferencjami Administratora
Wady tego rozwiązania PowerShellowego:
- Mimo, że funkcja sprawdza wersję SharePoint to ustala ona tylko domyślną ścieżkę zależną od wersji. Jeżeli administrator zmienił ścieżke zapisu plików dziennika na niestandardową (z poziomu Centralnej Administracji) logi SharePointa nie zostaną usunięte.
- Jeżeli jakikolwiek z plików dziennika, który ma zostać usunięty jest używany w trakcie usuwania przez inny proces (np. aktualnie trwa zapis logów do tego pliku) to rzucony zostanie błąd do konsoli i ten konkretny plik nie zostanie usunięty, czyszczenie reszty logów będzie kontynuowane.