# Integracja z narzędziami analitycznymi

> Jak załadować przekonwertowany plik CSV do Excela, Power BI, SQL Server, SIEM lub notatnika Pythona — wraz z ustawieniami separatora i formatu daty, które sprawiają, że działa to od pierwszego uruchomienia.

---

LLMS index: [llms.txt](/llms.txt)

---

Chodzi o to, co się dzieje po konwersji dziennika debugowania DNS. CSV wybrano, bo wszystko go odczytuje — ale „wszystko odczytuje CSV” ukrywa dwa ustawienia, które decydują, czy import będzie bezproblemowy, czy popołudniem spędzonym na poprawkach.

## Dwa ustawienia, które decydują o wszystkim

**Separator.** Domyślnie `;`. Zachowaj go dla Excela w lokalizacjach, które używają przecinka jako separatora dziesiętnego. Przełącz na `,` dla większości baz danych i narzędzi do analizy danych. Cokolwiek wybierzesz, poinformuj o tym stronę importującą.

**Format daty.** `-OutputCulture` kontroluje sposób zapisu znaczników czasu. Dla wszystkiego czytanego przez maszynę użyj `sv-SE` (lub kultury inwariantnej), aby `DateTime` miał postać `2026-01-20 23:00:16`:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'
```

Każdy z poniższych odbiorców rozumie ten format bez podpowiedzi. Format specyficzny dla lokalizacji, np. `20.01.2026`, zostanie zaimportowany jako tekst lub, co gorsza, błędnie odczytany jako miesiąc/dzień.

## Microsoft Excel

Najszybszy sposób, by spojrzeć na pojedynczy przekonwertowany dziennik.

- Przy domyślnym separatorze `;` i lokalizacji, która go oczekuje, podwójne kliknięcie otwiera plik z poprawnymi kolumnami.
- Jeśli wszystko trafia do kolumny A, separator nie pasuje do ustawienia Excela. Uruchom ponownie z `-Delimiter ","` lub zaimportuj przez **Dane → Z tekstu/CSV** i wybierz tam separator.
- Zamień zakres na tabelę (`Ctrl+T`) i zbuduj tabelę przestawną na `ClientIP`, `QuestionName` lub `QuestionType`. Najaktywniejsi klienci i najczęściej zapytywane domeny zajmą około minuty.
- Dla danych powyżej kilkuset tysięcy wierszy użyj Power Query lub jednej z innych poniższych opcji.

Pliki `*_Statistic.csv` i `*_PacketStatistic.csv` to zwykle lepsze cele dla Excela — są wstępnie zagregowane i pozostają małe. Zobacz [Formaty wyjściowe](../02-output-formats/).

## Power BI

Importuj pliki CSV i twórz pulpity do analizy aktywności DNS, top klientów, trendów zapytań i wskaźników błędów.

- Wskaż Power Query na *folder* z przekonwertowanymi plikami, a nie na pojedynczy plik. Układ jest identyczny między serwerami i dniami, więc pliki są po prostu dopisywane.
- Kolumna `ComputerName` umożliwia raport wieloserwerowy — ustaw `-ComputerName` podczas konwersji, inaczej nie będziesz mógł filtrować po serwerze.
- `ResponseCode` i `QuestionType` to naturalne filtry; `DateTime` staje się osią czasu.
- Zasilanie Power BI plikami `*_PacketStatistic.csv` zamiast pełnych danych utrzymuje model małym, gdy potrzebujesz tylko dziennych trendów.

## Bazy danych SQL

Masowo załaduj CSV do SQL Server, PostgreSQL lub innej bazy SQL, by przechowywać dane długoterminowo i wykonywać powtarzalne zapytania.

Gotowy przewodnik — definicja tabeli, konwersja, import `SqlBulkCopy` i zapytanie wykrywające podejrzaną aktywność `TXT` — jest opisany w [Security Analysis Workflow with SQL Server](../examples/security-analysis-sql/).

Warto zaplanować przed pierwszym załadowaniem:

- Użyj `-OutputCulture 'sv-SE'`, aby znaczniki czasu trafiły do kolumny `datetime2` bez sztuczek konwersji.
- `Information` i `Details` mogą być długie; nadaj im typ `nvarchar(max)`.
- Indeksuj to, czego faktycznie używasz w zapytaniach — zwykle `DateTime`, `ClientIP` i `QuestionName`.
- Utrzymuj wypełnione `-ComputerName`, aby po scaleniu wiersze były przypisywalne.

## Systemy SIEM

Splunk, Elastic, Sentinel i podobne platformy pobierają CSV do korelacji z inną telemetrią bezpieczeństwa i do alertów.

- Wysyłaj skompresowany wynik (`-CompressOutput`) — jest około dziesięć razy mniejszy, a większość kolektorów sama go rozpakowuje.
- Zdefiniuj mapowanie pól raz; układ kolumn nigdy się nie zmienia między uruchomieniami czy serwerami, w tym zawsze obecna kolumna `ComputerName` na końcu.
- Niech kolektor usuwa duplikaty lub archiwizuje przetworzone pliki `.log`. Job konwersji, który przetwarza te same rotowane logi, inaczej wyśle identyczne wiersze ponownie.
- `-ContextFilter Packet` ogranicza wolumen danych (i koszty licencji), gdy notatki serwera nie są potrzebne.

## Python, R i narzędzia do analizy danych

Strukturalne wyjście jest gotowe do wykrywania anomalii, tworzenia bazowych wzorców i niestandardowej analityki.

```python
import pandas as pd

df = pd.read_csv(
    r"C:\Administration\Logs\DNSServer\dns.csv",
    sep=";",
    parse_dates=["DateTime"],
)

# top 20 najczęściej zapytywanych nazw, tylko zapytania
top = (
    df[df["Direction"] == "Rcv"]
    .groupby("QuestionName")
    .size()
    .sort_values(ascending=False)
    .head(20)
)
print(top)
```

`parse_dates` działa od razu, gdy wyeksportujesz z `-OutputCulture 'sv-SE'`. Dalej pandas, scikit-learn czy R radzą sobie z klasteryzacją, sezonowością i wykrywaniem odchyleń jak zwykle.

## Pozostając w PowerShell

Nie musisz wychodzić z PowerShell, by szybko uzyskać odpowiedź:

```powershell
$dns = Import-Csv "C:\Administration\Logs\DNSServer\dns.csv" -Delimiter ';'

# najbardziej hałaśliwi klienci
$dns | Where-Object Direction -eq 'Rcv' |
    Group-Object ClientIP |
    Sort-Object Count -Descending |
    Select-Object -First 10 Count, Name

# nieudane zapytania
$dns | Where-Object ResponseCode -eq 'NXDOMAIN' |
    Group-Object QuestionName |
    Sort-Object Count -Descending |
    Select-Object -First 10 Count, Name
```

`Import-Csv` wczytuje cały plik do pamięci, więc nadaje się na rotowany fragment, ale nie na wielogigabajtowy eksport — do tego są bazy danych i SIEM.
