# Toiminnalliset parhaat käytännöt

> Mitä pitää saada oikein ennen kuin DNS-lokin muunnos ajetaan valvomatta tuotannon toimialueen ohjaimilla.

---

LLMS index: [llms.txt](/llms.txt)

---

Lokien käsin muuntaminen on helppoa. Sen ajaminen joka yö jokaisella toimialueen ohjaimella vuosikausia ilman, että kukaan katsoo tuloksia, vaatii hieman suunnittelua. Tässä ovat käytännössä tärkeimmät kohdat.

## 1. Muunna kiertävät lokit, älä aktiivista

Ota lokin kierto käyttöön DNS-palvelimella ja muunna vain suljetut tiedostot. Moduuli *voi* lukea lokia, johon DNS-palvelin parhaillaan kirjoittaa, mutta kyseinen tiedosto muuttuu muunnoksen aikana: uusimmat merkinnät voivat puuttua ja viimeinen rivi voi olla katkaistu. Kaksi ajoa tuottaa kaksi erilaista tulosta.

Vakio käytäntö ohittaa uusimman tiedoston:

```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">Älä koskaan yhdistä aktiivista lokia ja -RemoveSourceFile -valitsinta</div>


Tiedoston poistaminen, johon DNS-palvelin vielä kirjoittaa, ei ole asia, jonka haluat huomata jälkikäteen. Rajoita `-RemoveSourceFile` kiertäviin, suljettuihin lokitiedostoihin.
</div>


Huomioitava kompromissi: vähäliikenteisellä palvelimella kierto voi kestää yli päivän, jolloin kuluvan päivän tiedot pysyvät muuntamattomina kunnes tiedosto kiertää. Säädä kierron kynnysarvo sen mukaisesti.

## 2. Ajoita tehtävä ja anna sille toimiva tunnus

Tehtävien ajoitus on tavallisin tapa — päivittäinen ajo on järkevä oletus. Täydellinen ryhmäkäytäntöön perustuva toteutus toimialueen ohjaimille on dokumentoitu [GPO-ohjatun keräyksen esimerkissä](../examples/gpo-driven-collection/), ja itsenäinen tehtävä [Scheduled Task -esimerkissä](../examples/scheduletask/).

Kolme yleistä ongelmaa:

- **Moduulin löydettävyys.** `SYSTEM`-tilassa ja `-NoProfile`-valitsimella ajettava tehtävä näkee vain konekohtaiset moduulipolut. Asenna moduuli konekohtaisesti tai lisää tehtävän toimintaan eksplisiittinen `Import-Module`.
- **Kulttuuri.** Tehtävän suorittavalla tilillä ei välttämättä ole samaa paikallisasetusta, jolla testasit interaktiivisesti. Aseta `-InputCulture` ja `-OutputCulture` eksplisiittisesti äläkä luota oletuksiin.
- **Verkkoyhteys.** Jos lähde- tai kohdekohde on UNC-polku, `SYSTEM` todentuu koneen tilinä. Anna jaetun kansion ja NTFS-oikeudet koneen tilille (tai `Domain Controllers` -ryhmälle) tai aja tehtävä omalla palvelutilillä.

## 3. Kierrä tiedostokoko, jonka pystyt käsittelemään

50–200 Mt per tiedosto pitää muunnokset ennustettavina ja mahdollistaa yön aikana suoritettavan työn. Yksi jatkuvasti kasvava tiedosto ei lopulta pysy mukana. Katso [Suorituskyky](../04-performance/).

## 4. Vahvista ensimmäiset tulokset ennen automatisointia

Aja muunnos manuaalisesti kahdella tai kolmella oikealla lokilla ja avaa CSV-tiedostot:

- Ovatko aikaleimat oikein — eivätkö päivä ja kuukausi ole vaihtaneet paikkaa? (Jos ovat, aseta `-InputCulture`.)
- Vastaako erotin kuluttajasi odotuksia?
- Onko `ComputerName` täytetty?
- Ovatko tarvitsemasi kontekstit mukana ja tarpeettomat suodatettu pois?

`-WhatIf` näyttää, mitä tiedostoja erä koskisi ennen kuin se koskee niitä:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
```

