# Najlepsze praktyki operacyjne

> Co zrobić dobrze, zanim pozwolisz na automatyczne uruchamianie konwersji dzienników DNS na produkcyjnych kontrolerach domeny.

---

LLMS index: [llms.txt](/llms.txt)

---

Konwersja dziennika ręcznie jest prosta. Uruchamianie jej co noc na każdym kontrolerze domeny, przez lata, bez nadzoru, to już wymaga pewnego zaprojektowania. Oto punkty, które mają znaczenie w praktyce.

## 1. Konwertuj dzienniki obrócone, nie aktywne

Włącz obracanie dzienników na serwerze DNS i konwertuj tylko zamknięte pliki. Moduł *może* czytać dziennik, do którego serwer DNS aktualnie zapisuje, ale ten plik zmienia się w trakcie konwersji: najnowsze wpisy mogą być nieobecne, a ostatni rekord może być obcięty. Dwa uruchomienia dają dwa różne wyniki.

Standardowy wzorzec pomija najnowszy plik:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Nigdy nie łącz aktywnego dziennika z -RemoveSourceFile</div>


Usunięcie pliku, do którego serwer DNS nadal zapisuje, to coś, czego nie chcesz odkryć później. Ogranicz `-RemoveSourceFile` do obróconych, zamkniętych dzienników.
</div>


Warto mieć świadomość kompromisu: na serwerze o niskim natężeniu ruchu obracanie może trwać dłużej niż dobę, więc dane z bieżącego dnia pozostaną nieprzetworzone, dopóki plik się nie obróci. Dopasuj próg obracania odpowiednio.

## 2. Zaplanuj zadanie i nadaj mu działającą tożsamość

Harmonogram zadań (Task Scheduler) to zwykle miejsce na to — codziennie to rozsądny domyślny wybór. Pełna implementacja GPO dla kontrolerów domeny jest opisana w [przykładzie zbierania opartego na GPO](../examples/gpo-driven-collection/), a samodzielne zadanie w [przykładzie zadania zaplanowanego](../examples/scheduletask/).

Trzy rzeczy sprawiają tu problemy:

- **Odnajdywanie modułu.** Zadanie uruchamiane jako `SYSTEM` z `-NoProfile` widzi tylko moduły dostępne dla całego komputera. Zainstaluj moduł globalnie lub dodaj jawne `Import-Module` w akcji zadania.
- **Kultura.** Konto uruchamiające zadanie może nie mieć tej samej lokalizacji, na której testowałeś interaktywnie. Ustaw jawnie `-InputCulture` i `-OutputCulture` zamiast polegać na domyślnych.
- **Dostęp do sieci.** Jeśli źródło lub cel to ścieżka UNC, `SYSTEM` uwierzytelnia się jako konto komputera. Przyznaj prawa udziału i NTFS dla konta komputera (lub grupy `Domain Controllers`), albo uruchom zadanie jako dedykowane konto usługi.

## 3. Obracaj przy rozmiarze, który możesz przetworzyć

50–200 MB na plik utrzymuje konwersje przewidywalne i pozwala na zakończenie zadania nocnego w wyznaczonym czasie. Jeden plik, który rośnie bez końca, w końcu tego nie zapewni. Zobacz [Wydajność](../04-performance/).

## 4. Zweryfikuj pierwsze wyniki przed automatyzacją

Uruchom konwersję ręcznie na dwóch lub trzech prawdziwych dziennikach i faktycznie otwórz CSV:

- Czy znaczniki czasu są poprawne — bez zamiany dnia z miesiącem? (Jeśli nie, ustaw `-InputCulture`.)
- Czy separator odpowiada temu, czego oczekuje odbiorca?
- Czy `ComputerName` jest wypełnione?
- Czy są obecne potrzebne konteksty, a niepotrzebne są odfiltrowane?

