healthcheck: Biblioteca de verificación de salud para nginx-module-lua para validar el estado del servicio upstream
Instalación
Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.
CentOS/RHEL 7 o Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-healthcheck
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-healthcheck
Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.
Este documento describe lua-resty-healthcheck v3.1.2 lanzado el 09 de abril de 2026.
Una biblioteca de verificación de salud para OpenResty.
Sinopsis
http {
lua_shared_dict test_shm 8m;
lua_shared_dict my_worker_events 8m;
init_worker_by_lua_block {
local we = require "resty.worker.events"
local ok, err = we.configure({
shm = "my_worker_events",
interval = 0.1
})
if not ok then
ngx.log(ngx.ERR, "falló al configurar eventos del trabajador: ", err)
return
end
local healthcheck = require("resty.healthcheck")
local checker = healthcheck.new({
name = "testing",
shm_name = "test_shm",
checks = {
active = {
type = "https",
http_path = "/status",
healthy = {
interval = 2,
successes = 1,
},
unhealthy = {
interval = 1,
http_failures = 2,
}
},
}
})
local ok, err = checker:add_target("127.0.0.1", 8080, "example.com", false)
local handler = function(target, eventname, sourcename, pid)
ngx.log(ngx.DEBUG,"Evento de: ", sourcename)
if eventname == checker.events.remove
-- un objetivo fue eliminado
ngx.log(ngx.DEBUG,"Objetivo eliminado: ",
target.ip, ":", target.port, " ", target.hostname)
elseif eventname == checker.events.healthy
-- el objetivo cambió de estado, o fue agregado
ngx.log(ngx.DEBUG,"Objetivo cambiado a saludable: ",
target.ip, ":", target.port, " ", target.hostname)
elseif eventname == checker.events.unhealthy
-- el objetivo cambió de estado, o fue agregado
ngx.log(ngx.DEBUG,"Objetivo cambiado a no saludable: ",
target.ip, ":", target.port, " ", target.hostname)
else
-- evento desconocido
end
end
}
}
Descripción
Esta biblioteca admite la realización de verificaciones de salud activas y pasivas en hosts arbitrarios.
El control de la biblioteca se realiza a través de su API programática. El consumo de sus eventos se realiza a través de la biblioteca lua-resty-worker-events.
Los objetivos se agregan usando checker:add_target(host, port). Los cambios en el estado ("saludable" o "no saludable") se transmiten a través de eventos de trabajador.
Las verificaciones activas se ejecutan en segundo plano según los intervalos de temporizador especificados.
Para las verificaciones de salud pasivas, la biblioteca recibe notificaciones explícitas a través de su API programática utilizando funciones como checker:report_http_status(host, port, status).
Consulta la documentación LDoc en línea para la API completa.
Historia
El versionado se basa estrictamente en Semantic Versioning
Lanzando nuevas versiones:
- actualizar el changelog a continuación (los PR deben ser fusionados incluyendo una entrada en el changelog)
- basado en el changelog determinar la nueva versión SemVer
- crear un nuevo rockspec
- renderizar la documentación usando
ldoc(no hacer esto dentro de PR) - confirmar como "release x.x.x" (no incluir la revisión del rockspec)
- etiquetar el commit con "x.x.x" (no incluir la revisión del rockspec)
- empujar el commit y la etiqueta
- subir el rock a luarocks:
luarocks upload rockspecs/[name] --api-key=abc
3.1.2 (09-Abr-2026)
- Fix(active-checks): usar HTTP/1.1 para las sondas de verificación de salud con negociación automática de versión #176
3.1.1 (19-Nov-2025)
- Fix: cambiar los encabezados predeterminados a una tabla vacía en lugar de un array para eliminar la notificación de desaprobación #174
3.1.0 (19-Jun-2024)
- Feat: eliminar la verificación de versión de resty.events #162
3.0.2 (16-May-2024)
- Fix: evitar crear múltiples temporizadores para ejecutar la misma verificación activa #157
3.0.1 (22-Dic-2023)
- Fix: corregir la lógica de limpieza de retraso cuando se iniciaron múltiples verificadores de salud #146
3.0.0 (12-Oct-2023)
- Perf: optimizar localizando algunas funciones #92 (backport)
- Fix: Generar nuevos http_statuses predeterminados dentro de new() #83 (backport)
2.0.0 (22-Sep-2020)
Nota:
Los cambios en esta versión han sido descartados del desarrollo actual y futuro. A continuación, puedes ver su changelog, pero ten en cuenta que estos cambios pueden no estar presentes en 3.y.z a menos que se indiquen explícitamente en 3.y.z, 1.6.3 o versiones anteriores. Lee más en: release 3.0.0 (#142) y chore(*): realinear la rama principal a la versión 3.0.0 (#144)
- BREAKING: el fallback para el campo de nivel superior
typeahora ha sido eliminado (desaprobado desde0.5.0) #56- BREAKING: Aumentar la dependencia de
lua-resty-worker-eventsa2.0.0. Esto hace que muchas de las API en esta biblioteca sean asíncronas, ya que los eventos del trabajadorpostypost_localya no llamarán automáticamente apollen un trabajador en ejecución, para más información, consulta: https://github.com/Kong/lua-resty-worker-events#200-16-september-2020- BREAKING: tcp_failures ya no puede ser 0 en verificaciones http(s) (a menos que http(s)_failures también se establezcan en 0) #55
- feature: Agregado soporte para https_sni #49
- fix: registrar correctamente los números de línea utilizando llamadas de cola #29
- fix: cuando no se proporciona un nombre de host, usar IP #48
- fix: makefile; make install
- feature: agregado un campo de versión de estado #54
- feature: agregar encabezados para la solicitud de sondeo #54
- fix: salir temprano al recargar durante un sondeo #47
- fix: prevenir que la lista de objetivos sea nil, debido al comportamiento asíncrono #44
- fix: reemplazar temporizador y bloqueos a nivel de nodo con resty-timer, para prevenir saltos de intervalo #59
- change: agregar registro adicional al publicar eventos #25
- fix: no quedarse sin temporizadores durante init/init_worker al agregar una gran cantidad de objetivos #57
- fix: no llamar en la tabla del módulo, sino usar un método para bloqueos. También en #57
1.6.3 (06-Sep-2023)
- Feature: Agregado soporte para https_sni #49 (backport)
- Fix: Usar la API de OpenResty para mTLS #99 (backport)
1.6.2 (17-Nov-2022)
- Fix: evitar generar eventos de trabajador para nuevos objetivos que fueron marcados para eliminación retrasada, es decir, los objetivos que ya existen en memoria solo necesitan que se limpie la bandera de eliminación al ser agregados nuevamente. #122
1.6.1 (25-Jul-2022)
- Fix: mejoras para asegurar la correcta protección de recursos compartidos para evitar condiciones de carrera y reportar claramente los estados de fallo. #112, #113, #114.
- Fix: reducir la frecuencia de verificación de objetivos no utilizados, reduciendo el número de bloqueos creados. #116
- Fix: aceptar cualquier liberación de lua-resty-events
0.1.x. #118
1.6.0 (27-Jun-2022)
- Feature: introducir soporte para el módulo lua-resty-events además del soporte para lua-resty-worker-events. Con esta adición, el paquete lua-resty-healthcheck de luarocks ya no requiere un módulo de compartición de eventos específico, pero aún se requiere proporcionar ya sea lua-resty-worker-events o lua-resty-events. #105
- Change: si está disponible, lua-resty-healthcheck ahora usa
string.buffer, la nueva API de serialización de LuaJIT. Si no está disponible, lua-resty-healthcheck vuelve a cjson. #109
1.5.3 (14-Nov-2022)
- Fix: evitar generar eventos de trabajador para nuevos objetivos que fueron marcados para eliminación retrasada, es decir, los objetivos que ya existen en memoria solo necesitan que se limpie la bandera de eliminación al ser agregados nuevamente. #121
1.5.2 (07-Jul-2022)
- Mejor manejo de los modos de fallo de
resty.lock, añadiendo más verificaciones para asegurar que el bloqueo se mantenga antes de ejecutar código crítico, y mejorando la decisión sobre si una función debe ser reintentada después de un tiempo de espera al intentar adquirir un bloqueo. #113 - Aumento del registro para fallos de funciones bloqueadas. #114
- La frecuencia de limpieza de objetivos eliminados se redujo, disminuyendo el número de bloqueos creados en un corto período. #116
1.5.1 (23-Mar-2022)
- Fix: evitar romper las verificaciones de salud activas al agregar o eliminar objetivos. #93
1.5.0 (09-Feb-2022)
- Nueva opción
checks.active.headersadmite una o más listas de valores indexados por nombre de encabezado. #87 - Introducir la función dealyed_clear(), utilizada para eliminar direcciones después de un intervalo de tiempo. Esta función puede ser utilizada cuando una dirección está siendo eliminada pero puede ser agregada nuevamente antes de que expire el intervalo, manteniendo su estado de salud. #88
1.4.3 (31-Mar-2022)
- Fix: evitar romper las verificaciones de salud activas al agregar o eliminar objetivos. #100
1.4.2 (29-Jun-2021)
- Fix: prevenir que se programen nuevas verificaciones activas mientras se está ejecutando una verificación de salud. #72
- Fix: eliminar el observador de eventos al detener una verificación de salud activa. #74; corrige el problema de Kong #7406
1.4.1 (17-Feb-2021)
- Fix: asegurarse de que un solo trabajador verifique activamente los estados de los hosts. #67
1.4.0 (07-Ene-2021)
- Usar un solo temporizador para verificar activamente los objetivos de salud. Esto reduce el número de temporizadores utilizados por los verificadores de salud, ya que solían usar dos temporizadores por cada objetivo. #62
1.3.0 (17-Jun-2020)
- Agrega soporte para mTLS a las verificaciones de salud activas. Esta función puede ser utilizada añadiendo los campos
ssl_certyssl_key, con el certificado y la clave respectivamente, al crear un nuevo objeto de verificación de salud. #41
1.2.0 (13-Feb-2020)
- Agrega
set_all_target_statuses_for_hostname, que establece los objetivos para todas las entradas con un nombre de host dado a la vez.
1.1.2 (19-Dic-2019)
- Fix: cuando la API
ngx.sleepno está disponible (por ejemplo, en la fase de registro) no es posible bloquear usando lua-resty-lock y cualquier función que necesite acceso exclusivo fallaría. Esta solución añade un método de reintento que inicia un nuevo hilo ligero, que tiene acceso angx.sleep, para bloquear la ruta crítica. #37;
1.1.1 (14-Nov-2019)
- Fix: fallar cuando no es posible obtener acceso exclusivo a la lista de objetivos. Esta solución previene que los trabajadores lleguen a un estado inconsistente. #34;
1.1.0 (30-Sep-2019)
- Agregar soporte para establecer el encabezado
Hostpersonalizado que se utilizará para las verificaciones activas. - Fix: registrar error en caso de fallo de SSL Handshake #28;
1.0.0 (05-Jul-2019)
- BREAKING: todas las funciones de API relacionadas con hosts requieren ahora un argumento
hostname. De esta manera, diferentes nombres de host que escuchan en la misma combinación de IP y puertos no se afectan entre sí. - Fix: corregir el informe de éxitos de sondas TCP activas #20; corrige el problema #19
0.6.1 (04-Abr-2019)
- Fix: configurar el callback de eventos solo después de que se cargue la lista de objetivos #18; corrige el problema de Kong #4453
0.6.0 (26-Sep-2018)
- Introducir el campo
checks.active.https_verify_certificate. Estruepor defecto; establecerlo enfalsedesactiva la verificación del certificado en las verificaciones de salud activas sobre HTTPS.
0.5.0 (25-Jul-2018)
- Agregar soporte para
https-- gracias @gaetanfl por el PR! - Introducir campos separados
checks.active.typeychecks.passive.type; el campo de nivel superiortypetodavía se admite como un fallback pero ahora está desaprobado.
0.4.2 (23-May-2018)
- Fix: encabezado
Hosten verificaciones de salud activas
0.4.1 (21-May-2018)
- Fix: gestión interna de contadores de verificación de salud
0.4.0 (20-Mar-2018)
- Corrección de la configuración de valores predeterminados en
http_statuses - Comprobación de tipo y límites en la tabla
checks
0.3.0 (18-Dic-2017)
- Desactivar verificaciones individuales estableciendo sus contadores en 0
0.2.0 (30-Nov-2017)
- Agrega
set_target_status
0.1.0 (27-Nov-2017) Lanzamiento inicial
- Carga inicial
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-healthcheck.