# Formats de sortie

> Les colonnes du fichier de données CSV, les deux fichiers statistiques optionnels, et des exemples réels de sorties que tu peux ouvrir avant de lancer quoi que ce soit.

---

LLMS index: [llms.txt](/llms.txt)

---

`Convert-DNSDebugLogFile` produit jusqu'à trois fichiers par fichier journal d'entrée :

| Fichier | Contenu | Créé quand |
|---|---|---|
| `<name>.csv` | Une ligne par entrée de journal analysée | `-OutputType CSV` ou `Both` |
| `<name>_Statistic.csv` | Nombre d'enregistrements quotidiens par contexte | `-OutputType Statistic` ou `Both` |
| `<name>_PacketStatistic.csv` | Nombre quotidien de requêtes par client, protocole, direction et type d'enregistrement | `-OutputType Statistic` ou `Both` |

`Both` est la valeur par défaut. La sortie est placée à côté du fichier d'entrée sauf si tu définis `-OutputFile`.

Les fichiers exemples liés sur cette page sont des résultats de conversion réels, pas des maquettes. Télécharge-en un et ouvre-le dans Excel avant de te lancer dans la conception d'un pipeline.

## Le fichier de données CSV

Exemple de sortie :

| Locale | Colonne Détails | Fichiers |
|---|---|---|
| en-US | non renseignée | [WithComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.WithComputerName.csv), [NoComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.NoComputerName.csv) |
| de-DE | non renseignée | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.NoDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.NoDetails.csv) |
| de-DE | renseignée | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.WithDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.WithDetails.csv) |

Deux lignes issues d'une conversion réelle — une requête DNS et une note interne au serveur :

```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
2026-01-20 23:00:16;DF0;Note;;;;;;;;;;;;"";"got GQCS failure on a dead socket context status=995, socket=904";"";dc01
```

### Colonnes

Toujours 18 colonnes, toujours dans cet ordre :

| # | Colonne | Signification | Usage typique |
|---|---|---|---|
| 1 | `DateTime` | Horodatage de l'entrée | Filtrage temporel, jointure avec d'autres journaux |
| 2 | `ThreadId` | Thread de travail du serveur DNS | Rarement nécessaire ; utile pour corréler des problèmes internes au serveur |
| 3 | `Context` | Type d'entrée : `Packet`, `Event`, `Note`, `DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone` | Premier filtre que tu appliqueras — `Packet` correspond au trafic DNS réel |
| 4 | `PacketId` | Identifiant interne du paquet | Jumeler une requête avec sa réponse |
| 5 | `Protocol` | `UDP` ou `TCP` | Les pics TCP peuvent indiquer de grosses réponses ou des transferts de zone |
| 6 | `Direction` | `Rcv` (requête reçue) ou `Snd` (réponse envoyée) | Séparer le volume des requêtes du volume des réponses |
| 7 | `ClientIP` | Adresse de l'hôte qui interroge | Analyse des plus gros émetteurs, cadrage d'incident |
| 8 | `Xid` | ID de transaction DNS (hexadécimal) | Faire correspondre requête et réponse |
| 9 | `Type` | `Query` ou `Response` | |
| 10 | `Opcode` | `Standard`, `Notify`, `Update`, `Unknown` | Sépare les mises à jour dynamiques et notifications de zone des recherches normales |
| 11 | `FlagsHex` | Flags bruts de l'en-tête (hexadécimal) | Pour une analyse approfondie du protocole |
| 12 | `FlagsChar` | Flags décodés : `Authoritative`, `Truncated`, `RecursionDesired`, `RecursionAvailable` | Version lisible des flags ci-dessus |
| 13 | `ResponseCode` | `NOERROR`, `NXDOMAIN`, `SERVFAIL`, … | Rapport de taux d'erreur, recherche d'échecs de résolution |
| 14 | `QuestionType` | Type d'enregistrement : `A`, `AAAA`, `MX`, `PTR`, `TXT`, … | Le volume `TXT` est un indicateur classique de tunneling |
| 15 | `QuestionName` | Nom interrogé en FQDN normal | Correspondance avec renseignements sur les menaces, rapports de domaines principaux |
| 16 | `Information` | Texte libre pour les entrées `Event` / `Note` ; pour les blocs de détails `Packet`, ligne d'en-tête TCP/UDP | Lecture des messages serveur |
| 17 | `Details` | Représentation JSON d'un bloc de détails `Packet` ; vide sinon | Inspection complète du paquet sans revenir au journal brut |
| 18 | `ComputerName` | Serveur source, depuis `-ComputerName` | Permet d'attribuer les données multi-serveurs |

Deux points à prévoir :

