<!-- review: finished -->

<a id="troubleshooting"></a>

# Solución de problemas

Si encuentra un problema técnico
y no puede encontrar una solución en otras secciones,
haga una pregunta en el [foro de la comunidad](https://forum.angie.support/)
o en el [canal de Telegram](https://t.me/angie_support).

Soporte técnico para clientes:

- [https://support.angie.software](https://support.angie.software)
- [support@angie.software](mailto:support@angie.software)

<a id="debug-logging"></a>

## Registro de depuración

El registro de depuración debe estar habilitado
antes de realizar autodiagnósticos o según lo recomendado por el soporte técnico.

Para hacer esto, ejecute Angie utilizando el ejecutable con soporte de depuración:

Linux

En los [paquetes precompilados](https://es.angie.software//angie/docs/installation/index.md#install-packages) para Linux,
el archivo `angie-debug` está compilado con el registro de depuración habilitado:

```console
$ ls -l /usr/sbin/ | grep angie

   lrwxrwxrwx 1 root root      13 Sep 21 18:58 angie -> angie-nodebug
   -rwxr-xr-x 1 root root 1561224 Sep 21 18:58 angie-debug
   -rwxr-xr-x 1 root root 1426056 Sep 21 18:58 angie-nodebug
```

Configure la ejecución de `angie-debug`:

```console
$ sudo ln -fs angie-debug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade
```

Esto iniciará una [actualización del ejecutable en vivo](https://es.angie.software//angie/docs/configuration/runtime.md#service-upgrade).

Para volver al ejecutable normal después de la depuración:

```console
$ sudo ln -fs angie-nodebug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade
```

FreeBSD

En los [paquetes precompilados](https://es.angie.software//angie/docs/installation/index.md#install-packages) para FreeBSD,
el archivo `angie-debug` está compilado con el registro de depuración habilitado:

```console
$ ls -l /usr/local/sbin/ | grep angie

   lrwxrwxrwx 1 root root      13 Sep 21 18:58 angie -> angie-nodebug
   -rwxr-xr-x 1 root root 1561224 Sep 21 18:58 angie-debug
   -rwxr-xr-x 1 root root 1426056 Sep 21 18:58 angie-nodebug
```

Configure la ejecución de `angie-debug`:

```console
$ sudo ln -fs angie-debug /usr/local/sbin/angie
$ sudo angie -t && sudo service angie upgrade
```

Esto iniciará una [actualización del ejecutable en vivo](https://es.angie.software//angie/docs/configuration/runtime.md#service-upgrade).

Para volver al ejecutable normal después de la depuración:

```console
$ sudo ln -fs angie-nodebug /usr/local/sbin/angie
$ sudo angie -t && sudo service angie upgrade
```

Docker

En las [imágenes Docker con plantillas](https://es.angie.software//angie/docs/installation/docker.md#docker-images),
puede cambiar a la versión de depuración
anulando la variable de entorno `ANGIE_BINARY`:

```console
$ docker run -it --rm -e ANGIE_BINARY="angie-debug" \
  docker.angie.software/angie:templated
```

Compilación desde el código fuente

Al compilar Angie desde el código fuente,
[habilite la depuración](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure) antes de la compilación:

```console
$ ./configure --with-debug ...
```

Después de la instalación, **angie -V** permite verificar
que el registro de depuración está habilitado:

```console
$ angie -V

  ...
  configure arguments: --with-debug ...
```

#### NOTE
El uso del ejecutable con soporte de depuración
puede reducir ligeramente el rendimiento;
habilitar el registro de depuración puede reducirlo significativamente
y aumentar el uso de espacio en disco.

Para habilitar el registro de depuración,
establezca el nivel `debug` en la configuración
utilizando la directiva [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log):

```nginx
error_log /path/to/log debug;
```

Y recargue la configuración:

```console
$ sudo angie -t && sudo service angie reload
```

En las [imágenes Docker con plantillas](https://es.angie.software//angie/docs/installation/docker.md#docker-images)
con el registro de depuración habilitado,
también puede usar la variable de entorno `ANGIE_ERROR_LOG_SEVERITY`:

```console
$ docker run -it --rm -e ANGIE_BINARY="angie-debug" \
-e ANGIE_ERROR_LOG_SEVERITY="debug" \
docker.angie.software/angie:templated
```

Si cambia al ejecutable sin soporte de depuración
pero deja el nivel `debug` en la directiva [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log),
Angie registrará entradas en el nivel `info`.

Anular [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log) en la configuración
sin especificar el nivel `debug` deshabilita el registro de depuración.
Aquí, anular el registro en el nivel [server](https://es.angie.software//angie/docs/configuration/modules/http/index.md#server)
deshabilita el registro de depuración para un servidor individual:

```nginx
error_log /path/to/log debug;

http {
   server {
     error_log /path/to/log;
    # ...
```

Para evitar esto, elimine la línea que anula [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log),
o establezca el nivel `debug` en ella:

```nginx
error_log /path/to/log debug;

http {
   server {
     error_log /path/to/log debug;
   #  ...
```

<a id="directive-location"></a>

### Ubicación de la directiva

La ubicación de la directiva [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log)
afecta a la integridad de la información de depuración recopilada.

Una directiva especificada en un nivel de configuración inferior
(por ejemplo, dentro de un bloque `server` o `location`)
anula la configuración de registro especificada en un nivel superior
(por ejemplo, en el nivel de configuración principal o dentro de un bloque `http`).

### Registro de depuración deshabilitado para un servidor específico

Si el registro de depuración está habilitado globalmente
pero [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log) se especifica para un servidor individual sin el nivel `debug`,
no se recopilará información de depuración para ese servidor.

```nginx
error_log /var/log/angie/error.log debug; # Registro de depuración global

http {

    server {

        listen 80;
        server_name example.com;

        error_log /var/log/angie/example.com.error.log;
        # El registro de depuración para example.com está deshabilitado, el archivo contiene nivel info

        # ...
    }

    server {

        listen 80;
        server_name another.com;

        # Este servidor utilizará el registro de depuración global
        # ...
    }
}
```

### Preservación del registro de depuración a nivel de servidor

Para preservar la recopilación de información de depuración para un servidor específico
pero dirigirla a un archivo diferente,
también debe especificar el nivel `debug`:

```nginx
error_log /var/log/angie/error.log debug; # Registro de depuración global

http {

    server {

        listen 80;
        server_name example.com;

        error_log /var/log/angie/example.com.error.log debug;
        # El registro de depuración para example.com está habilitado pero se escribe en un archivo separado

        # ...
    }
}
```

Por lo tanto, para habilitar el registro de depuración a nivel global
pero anular el archivo de registro para bloques individuales,
también especifique el nivel `debug` en esas anulaciones.
De lo contrario, si no se especifica ningún nivel de registro en la directiva [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log),
se utilizará el nivel `error` por defecto
y se perderá la información de depuración para esos bloques.

<a id="logging-specific-addresses"></a>

### Registro de direcciones específicas

Puede habilitar el registro de depuración solo para
[direcciones de cliente especificadas](https://es.angie.software//angie/docs/configuration/modules/core.md#debug-connection):

```nginx
error_log /path/to/log;

events {
  debug_connection 192.168.1.1;
  debug_connection 192.168.10.0/24;
}
```

<a id="cyclic-memory-buffer"></a>

### Buffer de memoria cíclico

El registro de depuración se puede escribir en un buffer de memoria cíclico:

```nginx
error_log memory:32m debug;
```

Escribir en el buffer de memoria en el nivel `debug`
no afectará significativamente el rendimiento incluso bajo alta carga.
En este caso, el registro se puede extraer usando un script GDB, por ejemplo:

```console
set $log = ngx_cycle->log

while $log->writer != ngx_log_memory_writer
  set $log = $log->next
end

set $buf = (ngx_log_memory_buf_t *) $log->wdata
dump binary memory debug_log.txt $buf->start $buf->end
```

<a id="core-dumps"></a>

## Volcados de Memoria (Core Dumps)

Los volcados de memoria ayudan a investigar fallos.
Inclúyalos al [contactar con soporte](#troubleshooting).
Para compilaciones de [nuestros repositorios](https://es.angie.software//angie/docs/installation/index.md#install-packages),
proporcionamos símbolos de depuración en paquetes especiales.
Tienen los mismos nombres que los paquetes originales
con el sufijo `-dbg` añadido, por ejemplo `angie-dbg`.

#### NOTE
Esta sección asume
que está ejecutando Angie como el usuario `root` (recomendado).

<a id="linux-systemd"></a>

### Linux: systemd

Para habilitar el guardado de volcados de memoria cuando Angie se ejecuta como servicio **systemd**
(por ejemplo, cuando se [instala desde paquetes](https://es.angie.software//angie/docs/installation/index.md#install-packages)),
modifique la [configuración del servicio](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Process%20Properties)
en el archivo `/lib/systemd/system/angie.service`:

```ini
[Service]
...
LimitCORE=infinity
LimitNOFILE=65535
```

O actualice la [configuración global](https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html)
en el archivo `/etc/systemd/system.conf`:

```ini
[Manager]
...
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65535
```

Luego recargue la configuración del servicio y reinicie Angie
para reproducir las condiciones del fallo:

```console
$ sudo systemctl daemon-reload
$ sudo systemctl restart angie.service
```

Después del fallo, encuentre el archivo de volcado de memoria:

```console
$ sudo coredumpctl -1 # opcional

   TIME                           PID   UID   GID SIG COREFILE  EXE
   --- |sampledateshort| 11:05:40 GMT   1157     0     0  11 present   /usr/sbin/angie

$ sudo ls -al /var/lib/systemd/coredump/  # por defecto, ver también /etc/systemd/coredump.conf y /etc/systemd/coredump.conf.d/*.conf

  ...
  -rw-r----- 1 root root 177662 Jul 27 11:05 core.angie.0.6135489c850b4fb4a74795ebbc1e382a.1157.1590577472000000.lz4
```

<a id="linux-manual-configuration"></a>

### Linux: Configuración Manual

Compruebe la [configuración de volcados de memoria](https://man7.org/linux/man-pages/man5/limits.conf.5.html)
en el archivo `/etc/security/limits.conf`, modifíquelas si es necesario:

```none
root soft core 0          # por defecto desactiva los volcados de memoria
root hard core unlimited  # permite aumentar el límite de tamaño
```

Luego aumente el límite de tamaño de volcado de memoria usando [ulimit](https://man7.org/linux/man-pages/man1/ulimit.1p.html),
después reinicie Angie para reproducir las condiciones del fallo:

```console
$ sudo ulimit -c unlimited
$ sudo cd <ruta al directorio de instalación de Angie>
$ sudo sbin/angie  # o sbin/angie-debug
```

Después del fallo, encuentre el archivo de volcado de memoria:

```console
$ sudo ls -al <ruta al directorio de trabajo de Angie>  # por defecto, ver /proc/sys/kernel/core_pattern
  ...
  -rw-r----- 1 root root 177662 Jul 27 11:05 core.1157
```

<a id="freebsd"></a>

### FreeBSD

Compruebe la [configuración de volcados de memoria](https://man.freebsd.org/cgi/man.cgi?query=sysctl.conf&sektion=5)
en el archivo `/etc/sysctl.conf`, modifíquelas si es necesario:

```ini
kern.coredump=1                             # debe ser 1
kern.corefile=/ruta/a/archivos/core/%N.core   # necesita ruta correcta
```

O actualice la configuración en tiempo de ejecución:

```console
$ sudo sysctl kern.coredump=1
$ sudo sysctl kern.corefile=/ruta/a/archivos/core/%N.core
```

Luego reinicie Angie para reproducir las condiciones del fallo.
Si Angie está instalado como servicio:

```console
$ sudo service angie restart
```

Si Angie está instalado manualmente:

```console
$ sudo cd <ruta al directorio de instalación de Angie>
$ sudo sbin/angie
```

Después del fallo, encuentre el archivo de volcado de memoria:

```console
$ sudo ls -al <ruta a los archivos de volcado de memoria>

  ...
  -rw------- 1 root root 9912320 Jul 27 11:05 angie.core
```
