<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/unified_agent_client/ut/logger_ut.cpp, branch main</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=main</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2026-05-18T10:00:07Z</updated>
<entry>
<title>Intermediate changes</title>
<updated>2026-05-18T10:00:07Z</updated>
<author>
<name>robot-piglet</name>
<email>robot-piglet@yandex-team.com</email>
</author>
<published>2026-05-18T09:00:44Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=ec25e7e0cf78d7c1dd10ee1afd538a284ffd9c53'/>
<id>urn:sha1:ec25e7e0cf78d7c1dd10ee1afd538a284ffd9c53</id>
<content type='text'>
commit_hash:7218aca25ba819156cd6a364f9bd4ef8598c49ef
</content>
</entry>
<entry>
<title>/2: Use our internal logger header, add logging metrics</title>
<updated>2026-02-19T20:07:43Z</updated>
<author>
<name>iofik</name>
<email>iofik@yandex-team.com</email>
</author>
<published>2026-02-19T19:43:26Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=ed109965ec70b4e46ead9312cc5e33c2e561d154'/>
<id>urn:sha1:ed109965ec70b4e46ead9312cc5e33c2e561d154</id>
<content type='text'>
# Улучшения библиотеки логирования и переход на троттлинг логов

## Описание

Этот 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
</content>
</entry>
</feed>
