FastApi backgroundtasks, чтобы слать аудит логи в еластиксерч. Какие могут быть риски ? Можно ли будет потерять сообщения когда будет останавливаться кластер фаст апи воркеров ? И будет с новым кодом деплоиться ? Вообще я чувствую, мне хотелось бы заюзать как то nginx тут и просто проксировать траффик на еластиксерч, возможно на уровне нжинкс можно сделать какой то редирект трафика в бэкграунд режиме ? А сервера, которые за апи отвечают хотелось бы освободить от такой работы
Потушил FastAPI - таска потерялась BackGround таск это буквально loop.create_later
то есть риск потери информации достаточно высок ? а как тогда лучше решить эту задачу ?
я не смотрел, но мне казалось, что в случае посылания сигнала fastapi, он должен как то джойниться к треду, который выполняется для выполнения бэкграунд тасков, чтобы предотвратить потерю тасков
я смотрел код, BackgroundTaskHandler - это просто тред со своим лупом....
Ну раньше даже треда не было
Да, background таски в FastAPI это максимально примитивная наколеночная поделка, не ясно нахрена вообще существующая
Мне кажется это такой ответ Чемберлену в виде сигналов джанги. И да, я знаю что они работают по разному.
а как советуешь организовать отсылку аудитлогов в еластиксерч ? я думал проксировать трафик через нжинкс, но задача - чтобы отсылка аудит логов не замедляла ответ апишки. либо уже думал через прометеус как то - складывать туда, и слать через прометеус......
Так как это именно события аудита, то отправлять их стоит на уровне бизнес логики приложения.
либо, я думал, может организовать один еластиксерч именно как прокси, а уже с него проксировать на главный кластер еластиксерча.....
Поднимаешь локально (или где-то на другом сервере) rsyslog или что-то похожее, что умеет кешировать логи. Настраиваешь его для отправки логов в elasticsearch (вероятно не напрямую, а через logstash). Из приложения пуляешь в rsyslog сообщения по UDP (через SyslogHandler). Получишь минимальную задержку. Но есть вероятность некоторой потери сообщений, если rsyslog будет находится не на том же сервере где и приложение.
о, интересная идея, забыл про rsyslog
Чтобы держать депенденси
ммм, поясни ?
Ну у вьюхи есть зависимости. Они как-то создаются и потом освобождаются. Так вот если ты запустил БГ таск, они не освобождаются, чтобы юзаться там. Фича сомнительная потому что 1. ты не можешь одну зависимость юзать из нескольких тасков 2. Вряд ли она нужна все время выполнения таска, получится что мы занимаем ресурсы зря (например, коннекты к базе) 3. Веб сервер в норме не должен ничем заниматься кроме как обработкой запросов, иначе хз как масштабировать Но лучше уточнить в доке
но я так понимаю, что в любом случае эти фоновые задачи не гарантируют их выполнение если мы рестартим сервис ?
Обсуждают сегодня