## 5. Päätä, mitä käsitellyille lokeille tapahtuu

Tehtävä, joka yksinkertaisesti muuntaa "kaikki lokit paitsi uusimman", käsittelee samat tiedostot joka yö uudelleen. Se on luotettava ja yksinkertainen, mutta ylikirjoittaa tulokset ja voi työntää duplikaattirivejä kerääjälle.

Valitse yksi:

- siirrä käsitellyt `.log`-tiedostot arkistokansioon
- poista ne `-RemoveSourceFile`-valitsimella, kun putki on luotettava
- tee kerääjästä duplikaattien poisto

Minkä tahansa valitsetkin, kirjaa se ylös — tämä yksityiskohta hämmentää seuraavaa ylläpitäjää.

## 6. Suunnittele tallennus ja säilytys

Pakkaus (`-CompressOutput`) yleensä pienentää CSV:n kokoa yli 90 %, mutta määrä kasvaa silti. Arvioi todellisen kyselymääräsi ja säilytysvelvoitteesi perusteella ja aseta datalle päättymispäivä sen sijaan, että annat sen kasvaa loputtomasti.

`-OutputType Statistic` kannattaa harkita pitkään säilytykseen: päivittäiset yhteenvedot ovat pieniä ja vastaavat usein niitä trendikysymyksiä, joita vanha rivikohtainen data palveli.

## 7. Kohtele tulosta arkaluontoisena

Jäsennellyt DNS-lokit kuvaavat sisäistä nimirakennettasi ja kuka on mitäkin hakenut. Se paljastaa enemmän kuin useimmat infrastruktuurilokit, ja riippuen lainsäädännöstäsi se voi olla henkilötietoa.

- Rajoita NTFS- ja jaetun kansion oikeudet tuloskansioissa.
- Älä pudota CSV-tiedostoja yleiskäyttöiselle tiedostojakolle "väliaikaisesti".
- Sisällytä DNS-lokit säilytys- ja poistopolitiikkaasi, älä pelkästään varmuuskopiointipolitiikkaan.
- Pakattu tulos on pienempi, ei suojattu — käytä salausta tai pääsynvalvontaa siellä, missä sillä on merkitystä.

## 8. Pidä otsikkotarkistus päällä

Oletustarkistus, joka varmistaa tiedoston olevan oikeasti DNS-debug-loki, ei maksa mitään ja estää väärin kirjoitetun polun tuottamasta tuhansia järjettömiä rivejä. Käytä `-SkipHeaderValidation` vain aidosti poikkeuksellisissa formaateissa — ja huomaa, että komento kieltäytyy yhdistämästä sitä `-RemoveSourceFile`-valitsimen kanssa juuri tästä syystä.

## 9. Valvo tehtävää, älä pelkästään palvelinta

Valvomaton muunnos, joka hiljaa pysähtyy, on pahempi kuin ei muunnosta ollenkaan, koska aukko huomataan vasta, kun joku tarvitsee dataa.

- Tarkkaile virheiden esiintymistä; GPO-viiteimplementaatio heittää virheen, kun `$Error.Count -gt 0`, jotta tehtävä raportoi epäonnistumisen.
- Hälytä ajoitetun tehtävän viimeisestä tuloskoodista, älä pelkästään siitä, onko tehtävä olemassa.
- Tarkista, että tulostiedostot todella ilmestyvät ja niissä on tuoreita aikaleimoja.
- Seuraa vapaata levytilaa sekä lokilevyllä että tulostuskohteessa.

Yleisiä epäonnistumisen syitä — pääsyn estot, vioittuneet lokit, virheelliset otsikot — käsitellään [Vianmäärityksessä](../08-troubleshooting/).

## 10. Dokumentoi työnkulku

Missä lokit kirjoitetaan, milloin tehtävä ajetaan, mitä parametreja käytetään, minne tulos menee, kuka sitä käyttää ja kuinka kauan sitä säilytetään. Kuusi riviä ylläpitowikissäsi. Se tekee asetuksesta auditoitavan ja siirrettävän.
