¿Problemas frecuentes con Apache2 y HestiaCP? Guía de monitorización y resolución de problemas automatizada de Monit (con configuración completa).

¿Problemas frecuentes con Apache2 o con el reinicio automático de Monit en entornos HestiaCP ? Este artículo ofrece una guía práctica para evitar errores comunes al monitorizar Apache2 con Monit, analizando en profundidad problemas frecuentes como la desalineación de rutas PID y el bloqueo de permisos, y proporcionando archivos de configuración de automatización de Monit de nivel de producción. ¡Domine las técnicas de mantenimiento de servidores de alta disponibilidad y logre la recuperación automática de segundo nivel ante fallos!

Los problemas que encontré al usar Monit para monitorear Apache2

El viernes pasado, el servidor me envió una alerta de Monit en plena madrugada.

Miré el panel aturdido, y en la columna de estado de apache2, había un mensaje de "Tiempo de espera agotado" en rojo.

¿Problemas frecuentes con Apache2 y HestiaCP? Guía de monitorización y resolución de problemas automatizada de Monit (con configuración completa).

Lo pensé un rato. Simplemente instalé Monit Monitoring en el servidor durante el día y copié y pegué la configuración de un tutorial en línea. No debería haber ningún problema, ¿verdad?

A la mañana siguiente, volvió a agotarse el tiempo de espera. Después de la tercera vez, el monitor simplemente se rindió y el panel mostró "No supervisado".

I...

Admito que al principio no me lo tomé en serio. ¿Monitorización de Apache2? Se pueden encontrar muchísimas plantillas de configuración en internet, solo hay que copiar y pegar. Pero ese proceso de pegar me enfureció de verdad.

La causa principal del conflicto entre la arquitectura predeterminada de HestiaCP y los puertos de Monit

Permítanme primero mostrarles la configuración que me causó tantos problemas, para que puedan ver si es exactamente la misma que la versión que han visto.

check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/usr/sbin/service apache2 start"
    stop program  = "/usr/sbin/service apache2 stop"
    if failed host 127.0.0.1 port 80 protocol http then restart
    if 5 restarts within 5 cycles then timeout

Parece que funciona bien, ¿verdad? Comprueba el puerto 80 y, si falla, se reinicia. Si sigue fallando después de 5 reinicios, se agota el tiempo de espera.

El problema es que tu Apache2 ni siquiera se está ejecutando en el puerto 80.

Este es un inconveniente de HestiaCP y la causa principal de que muchos usuarios caigan en él. La arquitectura predeterminada de HestiaCP es un proxy inverso de Nginx + Apache2, donde Nginx ocupa los puertos 80 y 443 en la parte frontal, y Apache2 se ejecuta en el puerto local 8081 en la parte posterior.

Si le pides a Monit que compruebe si Apache2 está activo en el puerto 80, es como ir a McDonald's a buscar KFC. El servidor te mira con cara de póquer y ambos se quedan mirando fijamente. Al final, Monit determina que el servidor está caído y empieza a reiniciarlo frenéticamente.

Tras reiniciar, el puerto sigue siendo el 8081. Monit intenta entonces sondear el puerto 80, lo que también falla, por lo que vuelve a reiniciarse. Este ciclo se repite hasta que Monit decide que no tiene solución y se agota el tiempo de espera.

Cuando me topé con esto por primera vez, quedé realmente atónito. Nueve de cada diez tutoriales que encontré en línea usaban el puerto 80. Si los seguiste, el problema no era tuyo, sino de la fuente de la información.

¿Problemas frecuentes con Apache2 y HestiaCP? Guía de monitorización y resolución de problemas automatizada de Monit (con configuración completa).

Un archivo PID de Apache2 dañado provocó que Monit identificara erróneamente el proceso como inexistente.

Tras cambiar el puerto del 80 al 8081, Monit debería, en teoría, poder detectarlo, ¿verdad?

Sin embargo, en realidad, ocasionalmente sigue mostrando el mensaje " Error de ejecución ".

Tras mucho esfuerzo, finalmente descubrí que la razón era simple: el archivo PID estaba dañado.

Piénsalo, Monit estaba reiniciando Apache2 frenéticamente, deteniéndolo y reiniciándolo a la fuerza cada vez, yendo y viniendo varias veces. Durante este proceso, el archivo /var/run/apache2/apache2.pid podría quedar con un tamaño de 0 bytes.

En otras palabras, el archivo sigue ahí, pero está vacío.

Cuando Monit lee este archivo, no encuentra nada. No reconoce Apache2, aunque Apache2 se esté ejecutando perfectamente en segundo plano; Monit no cree que el proceso exista.

Cuando vi esto, me quedé sin palabras por un momento.

Se trata de un bloqueo. Monit no detecta la instancia de Apache 2, la reinicia, corrompe el archivo PID durante el reinicio, falla en la siguiente detección y vuelve a reiniciarse. Este ciclo se repite hasta que se agota el tiempo de espera.

Pasos para la resolución de problemas y la reparación del monitoreo de Apache2 en el entorno HestiaCP

Sinceramente, el proceso de investigación no es complicado, pero hay que saber en qué dirección investigar.

El primer paso es determinar en qué puerto está escuchando Apache2. Simplemente escriba un comando en la terminal.

netstat -tulpn | grep apache2

Como alternativa, puede utilizar el comando `ss`; el efecto es el mismo.

ss -tulpn | grep apache2

Verás una salida similar a esta.

tcp  0  0 127.0.0.1:8081       0.0.0.0:*  LISTEN  2942372/apache2

