summaryrefslogtreecommitdiffstats
path: root/library/cpp/unified_agent_client/logger.cpp
Commit message (Collapse)AuthorAgeFilesLines
* /0: Implement TExecutorSet and TExecutorSetManageriofik2026-02-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ## Абстракция управления executor’ами (TExecutorSet, TExecutorSetManager) ### Что сделано Вводится единый слой для работы с пулами потоков agent’а: main, background и IO. **TExecutorSet** — представление набора executor’ов: - `Main()`, `Background()`, `IO()` — одинаковый интерфейс для всех трёх пулов - IO возвращает тот же объект, что и Main, когда `separate_io_thread_pool == 0`, иначе — отдельный executor **TExecutorSetManager** — создание и владение executor’ами: - `GetExecutors(EExecutorPool pool)` — возвращает нужный набор; пока используются только `Global` и `Metrics` (оба отдают один и тот же набор) - `Start()`, `Stop()` — жизненный цикл - Main создаётся сразу, Background и IO — лениво при первом обращении **Рефакторинг TAgent**: - Вместо отдельных полей `TaskExecutor`, `BackgroundTaskExecutor`, `IOTaskExecutor` и `DelayedExecutor` используется `ExecutorSetManager` - Обращения к executor’ам идут через `ExecutorSetManager->GetExecutors(EExecutorPool::Global)` - FSNotifier, MemoryQuotaManager, AgentContext, CountersUpdater работают с глобальными executor’ами **RegisterCountersWith**: - Регистрирует счётчики main, background, IO (если включён отдельный IO-пул) и delayed - Раньше IO-счётчики не учитывались — это исправлено **Тесты**: - Добавлен gtest-модуль `executor_set_tests` в `tests/gtests/`: - Проверяются GetExecutors, доступность Main, ленивая инициализация Background - Поведение IO при `separate_io_thread_pool == 0` и `> 0` - Start/Stop и параметр pool в GetExecutors ### Цель Подготовка к PR1: выделение отдельных пулов для pipelines. Сейчас меняется только абстракция, без изменения конфигурации и без добавления dedicated pools. commit_hash:0f1b2205c474db1b601a72f063916333a74882d6
* /3: Get rid of YLOG*_F macros in favor of just YLOG*iofik2026-02-201-1/+1
| | | | | _Все вызовы вида YLOG\*\_F(...) заменены на YLOG\*_(...) по всему дереву unified\_agent (например, YLOG\_DEBUG\_F → YLOG\_DEBUG, YLOG\_ERR\_F → YLOG\_ERROR). commit_hash:483c6f5cb6db2d44e9d71b427a697dc2850cba1f
* /2: Use our internal logger header, add logging metricsiofik2026-02-191-32/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # Улучшения библиотеки логирования и переход на троттлинг логов ## Описание Этот PR содержит улучшения системы логирования unified\_agent с акцентом на предотвращение флуда логов и добавление метрик логирования. ## Основные изменения ### 1. Улучшения библиотеки логирования (`library/cpp/unified_agent_client/logger`) - **Встроенный троттлинг логов**: Добавлена поддержка ограничения частоты логирования на уровне библиотеки - Новые макросы `YLOG_*_T` с автоматическим троттлингом (20 логов на 10 секунд по умолчанию) - Независимый троттлинг для каждой точки логирования (по `__FILE__:__LINE__`) - Автоматический подсчет подавленных сообщений с выводом `[+N suppressed]` - **Метрики логирования**: Добавлены счетчики для мониторинга активности логирования - `RecordsReceived` - общее количество попыток логирования - `RecordsDropped` - количество подавленных сообщений из-за троттлинга - Счетчики передаются через `TLogger::TCounters` при создании логгера - **Оптимизация производительности**: - Использование `GetCycleCount()` для быстрого получения времени (вместо системных вызовов) - Relaxed memory ordering для атомарных операций (достаточно для троттлинга) - Минимальные накладные расходы при отключенном логировании ### 2. Переход всех логов агента на троттлинг - **Унификация макросов**: Все макросы `YLOG_*` в `logbroker/unified_agent/common/util/logger.h` теперь используют троттлинг - `YLOG_DEBUG`, `YLOG_INFO`, `YLOG_WARNING`, `YLOG_ERROR` и т.д. теперь автоматически применяют троттлинг - Старые макросы `YLOG_*_F` теперь алиасы для новых троттлированных версий - Обратная совместимость полностью сохранена - **Обновление документации**: Файл `for_ai_cpp.md` обновлен с новыми рекомендациями по логированию ### 3. Интеграция метрик логирования в телеметрию - **Новые счетчики в `TAgentLogCounters`**: - `RecordsReceived` - rate метрика `agent.log.records_received` - `RecordsDropped` - rate метрика `agent.log.records_dropped` - **Экспорт метрик**: Метрики логирования автоматически собираются и отправляются в телеметрию агента - **Рефакторинг конструктора `TAgent`**: - Упрощена передача счетчиков через структуру `TAgent::TCounters` - Счетчики логирования передаются в `TLogger` при инициализации ### 4. Тесты - **Перенос тестов**: Тесты логирования перемещены из `logbroker/unified_agent/tests/gtests/logger_tests` в `library/cpp/unified_agent_client/ut` - **Расширенное покрытие**: - Тесты базового троттлинга - Тесты счетчика подавленных сообщений - Тесты независимого троттлинга для разных точек логирования - Тесты форматирования сообщений - Тесты счетчиков метрик ### 5. Исправления и улучшения - **Удаление дублирования кода**: Логика троттлинга теперь находится только в `library/cpp/unified_agent_client/logger.cpp` - **Упрощение API**: Удален отдельный файл `logbroker/unified_agent/common/util/logger.cpp` - **Обновление импортов**: Все файлы обновлены для использования правильных заголовочных файлов ## Преимущества 1. **Защита от флуда логов**: Автоматическое ограничение частоты логирования предотвращает переполнение логов 2. **Наблюдаемость**: Метрики логирования позволяют отслеживать активность и проблемы с логированием 3. **Производительность**: Минимальные накладные расходы благодаря оптимизированной реализации 4. **Простота использования**: Троттлинг работает автоматически, не требует изменений в коде 5. **Обратная совместимость**: Все существующие макросы продолжают работать ## Тестирование - ✅ Все unit-тесты логирования проходят - ✅ Integration тесты обновлены (исключение нестабильной метрики `RecordsReceived` из сравнений) - ✅ Проверена работа троттлинга в реальных условиях commit_hash:75fc97a8576114446bfb9ec11efbb80df322e443
* Create new plugin agent_logs_inputhobbit2025-11-251-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | **Summary** Реализован новый входной плагин `agent_logs` для отправки логов самого агента в пайплайн unified\_agent. Это решает проблему доступа к логам агента в production окружении, где требовались права System developer для доступа к файлам на дисках. ## **What's Changed** {#whats-changed} ### **New Plugin: `agent_logs_input`** {#new-plugin-agent_logs_input} Добавлен новый входной плагин, который: * Перехватывает логи агента через кастомный `TLogBackend` * Отправляет логи в пайплайн стриммингово (не пулингом) * Поддерживает фильтрацию по уровню логов (настройка **level**, по умолчанию `NOTICE`) ### **Implementation Details** {#implementation-details} **Основные компоненты:** 1. **TAgentLogsBackend** - кастомный log backend: * Наследуется от `TLogBackend` * Перехватывает все логи агента через метод `WriteData()` * Фильтрует логи по приоритету * Отправляет отфильтрованные логи в `IMessageConsumer` * Поддерживает graceful stop 2. **TPlugin** - основной класс плагина: * Управляет lifecycle плагина * Создает сессию с ID `agent_logs` * Передает конфигурацию в session handler 3. **TSessionHandler** - обработчик сессии: * Создает и регистрирует `TAgentLogsBackend` * Добавляет backend в глобальный logger через `AddLog()` * Управляет остановкой backend'а **Пример конфигурации:** ``` routes: - input: plugin: agent_logs config: level: INFO channel: pipe: - filter: plugin: format_otel_logs output: # https://nda.ya.ru/t/YexxO8Qf7NZMzy plugin: otel_logs config: url: "collector.logs.yandex-team.ru:443" project: hobbit_test_project service: logs # https://nda.ya.ru/t/o4MQT5rI7NZMzz oauth: secret: env: TEST_LOGS_OAUTH agent_log: priority: INFO rate_limit_bytes: 100000 ``` commit_hash:c6f115ab98c30a47845ce9f9f8a58ef89973d422
* Use lower case for TString methods Data, Size and Empty in extsearch, ↵mikhnenko2024-10-101-1/+1
| | | | | | | fintech, games, geobase, infra, ipreg, juggler, kernel, keyboard, laas, library, logbroker, logos, mail If you think that this pr has broken something for you, roll it back commit_hash:df8e48b2a4ecbbc74a504aa3ff62ebb8f464218d
* Log backend movehor9112023-02-091-0/+131