<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/unified_agent_client/logger.cpp, branch CLI_2.32.0</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=CLI_2.32.0</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=CLI_2.32.0'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2026-02-25T12:06:35Z</updated>
<entry>
<title>/0: Implement TExecutorSet and TExecutorSetManager</title>
<updated>2026-02-25T12:06:35Z</updated>
<author>
<name>iofik</name>
<email>iofik@yandex-team.com</email>
</author>
<published>2026-02-25T11:02:41Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=02e0966b2c68a74e2525633c92fa8219e9b8ef4a'/>
<id>urn:sha1:02e0966b2c68a74e2525633c92fa8219e9b8ef4a</id>
<content type='text'>
## Абстракция управления 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-&gt;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` и `&gt; 0`
  - Start/Stop и параметр pool в GetExecutors

### Цель

Подготовка к PR1: выделение отдельных пулов для pipelines. Сейчас меняется только абстракция, без изменения конфигурации и без добавления dedicated pools.
commit_hash:0f1b2205c474db1b601a72f063916333a74882d6
</content>
</entry>
<entry>
<title>/3: Get rid of YLOG*_F macros in favor of just YLOG*</title>
<updated>2026-02-20T18:52:08Z</updated>
<author>
<name>iofik</name>
<email>iofik@yandex-team.com</email>
</author>
<published>2026-02-20T18:25:16Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=b972f11a5ffee8ffeac87ac0a4b0625a40e79136'/>
<id>urn:sha1:b972f11a5ffee8ffeac87ac0a4b0625a40e79136</id>
<content type='text'>
_Все вызовы вида YLOG\*\_F(...) заменены на YLOG\*_(...) по всему дереву unified\_agent (например, YLOG\_DEBUG\_F → YLOG\_DEBUG, YLOG\_ERR\_F → YLOG\_ERROR).
commit_hash:483c6f5cb6db2d44e9d71b427a697dc2850cba1f
</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>
<entry>
<title>Create new plugin agent_logs_input</title>
<updated>2025-11-25T06:07:44Z</updated>
<author>
<name>hobbit</name>
<email>hobbit@yandex-team.com</email>
</author>
<published>2025-11-25T05:49:11Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=c55ff4a40df2a26d9a076d1fcbf5716a55bca4e5'/>
<id>urn:sha1:c55ff4a40df2a26d9a076d1fcbf5716a55bca4e5</id>
<content type='text'>
**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
</content>
</entry>
<entry>
<title>Use lower case for TString methods Data, Size and Empty in extsearch, fintech, games, geobase, infra, ipreg, juggler, kernel, keyboard, laas, library, logbroker, logos, mail</title>
<updated>2024-10-10T13:05:56Z</updated>
<author>
<name>mikhnenko</name>
<email>mikhnenko@yandex-team.com</email>
</author>
<published>2024-10-10T12:49:45Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=8afa19d6579e8d3351a28f691f8298d03fcf3948'/>
<id>urn:sha1:8afa19d6579e8d3351a28f691f8298d03fcf3948</id>
<content type='text'>
If you think that this pr has broken something for you, roll it back
commit_hash:df8e48b2a4ecbbc74a504aa3ff62ebb8f464218d
</content>
</entry>
<entry>
<title>Log backend move</title>
<updated>2023-02-09T09:40:11Z</updated>
<author>
<name>hor911</name>
<email>hor911@ydb.tech</email>
</author>
<published>2023-02-09T09:40:11Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=24689527cd888aa8a640ecb5077e656b3520d373'/>
<id>urn:sha1:24689527cd888aa8a640ecb5077e656b3520d373</id>
<content type='text'>
</content>
</entry>
</feed>