`-WhatIf` pokaże, które pliki partia by przetworzyła, zanim to zrobi:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
```

## 5. Zdecyduj, co zrobić z przetworzonymi dziennikami

Zadanie, które po prostu konwertuje „wszystkie dzienniki oprócz najnowszego”, będzie przetwarzać te same pliki co noc. To jest solidne i proste, ale nadpisuje wyniki i może wprowadzać duplikaty do systemu, który je pobiera.

Wybierz jedno:

- przenieś przetworzone pliki `.log` do folderu archiwum
- usuń je z `-RemoveSourceFile`, gdy zaufasz już potokowi
- spraw, by kolektor po stronie odbiorcy usuwał duplikaty

Cokolwiek wybierzesz, zapisz to — to szczegół, który myli kolejnego administratora.

## 6. Zaplanuj miejsce na dane i okres przechowywania

Kompresja (`-CompressOutput`) zwykle zmniejsza CSV o 90% lub więcej, ale objętość i tak rośnie. Oszacuj na podstawie faktycznego tempa zapytań i wymagań retencji, i ustaw datę końcową dla danych zamiast pozwalać im rosnąć bez końca.

`-OutputType Statistic` warto rozważyć przy długim okresie przechowywania: dzienne podsumowania są malutkie i często odpowiadają na pytania o trendy, dla których dawniej przechowywano szczegółowe dane.

## 7. Traktuj wynik jako wrażliwy

Przetworzone dzienniki DNS opisują twoją wewnętrzną strukturę nazw i kto czego szukał. To bardziej ujawniające niż większość dzienników infrastruktury i w zależności od jurysdykcji może być traktowane jako dane osobowe.

- Ogranicz uprawnienia NTFS i udziału do folderów wyjściowych.
- Nie zostawiaj CSV na ogólnodostępnym udziale „tymczasowo”.
- Uwzględnij dane dzienników DNS w polityce retencji i usuwania, nie tylko w polityce kopii zapasowych.
- Skompresowany wynik jest mniejszy, ale nie chroniony — stosuj szyfrowanie lub kontrolę dostępu tam, gdzie to ważne.

## 8. Zachowaj weryfikację nagłówka

Domyślna kontrola, czy plik to naprawdę dziennik debugowania DNS, nic nie kosztuje i zapobiega tworzeniu tysięcy nonsensownych wierszy przez literówkę w ścieżce. Używaj `-SkipHeaderValidation` tylko dla naprawdę nietypowych formatów — i pamiętaj, że polecenie odmawia łączenia tego z `-RemoveSourceFile właśnie z tego powodu.

## 9. Monitoruj zadanie, nie tylko serwer

Automatyczna konwersja, która cicho przestaje działać, jest gorsza niż brak konwersji, bo luka jest zauważana dopiero, gdy ktoś potrzebuje danych.

- Obserwuj wyjście błędów różne od zera; referencyjna implementacja GPO celowo rzuca wyjątkiem, gdy `$Error.Count -gt 0`, by zadanie zgłaszało błąd.
- Alarmuj na podstawie ostatniego kodu wyniku zadania zaplanowanego, nie tylko na istnienie zadania.
- Sprawdzaj, czy pliki wyjściowe faktycznie pojawiają się z aktualnymi znacznikami czasu.
- Monitoruj wolne miejsce na dysku zarówno na wolumenie dzienników, jak i na miejscu docelowym.

Typowe przyczyny nieudanego uruchomienia — odmowa dostępu, uszkodzone dzienniki, nieprawidłowe nagłówki — są omówione w [Rozwiązywaniu problemów](../08-troubleshooting/).

## 10. Dokumentuj proces

Gdzie zapisywane są dzienniki, kiedy uruchamia się zadanie, jakie parametry są używane, gdzie trafia wynik, kto go pobiera i jak długo jest przechowywany. Sześć linijek w twojej wiki operacyjnej. To właśnie sprawia, że konfiguracja jest audytowalna i możliwa do przekazania dalej.
