logs-analyzer@edd1896df8 | ||
logs-collector@a530d52d05 | ||
logs-container@d0a0ccccd7 | ||
pics | ||
.gitmodules | ||
README.md |
LogDozer
Это проект для сбора и анализа логов приложений.
Преимущества
- готовый стэк для развертывания
- докер образы
- минимальные ресурсы сайдкаров
- единый интерфейс с поиском
- логи собираются не на машине с запущенным приложением (не Кубер)
- быстрое развертывание UI интерфейса
Компоненты
Сборщик логов
Это сайдкар, который запускается "рядом" с приложением - непосредственно в том же докер-контейнере, ловит вывод в стандартный поток логов приложения (JSON формат), парсит их, приводит к стандарту и отправляет в Контейнер.
В качестве сборщика логов выступает Vector - это продвинутый аналог FluentD и FluentBit.
Почему Vector?
- Этот бэнчмарк показывает, что Vector выигрывает по производительности у других сборщиков.
-
Vector умеет использовать RabiitMQ (AMPQ) в качестве транспорта как для получения, так и для отправки.
-
Vector умеет преобразовывать записи на лету встроенным языком и с помощью Lua.
Конейтер логов
В качестве контейнера предполагается использовать систему очередей с минимальными требованиями к ресурсам.
У RabbitMQ требования ниже, чем у Kafka
RabbitMQ запускается с такими настройками:
Анализатор (UI) логов
В качестве UI выбран SigNoz - молодой OpenSource проект, который изначально компонуется для запуска в Docker одной командой.
В отличие от ELK стэка и Grafana Loki, SigNoz:
- не нужно готовить: достаточно
docker compose up -d
- не очень требователен к ресурсам
- богат на функционал (есть дашборды и алерты)
- имеет удобный UI
- может принимать логи по HTTP протоколу
Сборка и установка
Коллектор логов
- Предполагаю, что проект собирается в Docker
- Положить vector внутрь контейнера
COPY ./logs-collector/vector /usr/local/bin/vector
- Настроить прием выводв приложения с помощью Vector
COPY ./logs-collector/vector.yaml ./logs-collector/
RUN echo "#!/bin/bash" > start.sh
RUN echo "export APP_NAME=my-app" >> start.sh
RUN echo "java -jar lib/service.jar | vector --config /app/logs-collector/vector.yaml" >> start.sh
ENTRYPOINT [ "bash", "start.sh" ]
- Не забыть добавить при запуске необходимые переменные окружения
services:
app:
#...
environment:
LOGS_CONTAINER_HOST: ${LOGS_CONTAINER_HOST}
RABBITMQ_PASS: ${RABBITMQ_PASS}
Контейнер логов
Запуск одной командой:
#!/bin/bash
docker-compose up -d --force-recreate --no-deps --build
Анализатор логов
Преобразователь логов
Необходим для того, чтобы забрать накопленные в Контейнере логи, подогнать их под формат SigNoz HTTP, и отдать ему.
Почему не сразу писать в этом формате?
Rabbit MQ накладывает свои поля в JSON. Поэтому приходится все необходимое для SigNoz складывать в поле .app
будущего JSON, отправлять в Rabbit MQ, а потом "распаковывать" из .app
в "корень".
UI
Самое интересное - то, с чем работает пользователь.
Дашборды
Логи
и другое...