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.2, выпущенную 9 апреля 2026 года.
Библиотека проверки состояния для 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.2 (09-апр-2026)
- Fix(active-checks): используйте HTTP/1.1 для проб здоровья с автоматической согласованием версии #176
3.1.1 (19-ноя-2025)
- Fix: измените заголовки по умолчанию на пустую таблицу вместо массива, чтобы удалить уведомление о снятии с поддержки #174
3.1.0 (19-июн-2024)
- Feat: удалите проверку версии resty.events #162
3.0.2 (16-май-2024)
- Fix: избегайте создания нескольких таймеров для выполнения одной и той же активной проверки #157
3.0.1 (22-дек-2023)
- Fix: исправьте логику задержки очистки, когда было запущено несколько healthchecker #146
3.0.0 (12-окт-2023)
- Perf: оптимизируйте, локализовав некоторые функции #92 (backport)
- Fix: генерируйте свежие значения по умолчанию для http_statuses внутри new() #83 (backport)
2.0.0 (22-сен-2020)
Примечание:
Изменения в этой версии были отменены для текущей и будущей разработки.
Ниже вы можете увидеть его changelog, но будьте внимательны, что эти изменения могут отсутствовать в 3.y.z, если они не указаны явно в 3.y.z, 1.6.3 или предыдущих релизах. Читайте подробнее в: выпуск 3.0.0 (#142) и chore(*): выравнивание ветки master к выпуску 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
- feature: добавлена поддержка https_sni #49
- fix: правильно регистрируйте номера строк, используя хвостовые вызовы #29
- fix: при отсутствии имени хоста используйте IP #48
- fix: makefile; make install
- feature: добавлено поле версии состояния #54
- feature: добавьте заголовки для запроса пробы #54
- fix: выходите раньше при перезагрузке во время пробы #47
- fix: предотвратите, чтобы список целей был nil из-за асинхронного поведения #44
- fix: замените таймер и блокировки на уровне узла на resty-timer, чтобы предотвратить пропуски интервалов #59
- change: добавлено дополнительное логирование при публикации событий #25
- fix: не исчерпывайте таймеры во время init/init_worker при добавлении большого количества целей #57
- fix: не вызывайте на таблице модуля, а используйте метод для блокировок. Также в #57
1.6.3 (06-сен-2023)
- Feature: добавлена поддержка https_sni #49 (backport)
- Fix: используйте API OpenResty для mTLS #99 (backport)
1.6.2 (17-ноя-2022)
- Fix: избегайте поднятия событий рабочего процесса для новых целей, которые были помечены для задержанного удаления, т.е. цели, которые уже существуют в памяти, только нужно очистить флаг удаления при добавлении обратно. #122
1.6.1 (25-июл-2022)
- Fix: улучшения для обеспечения правильной защиты общих ресурсов, чтобы избежать гонок и четко сообщать о состояниях отказа. #112, #113, #114.
- Fix: уменьшите частоту проверки на неиспользуемые цели, уменьшая количество создаваемых блокировок. #116
- Fix: принимайте любые lua-resty-events версии
0.1.x. #118
1.6.0 (27-июн-2022)
- Feature: введите поддержку модуля lua-resty-events в дополнение к поддержке lua-resty-worker-events. С этим дополнением пакет lua-resty-healthcheck больше не требует конкретного модуля для совместного использования событий, но вам все равно необходимо предоставить либо lua-resty-worker-events, либо lua-resty-events. #105
- Change: если доступно, lua-resty-healthcheck теперь использует
string.buffer, новый API сериализации LuaJIT. Если он недоступен, lua-resty-healthcheck возвращается к cjson. #109
1.5.3 (14-ноя-2022)
- Fix: избегайте поднятия событий рабочего процесса для новых целей, которые были помечены для задержанного удаления, т.е. цели, которые уже существуют в памяти, только нужно очистить флаг удаления при добавлении обратно. #121
1.5.2 (07-июл-2022)
- Лучше обрабатывайте режимы отказа
resty.lock, добавляя больше проверок, чтобы убедиться, что блокировка удерживается перед выполнением критического кода, и улучшая решение о том, следует ли повторять функцию после таймаута при попытке захватить блокировку. #113 - Увеличено логирование для сбоев заблокированных функций. #114
- Частота очистки удаленных целей была снижена, что уменьшило количество создаваемых блокировок за короткий период. #116
1.5.1 (23-мар-2022)
- Fix: избегайте нарушения активных проверок состояния при добавлении или удалении целей. #93
1.5.0 (09-фев-2022)
- Новый параметр
checks.active.headersподдерживает один или несколько списков значений, индексированных по имени заголовка. #87 - Введите функцию dealyed_clear(), используемую для удаления адресов после временного интервала. Эта функция может использоваться, когда адрес удаляется, но может быть добавлен снова до истечения интервала, сохраняя его состояние здоровья. #88
1.4.3 (31-мар-2022)
- Fix: избегайте нарушения активных проверок состояния при добавлении или удалении целей. #100
1.4.2 (29-июн-2021)
- Fix: предотвратите планирование новых активных проверок, пока выполняется проверка состояния. #72
- Fix: удалите наблюдатель событий при остановке активной проверки состояния. #74; исправляет проблему Kong #7406
1.4.1 (17-фев-2021)
- Fix: убедитесь, что один рабочий процесс будет активно проверять статусы хостов. #67
1.4.0 (07-янв-2021)
- Используйте один таймер для активной проверки состояния целей. Это уменьшает количество таймеров, используемых проверяющими состоянием, так как они раньше использовали два таймера для каждой цели. #62
1.3.0 (17-июн-2020)
- Добавляет поддержку mTLS для активных проверок состояния. Эта функция может быть использована, добавляя поля
ssl_certиssl_key, с сертификатом и ключом соответственно, при создании нового объекта проверки состояния. #41
1.2.0 (13-фев-2020)
- Добавляет
set_all_target_statuses_for_hostname, который устанавливает статусы для всех записей с данным именем хоста сразу.
1.1.2 (19-дек-2019)
- Fix: когда API
ngx.sleepнедоступен (например, на этапе логирования), невозможно заблокировать с использованием lua-resty-lock, и любая функция, требующая эксклюзивного доступа, будет завершаться с ошибкой. Этот фикс добавляет метод повторной попытки, который запускает новый легкий поток, который имеет доступ кngx.sleep, чтобы заблокировать критический путь. #37;
1.1.1 (14-ноя-2019)
- Fix: завершение, когда невозможно получить эксклюзивный доступ к списку целей. Этот фикс предотвращает попадание рабочих процессов в несогласованное состояние. #34;
1.1.0 (30-сен-2019)
- Добавьте поддержку настройки пользовательского заголовка
Host, который будет использоваться для активных проверок. - Fix: логировать ошибку при сбое SSL Handshake #28;
1.0.0 (05-июл-2019)
- BREAKING: все функции API, связанные с хостами, теперь требуют аргумент
hostname. Таким образом, разные имена хостов, слушающие на одной и той же комбинации IP и портов, не будут влиять друг на друга. - Fix: исправьте отчет об успехах активных TCP-проб #20; исправляет проблему #19
0.6.1 (04-апр-2019)
- Fix: настройка обратного вызова события только после загрузки списка целей #18; исправляет проблему Kong #4453
0.6.0 (26-сен-2018)
- Введите поле
checks.active.https_verify_certificate. По умолчанию оно равноtrue; установка его вfalseотключает проверку сертификата в активных проверках состояния через HTTPS.
0.5.0 (25-июл-2018)
- Добавьте поддержку для
https-- спасибо @gaetanfl за PR! - Введите отдельные поля
checks.active.typeиchecks.passive.type; верхний уровень полеtypeвсе еще поддерживается как резервное, но теперь устарело.
0.4.2 (23-май-2018)
- Исправьте заголовок
Hostв активных проверках состояния
0.4.1 (21-май-2018)
- Исправьте внутреннее управление счетчиками проверок состояния
0.4.0 (20-мар-2018)
- Исправьте установку значений по умолчанию в
http_statuses - Проверка типа и границ для таблицы
checks
0.3.0 (18-дек-2017)
- Отключите отдельные проверки, установив их счетчики в 0
0.2.0 (30-ноя-2017)
- Добавляет
set_target_status
0.1.0 (27-ноя-2017) Первоначальный выпуск
- Первоначальная загрузка
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-healthcheck.