Se confirma que es 8081, no 80. Ese es el origen del problema.

El segundo paso es reparar el archivo PID dañado. Esto es más sencillo.

monit unmonitor apache2
systemctl restart apache2
cat /var/run/apache2/apache2.pid

Primero, pausa la monitorización de Monit para evitar que interfiera mientras solucionas los problemas. Luego, reinicia Apache2 para que genere un PID limpio. Finalmente, usa `cat` para comprobar el contenido del archivo; debería contener una cadena de números, no una cadena vacía.

Una vez completado este paso, el problema queda básicamente resuelto.

¿Problemas frecuentes con Apache2 y HestiaCP? Guía de monitorización y resolución de problemas automatizada de Monit (con configuración completa).

Análisis comparativo de las configuraciones de protección adaptativas y agresivas tradicionales de Monit

Los tutoriales en línea sobre cómo configurar Apache2 con Monit generalmente se dividen en dos categorías.

Un tipo es la "adaptación tradicional", que utiliza el comando `service` para gestionar servicios y comprobar puertos locales sin añadir restricciones demasiado complejas. Esta configuración se puede usar en HestiaCP simplemente cambiando el puerto y es relativamente estable.

Otro enfoque es el método de "protección agresiva", que utiliza systemctl para gestionar los servicios, añade restricciones a los procesos secundarios y emplea una lógica de detección más estricta. Parece una buena solución, pero tiene un fallo fatal: el comando de detención que utiliza es `killall -9`.

¿Qué significa `killall -9`? Significa detener el dispositivo de forma forzada, independientemente de lo que esté haciendo. Esta operación de fuerza bruta puede dejar fácilmente archivos PID corruptos, que es el problema que acabo de mencionar.

En mi experiencia personal, limitar el número de procesos secundarios en una configuración agresiva resulta útil. Cuando Apache2 se ve sobrecargado por un ataque CC, limitar el número de procesos secundarios puede evitar que el servidor se quede sin memoria. Sin embargo, el método `killall -9` es totalmente inviable.

Así que, al final, llegué a un compromiso y combiné las ventajas de ambas configuraciones.

Configuración de mejores prácticas de HestiaCP Apache2 Monit

Modifique el archivo /etc/monit/conf.d/apache2 con el siguiente contenido.

check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/bin/systemctl start apache2"
    stop program  = "/bin/systemctl stop apache2"
    if children > 120 for 2 cycles then restart
    if failed host 127.0.0.1 port 8081 protocol http for 2 cycles then restart
    if 5 restarts within 10 cycles then timeout

Permítanme explicar brevemente la lógica que hay detrás de estas pocas líneas de configuración.

Escriba el puerto 8081 para que coincida exactamente con la arquitectura de proxy inverso de HestiaCP; deje de escribir tontamente en el puerto 80.

Utilice el comando `systemctl stop` en lugar de `killall -9` para detener el archivo PID y evitar que se corrompa.

Se ha añadido un límite para los procesos secundarios: si el número de procesos secundarios supera los 120, el proceso se reiniciará después de dos ciclos consecutivos para evitar ataques de CC, pero no es una medida demasiado agresiva.

Se ha modificado la lógica de detección de fallos para utilizar un enfoque de "dos ciclos", lo que significa que el reinicio solo se activa después de dos fallos consecutivos, reduciendo así los falsos positivos. La configuración anterior, que reiniciaba tras una sola detección, era francamente demasiado sensible.

El umbral de tiempo de espera final se reduce a 5 reinicios en 10 ciclos, lo que deja suficiente tolerancia a fallos.

hestiacp Monitoreo de monitoreoResumen de solución de problemas de configuración e intercambio de experiencias

Tras realizar los cambios de configuración, supervisé apache2 y, finalmente, el panel mostró un indicador verde de "OK".

¿Cómo describir lo que sentí en ese momento? Fue como pasar dos días lidiando con un error, solo para descubrir que la causa era una simple línea de configuración incorrecta. Fue frustrante y a la vez ridículo.

Monit es una herramienta útil en sí misma, y ​​monitorizar los demonios es algo que todo servidor debería hacer. Sin embargo, el problema radica en que muchos tutoriales en línea parten de la premisa de que "Apache2 utiliza exclusivamente el puerto 80", mientras que HestiaCP utiliza un proxy inverso, lo cual significa que esta premisa no es cierta.

Si sigues las instrucciones, el problema no eres tú; es que el tutorial se aplica a un escenario diferente al tuyo.

Si también utilizas HestiaCP y experimentas con Monit para monitorizar Apache2, recuerda dos cosas: cambia el puerto a 8081 y usa el comando `systemctl` para detenerlo, no `killall -9`. Si sigues estos pasos, evitarás cualquier otro problema.


Ya que has leído hasta aquí, si te ha resultado útil, dale a "Me gusta" y compártelo. Si quieres ser el primero en recibir las novedades, ¡también puedes seguirme!

Gracias por leer mi artículo. ¡Hasta la próxima!

Esperamos que el artículo "HestiaCP Apache2 Frequent Crashes? Monit Automated Monitoring and Troubleshooting Guide (with Complete Configuration)" compartido en el blog de Chen Weiliang ( https://www.chenweiliang.com/ ) le sea útil.

No dudes en compartir el enlace de este artículo: https://www.chenweiliang.com/cwl-34457.html

Para desbloquear más trucos ocultos🔑, ¡bienvenido a unirse a nuestro canal de Telegram!

¡Comparte y dale me gusta si te gusta! ¡Tus acciones y me gusta son nuestra motivación continua!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Ir al Inicio