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 o en el canal de Telegram.

Soporte técnico para clientes:

  • https://support.angie.software

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:

En los paquetes precompilados para Linux, el archivo angie-debug está compilado con soporte de depuración:

$ 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:

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

Esto iniciará una actualización del ejecutable en vivo.

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

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

Nota

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 (las imágenes Docker con plantillas usan en su lugar una variable de entorno, como muestra la pestaña Docker más abajo):

error_log /path/to/log debug;

Luego aplique el cambio:

$ sudo angie -t && sudo service angie reload

Si cambia al ejecutable sin soporte de depuración pero deja el nivel debug en la directiva error_log, Angie registrará entradas en el nivel info.

Ubicación de la directiva#

La ubicación de la directiva 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 se especifica para un servidor individual sin el nivel debug, no se recopilará información de depuración para ese servidor.

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 error

        # ...
    }

    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 seguir recopilando información de depuración de un servidor específico, elimine de ese servidor la anulación de error_log; para dirigir esta información a un archivo diferente, especifique también el nivel debug en la anulación:

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

        # ...
    }
}

Registro de direcciones específicas#

Puede habilitar el registro de depuración solo para direcciones de cliente especificadas:

error_log /path/to/log;

events {
  debug_connection 192.168.1.1;
  debug_connection 192.168.10.0/24;
}

Buffer de memoria cíclico#

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

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:

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

Volcados de memoria (core dumps)#

Los volcados de memoria ayudan a investigar fallos. Inclúyalos al contactar con soporte. Para compilaciones de nuestros repositorios, 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.

Nota

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

Linux: systemd#

Para habilitar el guardado de volcados de memoria cuando Angie se ejecuta como servicio systemd (por ejemplo, cuando se instala desde paquetes), modifique la configuración del servicio en el archivo /lib/systemd/system/angie.service:

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

O actualice la configuración global en el archivo /etc/systemd/system.conf:

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

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

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

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

$ sudo coredumpctl -1 # opcional

   TIME                           PID   UID   GID SIG COREFILE  EXE
   --- 2026-10-16 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

Linux: Configuración manual#

Esta sección trata el caso de Angie iniciado sin systemd, como una compilación desde el código fuente, y asume que el Angie de esta instalación está en ejecución; los comandos usan las rutas predeterminadas de una compilación de ese tipo en /usr/local/angie.

El lugar donde el kernel guarda un archivo de volcado de memoria depende de /proc/sys/kernel/core_pattern. Si el patrón empieza por |, el kernel pasa el volcado al programa que se indica a continuación de ese carácter, por ejemplo systemd-coredump, incluso para un Angie iniciado sin systemd; en ese caso, busque el archivo de volcado de memoria como se describe en Linux: systemd y omita los pasos siguientes sobre el directorio de trabajo. Si el patrón es un nombre simple, como core, el kernel escribe el archivo de volcado de memoria en el directorio de trabajo del proceso que falló, que para los procesos de trabajo es por defecto el directorio desde el que se inició Angie.

Los procesos de trabajo se ejecutan con la cuenta que establece la directiva user (nobody en una compilación por defecto desde el código fuente); si esta cuenta no puede escribir en el directorio de trabajo, el fallo no deja ningún archivo de volcado de memoria, así que cree un directorio para los archivos de volcado de memoria:

$ sudo mkdir -p /var/tmp/angie-cores
$ sudo chown nobody /var/tmp/angie-cores

Defínalo con la directiva working_directory en el contexto main de /usr/local/angie/conf/angie.conf:

working_directory /var/tmp/angie-cores;

Luego aumente el límite de tamaño de volcado de memoria. Para aumentarlo solo para los procesos de trabajo y evitar un reinicio, añada también la directiva worker_rlimit_core, que admite un tamaño en lugar de unlimited, y recargue la configuración:

worker_rlimit_core 1g;
$ sudo /usr/local/angie/sbin/angie -s reload

Para aumentar el límite también para el proceso maestro, reinicie Angie en lugar de recargarlo. De forma predeterminada, sudo inicia los comandos con un límite de tamaño de volcado de memoria de 0, y ulimit cambia el límite solo para el shell que lo ejecuta y para los comandos que ese shell inicia. Detenga el Angie en ejecución, espere a que termine el proceso maestro de Angie y luego aumente el límite e inicie Angie en un único shell de root:

$ sudo /usr/local/angie/sbin/angie -s quit
$ while [ -e /usr/local/angie/logs/angie.pid ]; do sleep 1; done
$ sudo sh -c 'ulimit -c unlimited && exec /usr/local/angie/sbin/angie'

Una compilación desde el código fuente configurada con --with-debug incluye el soporte de depuración en el propio ejecutable /usr/local/angie/sbin/angie; no existe un ejecutable angie-debug aparte.

Compruebe el límite de un proceso de trabajo; tras el reinicio, ambos valores son unlimited, y con worker_rlimit_core muestran, en bytes, el tamaño que esta directiva establece:

$ grep 'core file' /proc/$(pgrep -n -f 'angie: worker process')/limits
Max core file size        unlimited            unlimited            bytes

Luego reproduzca el fallo. Si el fallo dejó un archivo de volcado de memoria, el registro de errores (/usr/local/angie/logs/error.log por defecto) muestra worker process pid exited on signal number (core dumped); el mismo mensaje sin (core dumped) significa que el límite o el directorio de trabajo impidieron que se creara el archivo de volcado de memoria. Encuentre el archivo de volcado de memoria:

$ sudo ls -al /var/tmp/angie-cores
  ...
  -rw------- 1 nobody nogroup 177662 Jul 27 11:05 core.1157

FreeBSD#

Compruebe la configuración de volcados de memoria en el archivo /etc/sysctl.conf, modifíquelas si es necesario:

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:

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

En cualquiera de los dos casos, el directorio indicado en kern.corefile debe tener permiso de escritura para la cuenta que establece la directiva user: los procesos de trabajo se ejecutan con esta cuenta y escriben allí sus archivos de volcado de memoria.

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

$ sudo service angie restart

Si Angie está instalado manualmente, deténgalo, espere a que termine el proceso maestro de Angie, luego aumente el límite de tamaño de volcado de memoria e inicie Angie en un único shell de root, como en Linux:

$ sudo <ruta al directorio de instalación de Angie>/sbin/angie -s quit
$ while [ -e <ruta al directorio de instalación de Angie>/logs/angie.pid ]; do sleep 1; done
$ sudo sh -c 'ulimit -c unlimited && exec <ruta al directorio de instalación de Angie>/sbin/angie'

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

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

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