trustgraph/docs/tech-specs/logging-strategy.ru.md
Alex Jenkins 8954fa3ad7 Feat: TrustGraph i18n & Documentation Translation Updates (#781)
Native CLI i18n: The TrustGraph CLI has built-in translation support
that dynamically loads language strings. You can test and use
different languages by simply passing the --lang flag (e.g., --lang
es for Spanish, --lang ru for Russian) or by configuring your
environment's LANG variable.

Automated Docs Translations: This PR introduces autonomously
translated Markdown documentation into several target languages,
including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew,
Arabic, Simplified Chinese, and Russian.
2026-04-14 12:08:32 +01:00

213 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: default
title: "Стратегия логирования TrustGraph"
parent: "Russian (Beta)"
---
# Стратегия логирования TrustGraph
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
## Обзор
TrustGraph использует встроенный модуль `logging` Python для всех операций логирования, с централизованной конфигурацией и опциональной интеграцией с Loki для агрегации логов. Это обеспечивает стандартизированный и гибкий подход к логированию для всех компонентов системы.
## Параметры конфигурации по умолчанию
### Уровень логирования
- **Уровень по умолчанию**: `INFO`
- **Указывается через**: аргумент командной строки `--log-level`
- **Возможные значения**: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
### Направления вывода
1. **Консоль (stdout)**: Всегда включено - обеспечивает совместимость с контейнерными средами
2. **Loki**: Опциональная централизованная агрегация логов (включена по умолчанию, может быть отключена)
## Модуль централизованного логирования
Вся конфигурация логирования управляется модулем `trustgraph.base.logging`, который предоставляет:
- `add_logging_args(parser)` - Добавляет стандартные аргументы командной строки для логирования
- `setup_logging(args)` - Настраивает логирование на основе предоставленных аргументов
Этот модуль используется всеми серверными компонентами:
- Сервисы, основанные на AsyncProcessor
- API Gateway
- Сервер MCP
## Рекомендации по реализации
### 1. Инициализация логгера
Каждый модуль должен создавать свой собственный логгер, используя `__name__` модуля:
```python
import logging
logger = logging.getLogger(__name__)
```
Имя логгера автоматически используется как метка в Loki для фильтрации и поиска.
### 2. Инициализация сервиса
Все серверные сервисы автоматически получают конфигурацию логирования через централизованный модуль:
```python
from trustgraph.base import add_logging_args, setup_logging
import argparse
def main():
parser = argparse.ArgumentParser()
# Добавляем стандартные аргументы логирования (включая конфигурацию Loki)
add_logging_args(parser)
# Добавляем свои аргументы для сервиса
parser.add_argument('--port', type=int, default=8080)
args = parser.parse_args()
args = vars(args)
# Настраиваем логирование в начале запуска
setup_logging(args)
# Остальная часть инициализации сервиса
logger = logging.getLogger(__name__)
logger.info("Сервис запущен...")
```
### 3. Аргументы командной строки
Все сервисы поддерживают следующие аргументы логирования:
**Уровень логирования:**
```bash
--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
```
**Конфигурация Loki:**
```bash
--loki-enabled # Включить Loki (по умолчанию)
--no-loki-enabled # Отключить Loki
--loki-url URL # URL для отправки логов в Loki (по умолчанию: http://loki:3100/loki/api/v1/push)
--loki-username USERNAME # Необязательное имя пользователя для аутентификации
--loki-password PASSWORD # Необязательный пароль для аутентификации
```
**Примеры:**
```bash
# По умолчанию - уровень INFO, Loki включен
./my-service
# Режим отладки, только консоль
./my-service --log-level DEBUG --no-loki-enabled
# Пользовательский сервер Loki с аутентификацией
./my-service --loki-url http://loki.prod:3100/loki/api/v1/push \
--loki-username admin --loki-password secret
```
### 4. Переменные окружения
Конфигурация Loki поддерживает использование переменных окружения:
```
export LOKI_URL=http://loki.prod:3100/loki/api/v1/push
export LOKI_USERNAME=admin
export LOKI_PASSWORD=secret
```
Аргументы командной строки имеют приоритет над переменными окружения.
### 5. Рекомендации по логированию
#### Использование уровней логирования
- **DEBUG**: Детальная информация для диагностики проблем (значения переменных, вход/выход функций)
- **INFO**: Общие информационные сообщения (запуск сервиса, загрузка конфигурации, этапы обработки)
- **WARNING**: Предупреждающие сообщения о потенциально опасных ситуациях (устаревшие функции, восстанавливаемые ошибки)
- **ERROR**: Сообщения об ошибках о серьезных проблемах (неудачные операции, исключения)
- **CRITICAL**: Критические сообщения о системных сбоях, требующих немедленного внимания
#### Формат сообщений
```python
# Хорошо - включает контекст
logger.info(f"Обработка документа: {doc_id}, размер: {doc_size} байт")
logger.error(f"Не удалось подключиться к базе данных: {error}", exc_info=True)
# Плохо - не включает контекст
logger.info("Обработка документа")
logger.error("Не удалось подключиться")
```
#### Соображения производительности
```python
# Используйте ленивую адресацию для дорогостоящих операций
logger.debug("Результат дорогостоящей операции: %s", expensive_function())
# Проверяйте уровень логирования для очень дорогих операций DEBUG
if logger.isEnabledFor(logging.DEBUG):
debug_data = compute_expensive_debug_info()
logger.debug(f"Данные для отладки: {debug_data}")
```
### 6. Структурированное логирование с использованием Loki
Для сложных данных используйте структурированное логирование с дополнительными метками для Loki:
```python
logger.info("Запрос обработан", extra={
'tags': {
'request_id': request_id,
'user_id': user_id,
'status': 'успешно'
}
})
```
Эти метки становятся поисковыми метками в Loki, а также автоматически создаваемыми:
- `severity` - Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL)
- `logger` - Имя модуля (из `__name__`)
### Зависимости
Модуль централизованного логирования требует:
- `python-logging-loki` - Для интеграции с Loki (необязательно, функционирует без него)
Уже включен в `trustgraph-base/pyproject.toml` и `requirements.txt`.
## Переход
Для существующего кода:
1. **Сервисы, уже использующие AsyncProcessor**: Не требуется никаких изменений, интеграция с Loki автоматическая
2. **Сервисы, которые не используют AsyncProcessor** (api-gateway, mcp-server): Уже обновлены
3. **Инструменты командной строки**: Не относится - продолжайте использовать `print()` или простое логирование
### Переход от `print()` к `logging`:
```python
# Предыдущий код
print(f"Обработка документа {doc_id}")
# Новый код
import logging
logger = logging.getLogger(__name__)
logger.info(f"Обработка документа {doc_id}")
```
## Безопасность
- **Никогда не логируйте конфиденциальную информацию** (пароли, API-ключи, персональные данные, токены)
- **Фильтруйте пользовательский ввод** перед логированием
- **Используйте плейсхолдеры** для конфиденциальных полей: `user_id=****1234`
- **Используйте аутентификацию** для Loki с помощью `--loki-username` и `--loki-password` в производственной среде
- **Безопасный транспорт**: Используйте HTTPS для URL Loki в производственной среде: `https://loki.prod:3100/loki/api/v1/push`
## Обзор конфигурации
| Аргумент | Значение по умолчанию | Переменная окружения | Описание |
|---|---|---|---|
| `--log-level` | `INFO` | - | Уровень логирования в консоли и Loki |
| `--loki-enabled` | `True` | - | Включить логирование Loki |
| `--loki-url` | `http://loki:3100/loki/api/v1/push` | `LOKI_URL` | URL для отправки логов в Loki |
| `--loki-username` | `None` | `LOKI_USERNAME` | Имя пользователя для аутентификации Loki |
| `--loki-password` | `None` | `LOKI_PASSWORD` | Пароль для аутентификации Loki |