- **Toutes les colonnes ne sont pas remplies pour chaque ligne.** Seules les entrées `Packet` ont une IP client, un nom de question et un code de réponse. Les lignes `Note` et `Event` portent leur texte dans `Information` et laissent les colonnes protocole vides. Conçois ton schéma de base de données et tes filtres de tableau de bord en conséquence.
- **`ComputerName` est toujours la dernière colonne, même si tu n'utilises pas `-ComputerName`.** Elle est alors simplement vide. Cela garantit une mise en page identique sur tous les serveurs pour concaténer des fichiers de plusieurs serveurs DNS sans étape de mappage des colonnes.

### La colonne Détails

Les blocs de détails n'apparaissent que si le serveur DNS est configuré pour enregistrer les détails complets des paquets. Lorsqu'ils existent, le parseur les convertit en une seule valeur JSON pour que la ligne reste unique :

```json
{
  "Socket": "848",
  "Remote": "addr 10.10.0.11, port 60580",
  "Buflength": "0x10000 (65536)",
  "Message": {
    "XID": "0x0001",
    "OPCODE": "0 (QUERY)",
    "RCODE": "0 (NOERROR)",
    "QUESTION": [ { "Name": "berlin.de", "QTYPE": "A (1)", "QCLASS": "1" } ],
    "ANSWER": []
  }
}
```

Analyser ces blocs prend du temps et rend le CSV beaucoup plus volumineux. Si tu n'en as pas besoin, utilise `-NoDetailsParsing` — la colonne reste présente mais vide, et la conversion est plus rapide. Voir [Performance](../04-performance/).

## Les fichiers statistiques

Les statistiques sont des agrégats quotidiens. Utilise-les quand tu veux une tendance ou un résumé et que tu ne veux pas manipuler l'ensemble complet des enregistrements — ils sont des ordres de grandeur plus petits que le fichier de données.

### Statistiques par contexte (`*_Statistic.csv`)

Répondent à la question : *quelle quantité de quel type d'activité s'est produite par jour ?*

```text
Date;Context;Count;ComputerName
2026-01-20;Event;2;dc01
2026-01-20;Note;2;dc01
2026-01-20;Packet;12;dc01
```

| Colonne | Signification |
|---|---|
| `Date` | Jour, toujours au format `yyyy-MM-dd` |
| `Context` | Nom du contexte (`Packet`, `Event`, `Note`, …) |
| `Count` | Nombre d'enregistrements de ce contexte ce jour-là |
| `ComputerName` | Serveur source |

Fichiers exemples : [en-US WithComputerName](../outputformat/en-us.-.dnsdebug-dc01_Statistic.-.WithComputerName.csv), [en-US NoComputerName](../outputformat/en-us.-.dnsdebug-dc01_Statistic.-.NoComputerName.csv), [de-DE WithComputerName](../outputformat/de-de.-.dnsdebug-dc01_Statistic.-.WithComputerName.csv), [de-DE NoComputerName](../outputformat/de-de.-.dnsdebug-dc01_Statistic.-.NoComputerName.csv)

### Statistiques par paquet (`*_PacketStatistic.csv`)

Répondent à la question : *qui a interrogé quoi, combien de fois, par jour ?*

```text
Date;ClientIP;Protocol;Direction;QuestionType;Count;ComputerName
2026-01-20;10.0.0.1;UDP;Rcv;A;3;dc01
2026-01-20;10.0.0.1;UDP;Snd;A;3;dc01
2026-01-20;10.0.0.2;UDP;Rcv;A;3;dc01
```

| Colonne | Signification |
|---|---|
| `Date` | Jour, toujours au format `yyyy-MM-dd` |
| `ClientIP` | Hôte qui interroge |
| `Protocol` | `UDP` ou `TCP` |
| `Direction` | `Rcv` ou `Snd` |
| `QuestionType` | Type d'enregistrement DNS |
| `Count` | Nombre de paquets correspondants ce jour-là |
| `ComputerName` | Serveur source |

Fichiers exemples : [en-US WithComputerName](../outputformat/en-us.-.dnsdebug-dc01_PacketStatistic.-.WithComputerName.csv), [en-US NoComputerName](../outputformat/en-us.-.dnsdebug-dc01_PacketStatistic.-.NoComputerName.csv), [de-DE WithComputerName](../outputformat/de-de.-.dnsdebug-dc01_PacketStatistic.-.WithComputerName.csv), [de-DE NoComputerName](../outputformat/de-de.-.dnsdebug-dc01_PacketStatistic.-.NoComputerName.csv)

<div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">Les totaux sont des sommes, pas des valeurs distinctes</div>


`Count` est le nombre d'enregistrements dans ce groupe quotidien. Un client qui a demandé le même nom 500 fois contribue pour 500, pas 1. Si un nombre semble trop élevé, c'est généralement pour cette raison.
</div>


## Délimiteur et format de date

Les deux types de sortie respectent `-Delimiter` (par défaut `;`) et `-OutputCulture`. Pour tout ce qui sera importé par une machine, écris des horodatages au format ISO-like :

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'
```

Cela produit `2026-01-20 23:00:16`, que SQL Server, Power BI et pandas lisent sans indication de format. Détails dans [Paramètres et options](../03-parameters-and-options/).
