# Vianmääritys

> Oireet, joihin todennäköisesti törmäät muuntaessasi DNS-vianmäärityslokeja, niiden syyt ja korjaukset.

---

LLMS index: [llms.txt](/llms.txt)

---

## "Tiedosto ei ole kelvollinen DNS-vianmäärityslokitiedosto"

Otsikkotarkistus hylkäsi syötteen. Yleensä polku on yksinkertaisesti väärä — samaan kansioon tallennettu `.log`-tiedosto, joka ei ole DNS-vianmääritysloki, tai tiedosto, joka sisältää vain kierrätetyn otsikon.

Tarkista seuraavat asiat:

1. Avaa tiedosto. DNS-vianmääritysloki alkaa otsikkorivillä, kuten `Message logging started at …`, ja jatkuu aikaleimatuilla kyselymerkinnöillä.
2. Varmista, että DNS-vianmäärityslokin kirjaus on todella käytössä ja kirjoittaa odottamaasi polkuun:

   ```powershell
   Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize
   ```

3. Jos tiedosto on aidosti DNS-loki, mutta otsikko on epätavallinen — käsin muokattu, esisuodatettu, mukautettu vienti — ohita tarkistus:

   ```powershell
   Convert-DNSDebugLogFile -InputFile "C:\Logs\odd.log" -SkipHeaderValidation
   ```

Pidä tarkistus päällä muualla. Huomaa, että `-SkipHeaderValidation` ei voi yhdistää `-RemoveSourceFile`-parametrin kanssa, joten vahvistamatonta tiedostoa ei voi koskaan poistaa muunnoksen yhteydessä.

## Tulostiedosto on tyhjä tai siinä on paljon vähemmän rivejä kuin odotettu

Tarkista tässä järjestyksessä:

- **Sisältääkö loki lainkaan kyselymerkintöjä?** Vasta kierrätetty loki voi sisältää vain otsikon, jos kyselyjä ei ole vielä tapahtunut.
- **Onko käytössä `-ContextFilter`?** `-ContextFilter Packet` poistaa `Event`- ja `Note`-merkinnät tarkoituksella. Jos suodatit `Event`- tai `Note`-tyyppiin, useimmat sarakkeet ovat myös tyhjiä — nämä merkintätyypit sisältävät vain `DateTime`, `ThreadId`, `Context` ja `Information`.
- **Oliko lähdeloki aktiivinen?** Tiedostoa, johon DNS-palvelin yhä kirjoittaa, voi muuttua muunnoksen aikana; uusimmat merkinnät voivat puuttua ja viimeinen rivi voi olla katkennut. Muunna kierrätetty, suljettu loki, kun tarvitset täydellisen tuloksen.
- **Onko tiedosto vioittunut tai katkennut?** Tarkista lokin loppu puoliksi kirjoitetun rivin varalta.

## Päivät ovat väärin, siirtyneet tai päivä ja kuukausi ovat vaihtaneet paikkaa

Loki on kirjoitettu palvelimella, jonka Windowsin alueasetus poikkeaa muunnoksen suorittavan istunnon asetuksesta. `20.01.2026` ja `01/20/2026` kuvaavat samaa hetkeä, mutta vain jos molemmat osapuolet ovat samaa formaattia.

```powershell
# loki tuli saksalaiselta palvelimelta
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

Aseta `-InputCulture` selkeästi ajoitettuihin tehtäviin sen sijaan, että luottaisit tehtävän suorittavan käyttäjätilin alueasetukseen. Jos tulos halutaan koneen luettavaksi, lisää `-OutputCulture 'sv-SE'`. Lisätietoja [Parametrit ja asetukset](../03-parameters-and-options/).

## Kaikki päätyy yhteen sarakkeeseen tuonnin jälkeen

Erotinmerkki ei täsmää. Moduuli kirjoittaa oletuksena `;`; kuluttajasi odotti `,` (tai päinvastoin).

Suorita muunnos uudelleen kuluttajan haluamalla erotinmerkillä:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter ","
```

…tai kerro tuojalle, mikä erotinmerkki tiedostossa on — Excelissä valitse **Data → From Text/CSV**, PowerShellissä käytä `Import-Csv -Delimiter ';'`.

## "Access denied" (Pääsy evätty)

