mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 16:36:21 +02:00
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.
358 lines
11 KiB
Markdown
358 lines
11 KiB
Markdown
---
|
||
layout: default
|
||
title: "TrustGraph Kayıt (Log) Stratejisi"
|
||
parent: "Turkish (Beta)"
|
||
---
|
||
|
||
# TrustGraph Kayıt (Log) Stratejisi
|
||
|
||
> **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.
|
||
|
||
## Genel Bakış
|
||
|
||
TrustGraph, tüm kayıt işlemlerinde Python'un yerleşik `logging` modülünü kullanır, merkezi yapılandırma ve kayıt toplama için isteğe bağlı Loki entegrasyonuna sahiptir. Bu, sistemin tüm bileşenleri için standartlaştırılmış, esnek bir kayıt yaklaşımı sağlar.
|
||
|
||
## Varsayılan Yapılandırma
|
||
|
||
### Kayıt Seviyesi
|
||
**Varsayılan Seviye**: `INFO`
|
||
**Yapılandırılabilir**: `--log-level` komut satırı argümanı aracılığıyla
|
||
**Seçenekler**: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
|
||
|
||
### Çıkış Hedefleri
|
||
1. **Konsol (stdout)**: Her zaman etkindir - konteynerleştirilmiş ortamlarla uyumluluğu sağlar.
|
||
2. **Loki**: İsteğe bağlı, merkezi kayıt toplama (varsayılan olarak etkindir, devre dışı bırakılabilir).
|
||
|
||
## Merkezi Kayıt Modülü
|
||
|
||
Tüm kayıt yapılandırması, aşağıdaki özellikleri sağlayan `trustgraph.base.logging` modülü tarafından yönetilir:
|
||
`add_logging_args(parser)` - Standart kayıt komut satırı argümanlarını ekler.
|
||
`setup_logging(args)` - Ayrıştırılmış argümanlardan kaydı yapılandırır.
|
||
|
||
Bu modül, tüm sunucu tarafı bileşenleri tarafından kullanılır:
|
||
AsyncProcessor tabanlı hizmetler
|
||
API Ağ Geçidi
|
||
MCP Sunucusu
|
||
|
||
## Uygulama Yönergeleri
|
||
|
||
### 1. Kayıt Oluşturucu Başlatma
|
||
|
||
Her modül, modülün `__name__`'ını kullanarak kendi kayıt oluşturucusunu oluşturmalıdır:
|
||
|
||
```python
|
||
import logging
|
||
|
||
logger = logging.getLogger(__name__)
|
||
```
|
||
|
||
Kayıt günlüğünün adı, Loki'de filtreleme ve arama için otomatik olarak bir etiket olarak kullanılır.
|
||
|
||
### 2. Hizmet Başlatma
|
||
|
||
Tüm sunucu tarafı hizmetleri, merkezi modül aracılığıyla otomatik olarak günlük yapılandırması alır:
|
||
|
||
```python
|
||
from trustgraph.base import add_logging_args, setup_logging
|
||
import argparse
|
||
|
||
def main():
|
||
parser = argparse.ArgumentParser()
|
||
|
||
# Add standard logging arguments (includes Loki configuration)
|
||
add_logging_args(parser)
|
||
|
||
# Add your service-specific arguments
|
||
parser.add_argument('--port', type=int, default=8080)
|
||
|
||
args = parser.parse_args()
|
||
args = vars(args)
|
||
|
||
# Setup logging early in startup
|
||
setup_logging(args)
|
||
|
||
# Rest of your service initialization
|
||
logger = logging.getLogger(__name__)
|
||
logger.info("Service starting...")
|
||
```
|
||
|
||
### 3. Komut Satırı Argümanları
|
||
|
||
Tüm hizmetler bu günlük kaydı argümanlarını destekler:
|
||
|
||
**Günlük Seviyesi:**
|
||
```bash
|
||
--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
|
||
```
|
||
|
||
**Loki Yapılandırması:**
|
||
```bash
|
||
--loki-enabled # Enable Loki (default)
|
||
--no-loki-enabled # Disable Loki
|
||
--loki-url URL # Loki push URL (default: http://loki:3100/loki/api/v1/push)
|
||
--loki-username USERNAME # Optional authentication
|
||
--loki-password PASSWORD # Optional authentication
|
||
```
|
||
|
||
**Örnekler:**
|
||
```bash
|
||
# Default - INFO level, Loki enabled
|
||
./my-service
|
||
|
||
# Debug mode, console only
|
||
./my-service --log-level DEBUG --no-loki-enabled
|
||
|
||
# Custom Loki server with auth
|
||
./my-service --loki-url http://loki.prod:3100/loki/api/v1/push \
|
||
--loki-username admin --loki-password secret
|
||
```
|
||
|
||
### 4. Ortam Değişkenleri
|
||
|
||
Loki yapılandırması, ortam değişkeni geri dönüşlerini destekler:
|
||
|
||
```bash
|
||
export LOKI_URL=http://loki.prod:3100/loki/api/v1/push
|
||
export LOKI_USERNAME=admin
|
||
export LOKI_PASSWORD=secret
|
||
```
|
||
|
||
Komut satırı argümanları, ortam değişkenlerine göre önceliklidir.
|
||
|
||
### 5. Kayıt (Logging) İçin En İyi Uygulamalar
|
||
|
||
#### Kayıt Seviyelerinin Kullanımı
|
||
**DEBUG**: Sorunları teşhis etmek için detaylı bilgiler (değişken değerleri, fonksiyon giriş/çıkış)
|
||
**INFO**: Genel bilgilendirici mesajlar (hizmet başlatıldı, yapılandırma yüklendi, işlem aşamaları)
|
||
**WARNING**: Potansiyel olarak tehlikeli durumlara yönelik uyarı mesajları (kullanımdan kaldırılmış özellikler, düzeltilebilir hatalar)
|
||
**ERROR**: Ciddi sorunlara yönelik hata mesajları (başarısız işlemler, istisnalar)
|
||
**CRITICAL**: Acil müdahale gerektiren sistem arızalarına yönelik kritik mesajlar
|
||
|
||
#### Mesaj Formatı
|
||
```python
|
||
# Good - includes context
|
||
logger.info(f"Processing document: {doc_id}, size: {doc_size} bytes")
|
||
logger.error(f"Failed to connect to database: {error}", exc_info=True)
|
||
|
||
# Avoid - lacks context
|
||
logger.info("Processing document")
|
||
logger.error("Connection failed")
|
||
```
|
||
|
||
#### Performans Hususları
|
||
```python
|
||
# Use lazy formatting for expensive operations
|
||
logger.debug("Expensive operation result: %s", expensive_function())
|
||
|
||
# Check log level for very expensive debug operations
|
||
if logger.isEnabledFor(logging.DEBUG):
|
||
debug_data = compute_expensive_debug_info()
|
||
logger.debug(f"Debug data: {debug_data}")
|
||
```
|
||
|
||
### 6. Loki ile Yapılandırılmış Günlüğe Kayıt
|
||
|
||
Karmaşık veriler için, Loki için ek etiketlerle yapılandırılmış günlüğe kaydı kullanın:
|
||
|
||
```python
|
||
logger.info("Request processed", extra={
|
||
'tags': {
|
||
'request_id': request_id,
|
||
'user_id': user_id,
|
||
'status': 'success'
|
||
}
|
||
})
|
||
```
|
||
|
||
Bu etiketler, otomatik etiketlerin yanı sıra, Loki'de aranabilir etiketler haline gelir:
|
||
`severity` - Log seviyesi (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
||
`logger` - Modül adı (`__name__`'den)
|
||
|
||
### 7. İstisna Kaydı
|
||
|
||
İstisnalar için her zaman yığın izlerini ekleyin:
|
||
|
||
```python
|
||
try:
|
||
process_data()
|
||
except Exception as e:
|
||
logger.error(f"Failed to process data: {e}", exc_info=True)
|
||
raise
|
||
```
|
||
|
||
### 8. Asenkron Kayıt (Logging) Hususları
|
||
|
||
Kayıt sistemi, Loki için engellemeyen, kuyruklu işleyiciler kullanır:
|
||
Konsol çıktısı senkron (hızlıdır)
|
||
Loki çıktısı, 500 mesajlık bir arabellekle kuyruğa alınır
|
||
Arka plan iş parçacığı, Loki iletimini yönetir
|
||
Ana uygulama kodunun engellenmesi olmaz
|
||
|
||
```python
|
||
import asyncio
|
||
import logging
|
||
|
||
async def async_operation():
|
||
logger = logging.getLogger(__name__)
|
||
# Logging is thread-safe and won't block async operations
|
||
logger.info(f"Starting async operation in task: {asyncio.current_task().get_name()}")
|
||
```
|
||
|
||
## Loki Entegrasyonu
|
||
|
||
### Mimari
|
||
|
||
Günlük sistemi, engellemeyen Loki entegrasyonu için Python'un yerleşik `QueueHandler` ve `QueueListener` özelliklerini kullanır:
|
||
|
||
1. **QueueHandler**: Günlükler, 500 mesajlık bir kuyruğa (engellemesiz) yerleştirilir.
|
||
2. **Arka Plan İş Parçacığı**: QueueListener, günlükleri Loki'ye asenkron olarak gönderir.
|
||
3. **Usulüne Uygun Bozulma**: Loki kullanılamıyorsa, konsol günlüğü devam eder.
|
||
|
||
### Otomatik Etiketler
|
||
|
||
Loki'ye gönderilen her günlük şunları içerir:
|
||
`processor`: İşlemci kimliği (örneğin, `config-svc`, `text-completion`, `embeddings`)
|
||
`severity`: Günlük seviyesi (DEBUG, INFO, vb.)
|
||
`logger`: Modül adı (örneğin, `trustgraph.gateway.service`, `trustgraph.agent.react.service`)
|
||
|
||
### Özel Etiketler
|
||
|
||
Özel etiketleri `extra` parametresi aracılığıyla ekleyin:
|
||
|
||
```python
|
||
logger.info("User action", extra={
|
||
'tags': {
|
||
'user_id': user_id,
|
||
'action': 'document_upload',
|
||
'collection': collection_name
|
||
}
|
||
})
|
||
```
|
||
|
||
### Loki'de Logları Sorgulama
|
||
|
||
```logql
|
||
# All logs from a specific processor (recommended - matches Prometheus metrics)
|
||
{processor="config-svc"}
|
||
{processor="text-completion"}
|
||
{processor="embeddings"}
|
||
|
||
# Error logs from a specific processor
|
||
{processor="config-svc", severity="ERROR"}
|
||
|
||
# Error logs from all processors
|
||
{severity="ERROR"}
|
||
|
||
# Logs from a specific processor with text filter
|
||
{processor="text-completion"} |= "Processing"
|
||
|
||
# All logs from API gateway
|
||
{processor="api-gateway"}
|
||
|
||
# Logs from processors matching pattern
|
||
{processor=~".*-completion"}
|
||
|
||
# Logs with custom tags
|
||
{processor="api-gateway"} | json | user_id="12345"
|
||
```
|
||
|
||
### Zarif Bozulma
|
||
|
||
Eğer Loki kullanılamıyorsa veya `python-logging-loki` yüklü değilse:
|
||
Uyarı mesajı konsola yazdırılır
|
||
Konsol kaydı normal şekilde devam eder
|
||
Uygulama çalışmaya devam eder
|
||
Loki bağlantısı için tekrar deneme mantığı yoktur (hızlı bir şekilde başarısız olun, zarif bir şekilde bozulun)
|
||
|
||
## Test
|
||
|
||
Testler sırasında, farklı bir kayıt yapılandırması kullanmayı düşünün:
|
||
|
||
```python
|
||
# In test setup
|
||
import logging
|
||
|
||
# Reduce noise during tests
|
||
logging.getLogger().setLevel(logging.WARNING)
|
||
|
||
# Or disable Loki for tests
|
||
setup_logging({'log_level': 'WARNING', 'loki_enabled': False})
|
||
```
|
||
|
||
## İzleme Entegrasyonu
|
||
|
||
### Standart Format
|
||
Tüm günlükler tutarlı bir formata sahiptir:
|
||
```
|
||
2025-01-09 10:30:45,123 - trustgraph.gateway.service - INFO - Request processed
|
||
```
|
||
|
||
Biçim öğeleri:
|
||
Zaman damgası (milisaniyelerle birlikte ISO formatı)
|
||
Kayıt yöneticisi adı (modül yolu)
|
||
Kayıt düzeyi
|
||
Mesaj
|
||
|
||
### İzleme için Loki Sorguları
|
||
|
||
Yaygın izleme sorguları:
|
||
|
||
```logql
|
||
# Error rate by processor
|
||
rate({severity="ERROR"}[5m]) by (processor)
|
||
|
||
# Top error-producing processors
|
||
topk(5, count_over_time({severity="ERROR"}[1h]) by (processor))
|
||
|
||
# Recent errors with processor name
|
||
{severity="ERROR"} | line_format "{{.processor}}: {{.message}}"
|
||
|
||
# All agent processors
|
||
{processor=~".*agent.*"} |= "exception"
|
||
|
||
# Specific processor error count
|
||
count_over_time({processor="config-svc", severity="ERROR"}[1h])
|
||
```
|
||
|
||
## Güvenlik Hususları
|
||
|
||
**Hassas bilgileri asla kaydetmeyin** (şifreler, API anahtarları, kişisel veriler, token'lar)
|
||
**Kayıt işleminden önce kullanıcı girişini temizleyin**
|
||
**Hassas alanlar için yer tutucular kullanın**: `user_id=****1234`
|
||
**Loki kimlik doğrulaması**: Güvenli dağıtımlar için `--loki-username` ve `--loki-password`'i kullanın
|
||
**Güvenli taşıma**: Üretimde Loki URL'si için HTTPS kullanın: `https://loki.prod:3100/loki/api/v1/push`
|
||
|
||
## Bağımlılıklar
|
||
|
||
Merkezi günlük kaydı modülü şunları gerektirir:
|
||
`python-logging-loki` - Loki entegrasyonu için (isteğe bağlı, eksikse sorunsuz bir şekilde çalışır)
|
||
|
||
Zaten `trustgraph-base/pyproject.toml` ve `requirements.txt` içinde bulunmaktadır.
|
||
|
||
## Geçiş Yolu
|
||
|
||
Mevcut kod için:
|
||
|
||
1. **AsyncProcessor kullanan hizmetler**: Herhangi bir değişiklik gerekmez, Loki desteği otomatik olarak sağlanır
|
||
2. **AsyncProcessor kullanmayan hizmetler** (api-gateway, mcp-server): Zaten güncellenmiştir
|
||
3. **CLI araçları**: Kapsam dışındadır - print() veya basit günlük kaydını kullanmaya devam edin
|
||
|
||
### print()'ten günlük kaydına:
|
||
```python
|
||
# Before
|
||
print(f"Processing document {doc_id}")
|
||
|
||
# After
|
||
logger = logging.getLogger(__name__)
|
||
logger.info(f"Processing document {doc_id}")
|
||
```
|
||
|
||
## Yapılandırma Özeti
|
||
|
||
| Argüman | Varsayılan Değer | Ortam Değişkeni | Açıklama |
|
||
|----------|---------|---------------------|-------------|
|
||
| `--log-level` | `INFO` | - | Konsol ve Loki log seviyesi |
|
||
| `--loki-enabled` | `True` | - | Loki log kaydını etkinleştir |
|
||
| `--loki-url` | `http://loki:3100/loki/api/v1/push` | `LOKI_URL` | Loki push endpoint'i |
|
||
| `--loki-username` | `None` | `LOKI_USERNAME` | Loki kimlik doğrulama kullanıcı adı |
|
||
| `--loki-password` | `None` | `LOKI_PASSWORD` | Loki kimlik doğrulama parolası |
|