Go to file
2024-09-17 23:59:15 +03:00
logs-analyzer@edd1896df8 submodules 2024-09-17 20:55:31 +03:00
logs-collector@a530d52d05 readme 2024-09-17 23:30:58 +03:00
logs-container@d0a0ccccd7 submodules 2024-09-17 20:55:31 +03:00
pics readme 2024-09-17 23:30:58 +03:00
.gitmodules submodules 2024-09-17 20:55:31 +03:00
README.md logdozer 2024-09-17 23:59:15 +03:00

LogDozer

Это проект для сбора и анализа логов приложений.

Преимущества

  1. готовый стэк для развертывания
    • докер образы
  2. минимальные ресурсы сайдкаров
  3. единый интерфейс с поиском
  4. логи собираются не на машине с запущенным приложением (не Кубер)
  5. быстрое развертывание UI интерфейса

Компоненты

Сборщик логов

Это сайдкар, который запускается "рядом" с приложением - непосредственно в том же докер-контейнере, ловит вывод в стандартный поток логов приложения (JSON формат), парсит их, приводит к стандарту и отправляет в Контейнер.

В качестве сборщика логов выступает Vector - это продвинутый аналог FluentD и FluentBit.

Почему Vector?

  1. Этот бэнчмарк показывает, что Vector выигрывает по производительности у других сборщиков.

  1. Vector умеет использовать RabiitMQ (AMPQ) в качестве транспорта как для получения, так и для отправки.

  2. Vector умеет преобразовывать записи на лету встроенным языком и с помощью Lua.

Конейтер логов

В качестве контейнера предполагается использовать систему очередей с минимальными требованиями к ресурсам.

У RabbitMQ требования ниже, чем у Kafka

RabbitMQ запускается с такими настройками:

Анализатор (UI) логов

В качестве UI выбран SigNoz - молодой OpenSource проект, который изначально компонуется для запуска в Docker одной командой.

В отличие от ELK стэка и Grafana Loki, SigNoz:

  • не нужно готовить: достаточно docker compose up -d
  • не очень требователен к ресурсам
  • богат на функционал (есть дашборды и алерты)
  • имеет удобный UI
  • может принимать логи по HTTP протоколу

Сборка и установка

Коллектор логов

  1. Предполагаю, что проект собирается в Docker
  2. Положить vector внутрь контейнера
COPY ./logs-collector/vector /usr/local/bin/vector
  1. Настроить прием выводв приложения с помощью 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" ]
  1. Не забыть добавить при запуске необходимые переменные окружения
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

Самое интересное - то, с чем работает пользователь.

Дашборды

Логи

и другое...