2026-04-10 23:20:41 -04:00
---
layout: default
title: "TrustGraph Kayı t (Log) Stratejisi"
parent: "Turkish (Beta)"
---
2026-04-11 01:08:44 +00:00
# TrustGraph Kayı t (Log) Stratejisi
2026-04-10 23:20:41 -04:00
> **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.
2026-04-11 01:08:44 +00:00
## 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ı |