- DNS-lokin kansio vaatii tyypillisesti järjestelmänvalvojan oikeudet. Käynnistä PowerShell korotettuna tai suorita ajoitettu tehtävä tilillä, jolla on pääsy.
- Tarkista myös kirjoitusoikeudet tuloskansioon, ei pelkästään lukuoikeudet lokiin.
- SMB/UNC-polkujen kohdalla: `SYSTEM`-tilillä ajettava tehtävä todentaa verkossa **tietokoneen tilinä**. Myönnä jaetun kansion ja NTFS-oikeudet kyseiselle tietokoneen tilille (tai `Domain Controllers` -ryhmälle) tai käytä omaa palvelutiliä.
- Jos `-RemoveSourceFile` epäonnistuu muuten onnistuneen ajon lopussa, tilillä on lukuoikeus lokiin, mutta ei poisto-oikeutta.

## Käsittely on hyvin hidasta

1. Tarkista ensin levy — muunnos on I/O-sidonnainen. Kuormittunut levy tai hidas verkkopolku hallitsee suoritusaikaa.
2. Käytä `-NoDetailsParsing`, jos et tarvitse pakettitason JSON-tietoja; yksityiskohtaisissa lokeissa tämä säästää 30–50 %.
3. Käytä `-ContextFilter Packet` kirjoittamaan vähemmän.
4. Pilko valtavat lokit DNS-palvelimen lokin kierrätyksellä sen sijaan, että muunnat yhtä jättimäistä tiedostoa.
5. Harkitse virustorjunnan poissulkemista lokihakemistosta.

Lisää tietoa [Suorituskyky](../04-performance/).

## Pakattu tulos on odotettua suurempi

Erittäin monipuolista sisältöä sisältävät lokit — paljon uniikkeja domaineja, monia eri asiakkaita — pakautuvat huonommin kuin toistuvat. Tämä on normaalia. ZIP saavuttaa yleensä merkittävän koon pienennyksen; jos ei, tarkista, paisuttaako `Details`-sarake tiedostoa ja tarvitsetko sitä lainkaan.

## Tilastot eivät vastaa odotuksiani

- Varmista, että käytit `-OutputType Both` tai `-OutputType Statistic`. `-OutputType CSV` ei kirjoita lainkaan tilastotiedostoja.
- `Count` on kokonaismäärä, ei erillisten lukumäärä. Yksi asiakas, joka kysyy samaa nimeä 500 kertaa, lisää lukemaan 500. Tämä on yleisin syy "tuo luku ei voi olla oikea" -ongelmaan.
- Tilastot ryhmitellään päivittäin. Kaksi päivää kattava loki tuottaa rivejä molemmille päiville.
- Jos `ComputerName` on tyhjä tilastotiedostoissa, `-ComputerName` ei ollut asetettuna muunnoksen aikana.

## Ajoitettu tehtävä toimii vuorovaikutteisesti mutta ei tehtävänä

Useimmiten kyseessä on jokin kolmesta:

- **Moduulia ei löydy.** `SYSTEM`-tili ilman profiilia näkee vain konekohtaiset moduulipolut. Asenna moduuli konekohtaisesti tai lisää tehtävän toimintaan selkeä `Import-Module DNSServer.DebugLogParser`.
- **Väärä alueasetus.** Tehtävän tilin alueasetus poikkeaa omastasi. Aseta `-InputCulture` ja `-OutputCulture` selkeästi.
- **Suorituspolitiikka tai allekirjoittamaton skripti.** Vastaa tehtävän `-ExecutionPolicy` allekirjoituspolitiikkaasi ja poista estot muualta kopioiduilta tiedostoilta.

Suorita tehtävän tarkka komentorivi manuaalisesti samassa kontekstissa (esim. PsExecillä `SYSTEM`-tilillä) toistaaksesi ongelman.

## Ongelman raportointi

Jos mikään ylläoleva ei auta:

1. Päivitä moduuli uusimpaan versioon ja kokeile uudelleen.
2. Etsi samaa oiretta [GitHub-ongelmilistalta](https://github.com/AndiBellstedt/DNSServer.DebugLogParser/issues).
3. Kerää diagnostiikka:

   ```powershell
   $PSVersionTable
   Get-Module DNSServer.DebugLogParser -ListAvailable | Select-Object Name, Version, Path
   Get-Culture
   ```

   sekä tarkka käyttämäsi komento, koko virheilmoitus pinon jäljityksineen ja — jos voit jakaa — pieni anonymisoitu ote lokista, joka toistaa ongelman.
4. Avaa uusi ongelma näillä tiedoilla.
