summaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorhobbit <[email protected]>2025-11-25 08:49:11 +0300
committerhobbit <[email protected]>2025-11-25 09:07:44 +0300
commitc55ff4a40df2a26d9a076d1fcbf5716a55bca4e5 (patch)
treed1d350498bc2042062ec30896f15116e5d944ae8 /library/cpp
parent5c5ca787b9576b0d55441770bb50bf1d2003d202 (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.cpp11
-rw-r--r--library/cpp/unified_agent_client/logger.h3
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 {