# Descripción general

> Qué hace DNSServer.DebugLogParser, cómo es un registro de depuración de DNS en Windows, y cuándo vale la pena convertirlo a CSV.

---

LLMS index: [llms.txt](/llms.txt)

---

Windows DNS Server puede escribir un registro de depuración. Es un archivo de texto plano, está pensado para ser leído por un humano, y crece cientos de megabytes al día en un controlador de dominio ocupado. Esa combinación lo hace casi inútil en el momento en que quieres responder una pregunta como *"¿qué cliente pidió este dominio 40.000 veces anoche?"*

**DNSServer.DebugLogParser** convierte ese archivo de texto en una tabla CSV. Una línea del registro se convierte en una fila con columnas nombradas, para que puedas abrirlo en Excel, cargarlo en Power BI, insertarlo masivamente en SQL Server o enviarlo a tu SIEM.

El módulo contiene un único comando:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Windows\System32\dns\dns.log"
```

Ese es todo el punto de entrada. Todo lo demás en este sitio trata sobre hacerlo a escala, programado y en varios servidores.

## Cómo es un registro de depuración DNS

Una entrada en bruto es una sola línea con campos posicionales, algunos de ellos entre corchetes:

```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)
```

Después de la conversión, el mismo evento es una fila CSV que puedes filtrar y ordenar:

```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
```

Fíjate en dos cosas que el formato en bruto hace difíciles y que el parser maneja por ti:

- El nombre consultado está almacenado en notación wire DNS, `(3)odc(9)officeapps(4)live(3)com(0)`, y se convierte en un FQDN normal.
- Un solo evento no siempre es una sola línea. Los bloques de detalle `PACKET` y los mensajes de evento continúan en líneas siguientes indentadas. El parser mantiene esos adjuntos al registro al que pertenecen en lugar de descartarlos o crear filas huérfanas.

Cada entrada lleva hasta 16 campos nativos — marca de tiempo, protocolo, dirección, IP del cliente, tipo de consulta, nombre consultado, código de respuesta, flags y más. La lista completa de columnas está descrita en [Formatos de salida](../02-output-formats/).

## Por qué vale la pena convertir

### Solución de problemas

- Descubrir por qué un nombre no se resuelve y si la consulta siquiera llegó al servidor
- Identificar clientes o aplicaciones mal configuradas que saturan el servidor
- Rastrear de dónde viene realmente una consulta problemática
- Verificar transferencias de zona y comportamiento general del DNS

### Rendimiento y capacidad

- Clasificar clientes por volumen de consultas y encontrar los ruidosos
- Ver qué tipos de registros dominan tu tráfico
- Detectar errores de configuración que causan búsquedas evitables
- Monitorear la carga del servidor a lo largo del tiempo en lugar de adivinar

### Análisis de seguridad

- Detectar túneles DNS y exfiltración de datos (típicamente visible como tráfico excesivo de `TXT` — ver el [ejemplo de análisis con SQL Server](../examples/security-analysis-sql/))
- Encontrar consultas contra dominios de malware y comando y control
- Reconocer patrones de consulta de un host comprometido
- Vigilar abusos de amplificación DNS
- Reconstruir qué ocurrió durante un incidente

### Cumplimiento y auditoría

- Cumplir con obligaciones de registro y retención
- Mantener un rastro de auditoría de la actividad de red
- Generar informes para gerencia o auditores

## Cómo funciona el módulo

`Convert-DNSDebugLogFile` lee el registro como un flujo y escribe el CSV como un flujo. El archivo nunca se carga completo en memoria, así que un registro de 100 MB consume aproximadamente la misma RAM que uno de 10 MB. Los detalles están en [Rendimiento](../04-performance/).

Lo que te ofrece:

| Capacidad | Detalle |
|---|---|
| Diseño CSV consistente | 18 columnas, mismo orden siempre, sin importar qué contextos aparezcan en el registro |
| Registros multilínea | Los bloques de detalle `PACKET` y el texto del evento permanecen adjuntos a su registro |
| Versiones de DNS Server | Formatos de registro desde 2012 R2 hasta 2025 |
| Ediciones de PowerShell | Windows PowerShell 5.1+ y PowerShell 7.x |
| Tamaño de archivo | Probado con registros de más de 100 MB; procesamiento en un solo paso |
| Validación de encabezado | Rechaza archivos que no son registros de depuración DNS (se puede desactivar) |
| Estadísticas | Resúmenes diarios opcionales, por contexto y por cliente/protocolo/tipo |
| Soporte para pipeline | `Get-ChildItem *.log \| Convert-DNSDebugLogFile` |
| Compresión | Salida ZIP opcional, típicamente 90 % más pequeña |
| Limpieza de origen | Eliminación opcional del registro tras ejecución exitosa |
| Registros internacionales | Analiza y escribe fechas según cultura, para que un registro `de-DE` se pueda leer en una estación `en-US` |
| Rutas de red | Lee fuentes desde rutas SMB/UNC |
| Archivos bloqueados | Lee registros que DNS Server (o cualquier otro) tiene abiertos actualmente |

## Registro activo vs. registro rotado

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Lee registros activos con precaución</div>


El módulo puede leer el archivo de registro que DNS Server está escribiendo en este momento. Eso es conveniente para una revisión rápida, pero el archivo sigue cambiando mientras se ejecuta la conversión. El resultado puede perder las entradas más recientes o terminar con un registro truncado.

Para cualquier tarea programada o relevante en producción, convierte los archivos de registro **rotados y cerrados** en su lugar, y nunca combines un registro activo con `-RemoveSourceFile`.
</div>


El patrón práctico es habilitar la rotación de registros en el servidor DNS y dejar que la conversión programada omita el archivo más nuevo:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```

Una implementación completa basada en directivas de grupo está documentada en el [ejemplo de recopilación guiada por GPO](../examples/gpo-driven-collection/).

## Qué ver a continuación

- [Formatos de salida](../02-output-formats/) — qué significan las columnas, con archivos de ejemplo reales
- [Parámetros y opciones](../03-parameters-and-options/) — los controles, explicados en lenguaje sencillo
- [Rendimiento](../04-performance/) — por qué es rápido y cómo mantenerlo rápido
- [Integración](../05-integration/) — Excel, Power BI, SQL, SIEM, Python
- [Buenas prácticas operativas](../06-operational-best-practices/) — ejecutándolo en producción
- [Ejemplos de uso](../examples/) — tareas programadas, despliegue GPO, análisis SQL
- [Referencia de comandos](../commands/convert-dnsdebuglogfile/) — la lista autorizada de parámetros

## Licencia y soporte

Licencia MIT. El soporte comunitario se realiza a través de GitHub Issues; se aceptan reportes de errores y solicitudes de funciones.

- Repositorio GitHub: [AndiBellstedt/DNSServer.DebugLogParser](https://github.com/AndiBellstedt/DNSServer.DebugLogParser)
- PowerShell Gallery: [DNSServer.DebugLogParser](https://www.powershellgallery.com/packages/DNSServer.DebugLogParser)
