# Przegląd

> Co robi DNSServer.DebugLogParser, jak wygląda debug log DNS w Windows, i kiedy warto go konwertować do CSV.

---

LLMS index: [llms.txt](/llms.txt)

---

Windows DNS Server może zapisywać debug log. To plik tekstowy, przeznaczony do czytania przez człowieka, który na ruchliwym kontrolerze domeny rośnie o setki megabajtów dziennie. To sprawia, że staje się prawie bezużyteczny, gdy chcesz odpowiedzieć na pytanie typu *„który klient pytał o tę domenę 40 000 razy zeszłej nocy?”*

**DNSServer.DebugLogParser** zamienia ten plik tekstowy w tabelę CSV. Jeden wiersz logu staje się jednym wierszem z nazwanymi kolumnami, dzięki czemu możesz otworzyć go w Excelu, załadować do Power BI, masowo wstawić do SQL Server lub wysłać do swojego SIEM.

Moduł zawiera jedno polecenie:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Windows\System32\dns\dns.log"
```

To cały punkt wejścia. Wszystko inne na tej stronie dotyczy działania na dużą skalę, według harmonogramu i na wielu serwerach.

## Jak wygląda debug log DNS

Surowy wpis to pojedyncza linia z polami pozycyjnymi, niektóre w nawiasach:

```text
2026-01-20 23:00:16 0FE0 PACKET 000002C53117D990 UDP Rcv 10.0.0.2 c049 Q [0001 D NOERROR] A (3)odc(9)officeapps(4)live(3)com(0)
```

Po konwersji ten sam event to wiersz CSV, który możesz filtrować i sortować:

```text
DateTime;ThreadId;Context;PacketId;Protocol;Direction;ClientIP;Xid;Type;Opcode;FlagsHex;FlagsChar;ResponseCode;QuestionType;QuestionName;Information;Details;ComputerName
2026-01-20 23:00:16;0FE0;Packet;000002C53117D990;UDP;Rcv;10.0.0.2;c049;Query;Standard;0001;RecursionDesired;NOERROR;A;"odc.officeapps.live.com";"";"";dc01
```

Zwróć uwagę na dwie rzeczy, które w surowym formacie są trudne, a parser za ciebie ogarnia:

- Zapytana nazwa jest zapisana w notacji DNS wire, `(3)odc(9)officeapps(4)live(3)com(0)`, i staje się normalną nazwą FQDN.
- Pojedynczy event nie zawsze to jedna linia. Bloki szczegółów `PACKET` i komunikaty zdarzeń kontynuują się na wciętych kolejnych liniach. Parser trzyma je przy rekordzie, do którego należą, zamiast je odrzucać lub tworzyć osierocone wiersze.

Każdy wpis zawiera do 16 natywnych pól — znacznik czasu, protokół, kierunek, IP klienta, typ zapytania, zapytaną nazwę, kod odpowiedzi, flagi i inne. Pełna lista kolumn jest opisana w [Formaty wyjściowe](../02-output-formats/).

## Po co konwertować

### Rozwiązywanie problemów

- Dowiedz się, dlaczego nazwa się nie rozwiązuje i czy zapytanie w ogóle dotarło do serwera
- Zidentyfikuj źle skonfigurowanych klientów lub aplikacje, które zalewają serwer zapytaniami
- Śledź, skąd faktycznie pochodzi problematyczne zapytanie
- Zweryfikuj transfery stref i ogólne zachowanie DNS

### Wydajność i pojemność

- Uszereguj klientów według liczby zapytań i znajdź tych hałaśliwych
- Zobacz, które typy rekordów dominują w ruchu
- Wykryj błędy konfiguracji powodujące niepotrzebne zapytania
- Monitoruj obciążenie serwera w czasie zamiast zgadywać

### Analiza bezpieczeństwa

- Wykryj tunelowanie DNS i wyciek danych (zwykle widoczne jako nadmierny ruch `TXT` — zobacz [przykład analizy SQL Server](../examples/security-analysis-sql/))
- Znajdź zapytania do domen malware i command-and-control
- Rozpoznaj wzorce zapytań z zainfekowanego hosta
- Obserwuj nadużycia DNS amplification
- Odtwórz, co się wydarzyło podczas incydentu

### Zgodność i audyt

- Spełnij wymogi logowania i przechowywania danych
- Prowadź ścieżkę audytu aktywności sieciowej
- Twórz raporty dla zarządu lub audytorów

## Jak działa moduł

`Convert-DNSDebugLogFile` czyta log jako strumień i zapisuje CSV jako strumień. Plik nigdy nie jest ładowany do pamięci w całości, więc log 100 MB kosztuje mniej więcej tyle samo RAM co 10 MB. Szczegóły w [Wydajność](../04-performance/).

Co dostajesz:

| Możliwość | Szczegóły |
|---|---|
| Spójny układ CSV | 18 kolumn, zawsze w tej samej kolejności, niezależnie od kontekstów w logu |
| Rekordy wieloliniowe | Bloki szczegółów `PACKET` i tekst zdarzeń pozostają przy swoim rekordzie |
| Wersje DNS Server | Format logów od 2012 R2 do 2025 |
| Wersje PowerShell | Windows PowerShell 5.1+ i PowerShell 7.x |
| Rozmiar pliku | Testowane na logach 100 MB+; przetwarzanie jednokrotne, strumieniowe |
| Walidacja nagłówka | Odrzuca pliki, które nie są debug logami DNS (można wyłączyć) |
| Statystyki | Opcjonalne dzienne podsumowania, według kontekstu i klienta/protokół/typ |
| Obsługa potoku | `Get-ChildItem *.log \| Convert-DNSDebugLogFile` |
| Kompresja | Opcjonalny output ZIP, zwykle o 90% mniejszy |
| Czyszczenie źródła | Opcjonalne usunięcie logu po udanym przebiegu |
| Logi międzynarodowe | Parsuje i zapisuje daty według kultury, więc log `de-DE` można czytać na stacji `en-US` |
| Ścieżki sieciowe | Czyta źródła z SMB/UNC |
| Pliki zablokowane | Czyta logi, które DNS Server (lub cokolwiek innego) ma aktualnie otwarte |

## Aktywny log vs. log rotowany

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Uważaj przy czytaniu aktywnych logów</div>


Moduł może czytać plik logu, do którego DNS Server właśnie zapisuje. To wygodne do szybkiego podglądu, ale plik ciągle się zmienia podczas konwersji. Wynik może nie zawierać najnowszych wpisów lub zakończyć się uciętym rekordem.

Do zadań zaplanowanych lub produkcyjnych konwertuj **rotowane, zamknięte** pliki logów i nigdy nie łącz aktywnego logu z `-RemoveSourceFile`.
</div>


Praktyczny wzorzec to włączenie rotacji logów na serwerze DNS i pozwolenie, by zaplanowana konwersja pominęła najnowszy plik:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```

