healthcheck: Библиотека проверки состояния для nginx-module-lua для проверки статуса upstream-сервиса
Установка
Если вы еще не настроили подписку на RPM-репозиторий, зарегистрируйтесь. Затем вы можете продолжить с следующими шагами.
CentOS/RHEL 7 или 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
Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что nginx-module-lua установлен.
Этот документ описывает lua-resty-healthcheck v3.1.1, выпущенный 19 ноября 2025 года.
Библиотека проверки состояния для OpenResty.
Синопсис
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, "не удалось настроить события рабочего процесса: ", 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,"Событие от: ", sourcename)
if eventname == checker.events.remove
-- цель была удалена
ngx.log(ngx.DEBUG,"Цель удалена: ",
target.ip, ":", target.port, " ", target.hostname)
elseif eventname == checker.events.healthy
-- цель изменила состояние или была добавлена
ngx.log(ngx.DEBUG,"Цель переключена на здоровую: ",
target.ip, ":", target.port, " ", target.hostname)
elseif eventname == checker.events.unhealthy
-- цель изменила состояние или была добавлена
ngx.log(ngx.DEBUG,"Цель переключена на нездоровую: ",
target.ip, ":", target.port, " ", target.hostname)
else
-- неизвестное событие
end
end
}
}
Описание
Эта библиотека поддерживает выполнение активных и пассивных проверок состояния на произвольных хостах.
Управление библиотекой осуществляется через ее программный API. Потребление ее событий происходит через библиотеку lua-resty-worker-events.
Цели добавляются с помощью checker:add_target(host, port). Изменения в статусе ("healthy" или "unhealthy") транслируются через worker-events.
Активные проверки выполняются в фоновом режиме на основе заданных интервалов таймера.
Для пассивных проверок состояния библиотека получает явные уведомления через свой программный API, используя такие функции, как checker:report_http_status(host, port, status).
Смотрите онлайн-документацию LDoc для полного API.
История
Версионирование строго основано на Semantic Versioning
Выпуск новых версий:
- обновите changelog ниже (PR должны быть объединены, включая запись в changelog)
- на основе changelog определите новую версию SemVer
- создайте новый rockspec
- отрендерите документацию с помощью
ldoc(не делайте это в рамках PR) - закоммитьте как "release x.x.x" (не включайте ревизию rockspec)
- тегируйте коммит как "x.x.x" (не включайте ревизию rockspec)
- отправьте коммит и тег
- загрузите rock в luarocks:
luarocks upload rockspecs/[name] --api-key=abc
3.1.1 (19-Nov-2025)
- Исправление: изменить заголовки по умолчанию на пустую таблицу вместо массива, чтобы убрать уведомление о депрекации #174
3.1.0 (19-Jun-2024)
- Функция: удалить проверку версии resty.events #162
3.0.2 (16-May-2024)
- Исправление: избежать создания нескольких таймеров для выполнения одной и той же активной проверки #157
3.0.1 (22-Dec-2023)
- Исправление: исправить логику очистки задержки, когда было запущено несколько healthchecker #146
3.0.0 (12-Oct-2023)
- Производительность: оптимизация за счет локализации некоторых функций #92 (backport)
- Исправление: Генерация свежих http_statuses по умолчанию в new() #83 (backport)
2.0.0 (22-Sep-2020)
Примечание:
Изменения в этой версии были отклонены от текущей и будущей разработки.
Ниже вы можете увидеть его changelog, но имейте в виду, что эти изменения могут отсутствовать в 3.y.z, если они не указаны явно в 3.y.z, 1.6.3 или предыдущих релизах. Читайте больше на: выпуск 3.0.0 (#142) и chore(*): выравнивание основной ветки к выпуску 3.0.0 (#144)
- BREAKING: резервное копирование для устаревшего верхнего уровня поля
typeтеперь удалено (устарело с0.5.0) #56- BREAKING: Обновление зависимости
lua-resty-worker-eventsдо2.0.0. Это делает многие API в этой библиотеке асинхронными, так как события рабочего процессаpostиpost_localбольше не будут автоматически вызыватьpollна работающем рабочем процессе, для получения дополнительной информации смотрите: https://github.com/Kong/lua-resty-worker-events#200-16-september-2020- BREAKING: tcp_failures больше не могут быть 0 при http(s) проверках (если http(s)_failures также не установлены в 0) #55
- функция: Добавлена поддержка https_sni #49
- исправление: правильно регистрировать номера строк, используя хвостовые вызовы #29
- исправление: при отсутствии имени хоста использовать IP #48
- исправление: makefile; make install
- функция: добавлено поле версии статуса #54
- функция: добавлены заголовки для запроса проверки #54
- исправление: преждевременный выход при перезагрузке во время проверки #47
- исправление: предотвратить, чтобы список целей не был nil из-за асинхронного поведения #44
- исправление: заменить таймер и блокировки на уровне узла на resty-timer, чтобы предотвратить пропуски интервалов #59
- изменение: добавлено дополнительное логирование при публикации событий #25
- исправление: не исчерпывать таймеры во время init/init_worker при добавлении большого количества целей #57
- исправление: не вызывать на таблице модуля, а использовать метод для блокировок. Также в #57
1.6.3 (06-Sep-2023)
- Функция: Добавлена поддержка https_sni #49 (backport)
- Исправление: Использовать OpenResty API для mTLS #99 (backport)
1.6.2 (17-Nov-2022)
- Исправление: избежать вызова событий рабочего процесса для новых целей, которые были помечены для задержанного удаления, т.е. цели, которые уже существуют в памяти, нуждаются только в очистке флага удаления при добавлении обратно. #122
1.6.1 (25-Jul-2022)
- Исправление: улучшения для обеспечения надлежащей защиты общих ресурсов, чтобы избежать условий гонки и четко сообщать о состояниях отказа. #112, #113, #114.
- Исправление: уменьшить частоту проверки неиспользуемых целей, сокращая количество создаваемых блокировок. #116
- Исправление: принимать любой lua-resty-events релиз
0.1.x. #118
1.6.0 (27-Jun-2022)
- Функция: ввести поддержку модуля lua-resty-events в дополнение к поддержке lua-resty-worker-events. С этим дополнением пакет lua-resty-healthcheck больше не требует конкретного модуля для совместного использования событий, но вам все равно нужно предоставить либо lua-resty-worker-events, либо lua-resty-events. #105
- Изменение: если доступно, lua-resty-healthcheck теперь использует
string.buffer, новый API сериализации LuaJIT. Если он недоступен, lua-resty-healthcheck возвращается к cjson. #109
1.5.3 (14-Nov-2022)
- Исправление: избежать вызова событий рабочего процесса для новых целей, которые были помечены для задержанного удаления, т.е. цели, которые уже существуют в памяти, нуждаются только в очистке флага удаления при добавлении обратно. #121
1.5.2 (07-Jul-2022)
- Улучшенное управление режимами отказа
resty.lock, добавление дополнительных проверок для обеспечения удержания блокировки перед выполнением критического кода и улучшение решения о том, следует ли повторять функцию после тайм-аута при попытке захватить блокировку. #113 - Увеличено логирование для сбоев заблокированных функций. #114
- Частота очистки удаленных целей была снижена, что сократило количество создаваемых блокировок за короткий период. #116
1.5.1 (23-Mar-2022)
- Исправление: избежать нарушения активных проверок состояния при добавлении или удалении целей. #93
1.5.0 (09-Feb-2022)
- Новый параметр
checks.active.headersподдерживает один или несколько списков значений, индексированных по имени заголовка. #87 - Ввести функцию dealyed_clear(), используемую для удаления адресов после временного интервала. Эта функция может быть использована, когда адрес удаляется, но может быть добавлен снова до истечения интервала, сохраняя его статус здоровья. #88
1.4.3 (31-Mar-2022)
- Исправление: избежать нарушения активных проверок состояния при добавлении или удалении целей. #100
1.4.2 (29-Jun-2021)
- Исправление: предотвратить планирование новых активных проверок во время выполнения проверки состояния. #72
- Исправление: удалить наблюдатель событий при остановке активной проверки состояния. #74; исправляет проблему Kong #7406
1.4.1 (17-Feb-2021)
- Исправление: убедиться, что один рабочий процесс будет активно проверять статусы хостов. #67
1.4.0 (07-Jan-2021)
- Использовать один таймер для активной проверки состояния целей. Это уменьшает количество таймеров, используемых проверками состояния, так как они раньше использовали два таймера на каждую цель. #62
1.3.0 (17-Jun-2020)
- Добавлена поддержка mTLS для активных проверок состояния. Эта функция может быть использована, добавляя поля
ssl_certиssl_key, с сертификатом и ключом соответственно, при создании нового объекта проверки состояния. #41
1.2.0 (13-Feb-2020)
- Добавляет
set_all_target_statuses_for_hostname, который устанавливает статусы для всех записей с данным именем хоста сразу.
1.1.2 (19-Dec-2019)
- Исправление: когда API
ngx.sleepнедоступен (например, на этапе логирования), невозможно заблокировать с помощью lua-resty-lock, и любая функция, которая требует эксклюзивного доступа, будет завершаться с ошибкой. Это исправление добавляет метод повторной попытки, который запускает новый легкий поток, который имеет доступ кngx.sleep, чтобы заблокировать критический путь. #37;
1.1.1 (14-Nov-2019)
- Исправление: завершение, когда невозможно получить эксклюзивный доступ к списку целей. Это исправление предотвращает попадание рабочих процессов в несогласованное состояние. #34;
1.1.0 (30-Sep-2019)
- Добавлена поддержка установки пользовательского заголовка
Host, который будет использоваться для активных проверок. - Исправление: журналировать ошибку при сбое SSL Handshake #28;
1.0.0 (05-Jul-2019)
- BREAKING: все функции API, связанные с хостами, теперь требуют аргумент
hostname. Таким образом, разные имена хостов, слушающие на одной и той же комбинации IP и портов, не будут влиять друг на друга. - Исправление: исправить отчет о успехах активной TCP-пробы #20; исправляет проблему #19
0.6.1 (04-Apr-2019)
- Исправление: настройка обратного вызова событий только после загрузки списка целей #18; исправляет проблему Kong #4453
0.6.0 (26-Sep-2018)
- Введение поля
checks.active.https_verify_certificate. По умолчанию оно равноtrue; установка его вfalseотключает проверку сертификата в активных проверках состояния по HTTPS.
0.5.0 (25-Jul-2018)
- Добавлена поддержка
https-- спасибо @gaetanfl за PR! - Введение отдельных полей
checks.active.typeиchecks.passive.type; верхнее полеtypeпо-прежнему поддерживается как резервное, но теперь устарело.
0.4.2 (23-May-2018)
- Исправление заголовка
Hostв активных проверках состояния
0.4.1 (21-May-2018)
- Исправление внутреннего управления счетчиками проверок состояния
0.4.0 (20-Mar-2018)
- Исправление установки значений по умолчанию в
http_statuses - Проверка типа и границ для таблицы
checks
0.3.0 (18-Dec-2017)
- Отключение отдельных проверок, устанавливая их счетчики в 0
0.2.0 (30-Nov-2017)
- Добавляет
set_target_status
0.1.0 (27-Nov-2017) Начальный выпуск
- Начальная загрузка
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-healthcheck.