Свяжите журналы сеанса и NAT практически в реальном времени.
У меня есть регистратор активности пользователей и система запросов к интернет-провайдеру с очень высокой частотой событий журнала (5–10 тыс. В секунду). Необходимо связать системные журналы радиуса/сеанса и NAT на основе общегоInternalIP
поле. В каждом сеансе есть два события Start и Stop. Примерно 24-часовые данные, созданные 3000 пользователями, могут составлять около 20 миллионов записей, которые, как ожидается, будут расти.
Мое решение состоит из двух агентов синтаксического анализа и сохранения для каждого типа журнала, написанных на Golang с использованием базы данных Postgresql. У меня есть несколько проблем с обеих сторон. Синтаксический анализ и хранение не справляются с высокой скоростью передачи данных даже после буферизации событий системного журнала (в памяти). Для экономии места мне приходится группировать каждый сеанс в одну запись и идентифицировать пользователя сеанса NAT из другого журнала, реализованного через триггер. Буферы занимают системную память, и в конечном итоге процесс завершается. Запись в PGSQL выполняется медленно из-за идентификации пользователя и индексов в таблице.
Чтобы еще раз вернуться к своему подходу, я хотел найти предложения о том, как улучшить производительность. Независимо от того, какой подход я выберу, мне нужно идентифицировать пользователя NAT из журналов сеансов Radius, прежде чем сохранять эти данные в базе данных.