Pełna implementacja oparta na zasadach grupy jest opisana w [przykładzie zbierania opartego na GPO](../examples/gpo-driven-collection/).

## Co dalej

- [Formaty wyjściowe](../02-output-formats/) — co oznaczają kolumny, z prawdziwymi przykładami plików
- [Parametry i opcje](../03-parameters-and-options/) — pokrętła, wyjaśnione prostym językiem
- [Wydajność](../04-performance/) — dlaczego jest szybko i jak utrzymać szybkość
- [Integracja](../05-integration/) — Excel, Power BI, SQL, SIEM, Python
- [Dobre praktyki operacyjne](../06-operational-best-practices/) — uruchamianie w produkcji
- [Przykłady użycia](../examples/) — zadania zaplanowane, wdrożenie GPO, analityka SQL
- [Referencja poleceń](../commands/convert-dnsdebuglogfile/) — autorytatywna lista parametrów

## Licencja i wsparcie

Licencja MIT. Wsparcie społecznościowe odbywa się przez GitHub Issues; zgłaszanie błędów i propozycji funkcji jest mile widziane.

- Repozytorium GitHub: [AndiBellstedt/DNSServer.DebugLogParser](https://github.com/AndiBellstedt/DNSServer.DebugLogParser)
- PowerShell Gallery: [DNSServer.DebugLogParser](https://www.powershellgallery.com/packages/DNSServer.DebugLogParser)
