Перейти к основному содержимому

Понимание ведения логов в Open WebUI 🪵

Ведение логов является ключевым аспектом для отладки, мониторинга и понимания поведения Open WebUI. В этом руководстве объясняется, как осуществляется ведение логов как на стороне клиентского браузера (интерфейс), так и на стороне серверного приложения/бэкенда.

🖥️ Логирование в клиенте браузера (интерфейс)

Для разработки и отладки на стороне интерфейса Open WebUI использует стандартное логирование консоли браузера. Это означает, что вы можете видеть логи прямо в инструментах разработчика, встроенных в ваш веб-браузер.

Как получить доступ к логам браузера:

  1. Откройте инструменты разработчика: В большинстве браузеров инструменты разработчика можно открыть следующим образом:

    • Щелкнув правой кнопкой мыши в любом месте на странице Open WebUI и выбрав "Inspect" или "Inspect Element".
    • Нажав F12 (или Cmd+Opt+I в macOS).
  2. Перейдите на вкладку "Console": В панели инструментов разработчика найдите и нажмите на вкладку "Console".

Типы логов в браузере:

Open WebUI в основном использует JavaScripts console.log() для логирования на стороне клиента. В консоли вы увидите различные типы сообщений, включая:

  • Информационные сообщения: Общий процесс работы приложения и его статус.
  • Предупреждения: Потенциальные проблемы или некритические ошибки.
  • Ошибки: Проблемы, которые могут повлиять на функциональность.

Инструменты разработчика для разных браузеров:

Разные браузеры предлагают немного отличающиеся инструменты разработчика, но все они предоставляют консоль для просмотра логов JavaScript. Вот ссылки на документацию для популярных браузеров:

⚙️ Логирование серверного приложения/бэкенда (Python)

Бэкенд Open WebUI использует встроенный модуль logging в Python для записи событий и информации на стороне сервера. Эти логи необходимы для понимания работы сервера, диагностики ошибок и мониторинга производительности.

Основные понятия:

  • Модуль Python logging: Open WebUI использует стандартную библиотеку logging в Python. Если вы знакомы с логированием в Python, этот раздел будет легко понять. (Для более детальной информации смотрите Документацию по логированию в Python).
  • Вывод в консоль: По умолчанию логи бэкенда отправляются в консоль (стандартный вывод), что делает их видимыми в вашем терминале или логах Docker-контейнера.
  • Уровни логирования: Уровни логирования управляют подробностью выводимых логов. Вы можете настроить Open WebUI для отображения более или менее детальной информации на основе этих уровней.

🚦 Объяснение уровней логирования

Логирование в Python использует иерархию уровней для классификации сообщений по степени их важности. Вот краткий обзор уровней, от самого серьезного до наименее серьезного:

УровеньЧисленное значениеОписаниеСфера использования
CRITICAL50Серьезные ошибки, которые могут привести к завершению работы приложения.Катастрофические сбои, повреждение данных.
ERROR40Ошибки, которые свидетельствуют о проблемах, но приложение может продолжить работать.Восстанавливаемые ошибки, неудачные операции.
WARNING30Потенциальные проблемы или неожиданные ситуации, которые следует исследовать.Предупреждения о устаревших функциях, ограничения ресурсов.
INFO20Общие информационные сообщения о работе приложения.Сообщения о запуске, ключевые события, нормальный поток работы.
DEBUG10Подробная отладочная информация для разработчиков.Вызовы функций, значения переменных, детальный ход выполнения.
NOTSET0Все сообщения записываются. (Обычно по умолчанию WARNING, если уровень не установлен).Полезно для абсолютно полного захвата, обычно для очень специфичной отладки.

Уровень по умолчанию: уровень логирования в Open WebUI по умолчанию — INFO.

🌍 Глобальный уровень логирования (GLOBAL_LOG_LEVEL)

