diff options
| author | hobbit <[email protected]> | 2025-11-25 08:49:11 +0300 |
|---|---|---|
| committer | hobbit <[email protected]> | 2025-11-25 09:07:44 +0300 |
| commit | c55ff4a40df2a26d9a076d1fcbf5716a55bca4e5 (patch) | |
| tree | d1d350498bc2042062ec30896f15116e5d944ae8 /library/cpp | |
| parent | 5c5ca787b9576b0d55441770bb50bf1d2003d202 (diff) | |
Create new plugin agent_logs_input
**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
Diffstat (limited to 'library/cpp')
| -rw-r--r-- | library/cpp/unified_agent_client/logger.cpp | 11 | ||||
| -rw-r--r-- | library/cpp/unified_agent_client/logger.h | 3 |
2 files changed, 14 insertions, 0 deletions
diff --git a/library/cpp/unified_agent_client/logger.cpp b/library/cpp/unified_agent_client/logger.cpp index 8afc5499ef5..e78a81d8d87 100644 --- a/library/cpp/unified_agent_client/logger.cpp +++ b/library/cpp/unified_agent_client/logger.cpp @@ -53,6 +53,12 @@ namespace NUnifiedAgent { SetCurrentLogContext(DefaultLogContext); } + void TLogger::AddLog(TLog& log) { + with_lock(Lock) { + AdditionalLogs.push_back(log); + } + } + void TLogger::SetCurrentLogContext(TLogContext& logContext) { CurrentLogContext_.store(logContext.Log.IsNullLog() ? nullptr : &logContext, std::memory_order_release); } @@ -67,6 +73,11 @@ namespace NUnifiedAgent { return; } log.Write(logPriority, logLine); + + // Write to all additional logs + for (auto& additionalLog : AdditionalLogs) { + additionalLog.Write(logPriority, logLine); + } } catch (...) { } } diff --git a/library/cpp/unified_agent_client/logger.h b/library/cpp/unified_agent_client/logger.h index 49fa2b5554d..1185b75aad0 100644 --- a/library/cpp/unified_agent_client/logger.h +++ b/library/cpp/unified_agent_client/logger.h @@ -54,6 +54,8 @@ namespace NUnifiedAgent { public: TLogger(TLog& log, TFMaybe<size_t> rateLimitBytes); + void AddLog(TLog& log); + void StartTracing(ELogPriority logPriority) noexcept; void FinishTracing() noexcept; @@ -119,6 +121,7 @@ namespace NUnifiedAgent { NMonitoring::TDeprecatedCounter* DroppedBytes; const THolder<TThrottlerWithLock> Throttler; TAdaptiveLock Lock; + TVector<TLog> AdditionalLogs; }; class TScopeLogger { |