Вы можете изменить глобальный уровень логирования для всего бэкенда Open WebUI с помощью переменной окружения GLOBAL_LOG_LEVEL. Это самый простой способ управления общей степенью подробности логов.

Как это работает:

Настройка GLOBAL_LOG_LEVEL конфигурирует корневой регистратор в Python, затрагивая все регистраторы в Open WebUI и, возможно, некоторые сторонние библиотеки, использующие basicConfig. Используется logging.basicConfig(force=True), что означает, что это будет переопределять любую существующую конфигурацию корневого регистратора.

Пример: Установка для DEBUG

  • Параметр для Docker:

    --env GLOBAL_LOG_LEVEL="DEBUG"
  • Docker Compose (docker-compose.yml):

    environment:
    - GLOBAL_LOG_LEVEL=DEBUG

Влияние: Установка GLOBAL_LOG_LEVEL на DEBUG будет генерировать наиболее подробные логи, включая детальную информацию, полезную для разработки и устранения неисправностей. Для производственных сред может быть более подходящим использовать INFO или WARNING, чтобы снизить объем логов.

⚙️ Уровни логирования для приложения/бекенда

Для более тонкого управления Open WebUI предоставляет переменные окружения для установки уровней логирования для конкретных компонентов бекенда. Логирование - это текущий рабочий процесс, но некоторая степень контроля доступна при использовании этих переменных окружения. Эти переменные позволяют вам точно настроить логирование для различных частей приложения.

Доступные переменные окружения:

Переменная окруженияКомпонент/МодульОписание
AUDIO_LOG_LEVELОбработка аудиоЛогирование, связанное с распознаванием аудио (faster-whisper), преобразованием текста в речь (TTS) и обработкой аудио.
COMFYUI_LOG_LEVELИнтеграция с ComfyUIЛогирование для взаимодействия с ComfyUI, если вы используете эту интеграцию.
CONFIG_LOG_LEVELУправление конфигурациейЛогирование, связанное с загрузкой и обработкой файлов конфигурации Open WebUI.
DB_LOG_LEVELОперации с базой данных (Peewee)Логирование взаимодействия с базой данных, используя ORM Peewee (Object-Relational Mapper).
IMAGES_LOG_LEVELГенерация изображений (AUTOMATIC1111/Stable Diffusion)Логирование задач генерации изображений, особенно при использовании интеграции AUTOMATIC1111 Stable Diffusion.
MAIN_LOG_LEVELВыполнение основного приложения (корневой регистратор)Логирование из основного входного пункта приложения и корневого регистратора.
MODELS_LOG_LEVELУправление моделямиЛогирование, связанное с загрузкой, управлением и взаимодействием с языковыми моделями (LLMs), включая аутентификацию.
OLLAMA_LOG_LEVELИнтеграция с Ollama BackendЛогирование коммуникации и взаимодействия с бекендом Ollama.
OPENAI_LOG_LEVELИнтеграция с API OpenAIЛогирование взаимодействия с API OpenAI (например, для моделей, как GPT).
RAG_LOG_LEVELГенерация с использованием извлечения данных (RAG)Логирование для RAG-пайплайна, включая Chroma векторную базу данных и Sentence-Transformers.
WEBHOOK_LOG_LEVELВеб-хук аутентификацииРасширенное логирование для функциональности веб-хука аутентификации.

Как использовать:

Вы можете установить эти переменные окружения так же, как и GLOBAL_LOG_LEVEL (параметры Docker, раздел environment в Docker Compose). Например, чтобы получить более детальное логирование взаимодействий с Ollama, вы можете установить:

environment:
- OLLAMA_LOG_LEVEL=DEBUG

Важная заметка: В отличие от GLOBAL_LOG_LEVEL, эти переменные, специфичные для приложения, могут не влиять на логирование всех сторонних модулей. Они в основном управляют логированием в рамках кода Open WebUI.

Понимая и используя эти механизмы логирования, вы можете эффективно мониторить, устранять неполадки и получать инсайты о вашей инстанции Open WebUI.