Loglama
Mayros iki yerde log tutar:
- Ağ Geçidi tarafından yazılan Dosya logları (JSON satırları).
- Terminallerde ve Kontrol Arayüzünde gösterilen Konsol çıktısı.
Bu sayfa logların nerede olduğunu, nasıl okunacağını ve log seviyelerinin ve formatlarının nasıl yapılandırılacağını açıklar.
Loglar nerede
Varsayılan olarak, Ağ Geçidi şu konumda dönen bir log dosyası yazar:
/tmp/mayros/mayros-YYYY-MM-DD.log
Tarih, ağ geçidi ana bilgisayarının yerel saat dilimini kullanır.
Bunu ~/.mayros/mayros.json içinde geçersiz kılabilirsiniz:
json{ "logging": { "file": "/path/to/mayros.log" } }
Loglar nasıl okunur
CLI: canlı tail (önerilir)
RPC aracılığıyla ağ geçidi log dosyasını tail etmek için CLI'yi kullanın:
bashmayros logs --follow
Çıktı modları:
- TTY oturumları: güzel, renklendirilmiş, yapılandırılmış log satırları.
- TTY olmayan oturumlar: düz metin.
--json: satır sınırlı JSON (satır başına bir log olayı).--plain: TTY oturumlarında düz metni zorla.--no-color: ANSI renklerini devre dışı bırak.
JSON modunda, CLI type etiketli nesneler yayar:
meta: akış meta verileri (dosya, imleç, boyut)log: ayrıştırılmış log girişinotice: kesme / döndürme ipuçlarıraw: ayrıştırılmamış log satırı
Ağ Geçidine erişilemiyorsa, CLI şunu çalıştırmak için kısa bir ipucu yazdırır:
bashmayros doctor
Kontrol Arayüzü (web)
Kontrol Arayüzünün Logs sekmesi, logs.tail kullanarak aynı dosyayı tail eder.
Nasıl açılacağı için bkz. /web/control-ui.
Yalnızca kanal logları
Kanal etkinliğini filtrelemek için (WhatsApp/Telegram/vb.), şunu kullanın:
bashmayros channels logs --channel whatsapp
Log formatları
Dosya logları (JSONL)
Log dosyasındaki her satır bir JSON nesnesidir. CLI ve Kontrol Arayüzü, yapılandırılmış çıktıyı (zaman, seviye, alt sistem, mesaj) oluşturmak için bu girişleri ayrıştırır.
Konsol çıktısı
Konsol logları TTY farkındadır ve okunabilirlik için biçimlendirilir:
- Alt sistem ön ekleri (örn.
gateway/channels/whatsapp) - Seviye renklendirme (info/warn/error)
- İsteğe bağlı kompakt veya JSON modu
Konsol biçimlendirmesi logging.consoleStyle tarafından kontrol edilir.
Loglamayı yapılandırma
Tüm loglama yapılandırması ~/.mayros/mayros.json içinde logging altında bulunur.
json{ "logging": { "level": "info", "file": "/tmp/mayros/mayros-YYYY-MM-DD.log", "consoleLevel": "info", "consoleStyle": "pretty", "redactSensitive": "tools", "redactPatterns": ["sk-.*"] } }
Log seviyeleri
logging.level: dosya logları (JSONL) seviyesi.logging.consoleLevel: konsol ayrıntı seviyesi.
--verbose yalnızca konsol çıktısını etkiler; dosya log seviyelerini değiştirmez.
Konsol stilleri
logging.consoleStyle:
pretty: insan dostu, renkli, zaman damgalı.compact: daha sıkı çıktı (uzun oturumlar için en iyisi).json: satır başına JSON (log işlemciler için).
Redaksiyon
Araç özetleri, konsola ulaşmadan önce hassas belirteçleri redakte edebilir:
logging.redactSensitive:off|tools(varsayılan:tools)logging.redactPatterns: varsayılan seti geçersiz kılmak için regex dizelerinin listesi
Redaksiyon yalnızca konsol çıktısını etkiler ve dosya loglarını değiştirmez.
Tanılama + OpenTelemetry
Tanılama, model çalıştırmaları ve mesaj akışı telemetrisi (webhooklar, kuyruklama, oturum durumu) için yapılandırılmış, makine tarafından okunabilir olaylardır. Logların yerini almazlar; metrikleri, izlemeleri ve diğer ihracatçıları beslemek için mevcutturlar.
Tanılama olayları süreç içinde yayılır, ancak ihracatçılar yalnızca tanılama + ihracatçı eklentisi etkinleştirildiğinde eklenir.
OpenTelemetry vs OTLP
- OpenTelemetry (OTel): izlemeler, metrikler ve loglar için veri modeli + SDK'lar.
- OTLP: OTel verilerini bir toplayıcı/arka uca aktarmak için kullanılan tel protokolü.
- Mayros bugün OTLP/HTTP (protobuf) aracılığıyla ihraç eder.
İhraç edilen sinyaller
- Metrikler: sayaçlar + histogramlar (belirteç kullanımı, mesaj akışı, kuyruklama).
- İzlemeler: model kullanımı + webhook/mesaj işleme için spanlar.
- Loglar:
diagnostics.otel.logsetkinleştirildiğinde OTLP üzerinden ihraç edilir. Log hacmi yüksek olabilir;logging.levelve ihracatçı filtrelerini aklınızda bulundurun.
Tanılama olay kataloğu
Model kullanımı:
model.usage: belirteçler, maliyet, süre, bağlam, sağlayıcı/model/kanal, oturum kimlikleri.
Mesaj akışı:
webhook.received: kanal başına webhook girişi.webhook.processed: webhook işlendi + süre.webhook.error: webhook işleyici hataları.message.queued: işleme için kuyruğa alınan mesaj.message.processed: sonuç + süre + isteğe bağlı hata.
Kuyruk + oturum:
queue.lane.enqueue: komut kuyruğu şerit kuyruğa alma + derinlik.queue.lane.dequeue: komut kuyruğu şerit kuyruktan çıkarma + bekleme süresi.session.state: oturum durumu geçişi + neden.session.stuck: oturum takılma uyarısı + yaş.run.attempt: çalıştırma yeniden deneme/deneme meta verileri.diagnostic.heartbeat: toplam sayaçlar (webhooks/queue/session).
Tanılamayı etkinleştir (ihracatçı yok)
Tanılama olaylarının eklentiler veya özel havuzlar için kullanılabilir olmasını istiyorsanız bunu kullanın:
json{ "diagnostics": { "enabled": true } }
Tanılama bayrakları (hedefli loglar)
logging.level'i yükseltmeden ekstra, hedefli hata ayıklama loglarını açmak için bayrakları kullanın.
Bayraklar büyük/küçük harf duyarlı değildir ve joker karakterleri destekler (örn. telegram.* veya *).
json{ "diagnostics": { "flags": ["telegram.http"] } }
Env geçersiz kılma (tek seferlik):
MAYROS_DIAGNOSTICS=telegram.http,telegram.payload
Notlar:
- Bayrak logları standart log dosyasına gider (
logging.fileile aynı). - Çıktı hala
logging.redactSensitive'e göre redakte edilir. - Tam kılavuz: /diagnostics/flags.
OpenTelemetry'ye ihraç et
Tanılama, diagnostics-otel eklentisi (OTLP/HTTP) aracılığıyla ihraç edilebilir. Bu, OTLP/HTTP'yi kabul eden herhangi bir OpenTelemetry toplayıcısı/arka ucuyla çalışır.
json{ "plugins": { "allow": ["diagnostics-otel"], "entries": { "diagnostics-otel": { "enabled": true } } }, "diagnostics": { "enabled": true, "otel": { "enabled": true, "endpoint": "http://otel-collector:4318", "protocol": "http/protobuf", "serviceName": "mayros-gateway", "traces": true, "metrics": true, "logs": true, "sampleRate": 0.2, "flushIntervalMs": 60000 } } }
Notlar:
- Eklentiyi
mayros plugins enable diagnostics-otelile de etkinleştirebilirsiniz. protocolşu anda yalnızcahttp/protobuf'u destekler.grpcgöz ardı edilir.- Metrikler belirteç kullanımı, maliyet, bağlam boyutu, çalıştırma süresi ve mesaj akışı sayaçlarını/histogramlarını (webhooklar, kuyruklama, oturum durumu, kuyruk derinliği/bekleme) içerir.
- İzlemeler/metrikler
traces/metricsile değiştirilebilir (varsayılan: açık). İzlemeler, etkinleştirildiğinde model kullanım spanlarını ve webhook/mesaj işleme spanlarını içerir. - Toplayıcınız kimlik doğrulama gerektirdiğinde
headersayarlayın. - Desteklenen ortam değişkenleri:
OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_SERVICE_NAME,OTEL_EXPORTER_OTLP_PROTOCOL.
İhraç edilen metrikler (isimler + tipler)
Model kullanımı:
mayros.tokens(counter, attrs:mayros.token,mayros.channel,mayros.provider,mayros.model)mayros.cost.usd(counter, attrs:mayros.channel,mayros.provider,mayros.model)mayros.run.duration_ms(histogram, attrs:mayros.channel,mayros.provider,mayros.model)mayros.context.tokens(histogram, attrs:mayros.context,mayros.channel,mayros.provider,mayros.model)
Mesaj akışı:
mayros.webhook.received(counter, attrs:mayros.channel,mayros.webhook)mayros.webhook.error(counter, attrs:mayros.channel,mayros.webhook)mayros.webhook.duration_ms(histogram, attrs:mayros.channel,mayros.webhook)mayros.message.queued(counter, attrs:mayros.channel,mayros.source)mayros.message.processed(counter, attrs:mayros.channel,mayros.outcome)mayros.message.duration_ms(histogram, attrs:mayros.channel,mayros.outcome)
Kuyruklar + oturumlar:
mayros.queue.lane.enqueue(counter, attrs:mayros.lane)mayros.queue.lane.dequeue(counter, attrs:mayros.lane)mayros.queue.depth(histogram, attrs:mayros.laneveyamayros.channel=heartbeat)mayros.queue.wait_ms(histogram, attrs:mayros.lane)mayros.session.state(counter, attrs:mayros.state,mayros.reason)mayros.session.stuck(counter, attrs:mayros.state)mayros.session.stuck_age_ms(histogram, attrs:mayros.state)mayros.run.attempt(counter, attrs:mayros.attempt)
İhraç edilen spanlar (isimler + ana özellikler)
mayros.model.usagemayros.channel,mayros.provider,mayros.modelmayros.sessionKey,mayros.sessionIdmayros.tokens.*(input/output/cache_read/cache_write/total)
mayros.webhook.processedmayros.channel,mayros.webhook,mayros.chatId
mayros.webhook.errormayros.channel,mayros.webhook,mayros.chatId,mayros.error
mayros.message.processedmayros.channel,mayros.outcome,mayros.chatId,mayros.messageId,mayros.sessionKey,mayros.sessionId,mayros.reason
mayros.session.stuckmayros.state,mayros.ageMs,mayros.queueDepth,mayros.sessionKey,mayros.sessionId
Örnekleme + temizleme
- İzleme örneklemesi:
diagnostics.otel.sampleRate(0.0–1.0, yalnızca kök spanlar). - Metrik ihraç aralığı:
diagnostics.otel.flushIntervalMs(min 1000ms).
Protokol notları
- OTLP/HTTP uç noktaları
diagnostics.otel.endpointveyaOTEL_EXPORTER_OTLP_ENDPOINTaracılığıyla ayarlanabilir. - Uç nokta zaten
/v1/tracesveya/v1/metricsiçeriyorsa, olduğu gibi kullanılır. - Uç nokta zaten
/v1/logsiçeriyorsa, loglar için olduğu gibi kullanılır. diagnostics.otel.logs, ana logger çıktısı için OTLP log ihracını etkinleştirir.
Log ihraç davranışı
- OTLP logları,
logging.file'a yazılan aynı yapılandırılmış kayıtları kullanır. logging.level'e (dosya log seviyesi) saygı gösterir. Konsol redaksiyonu, OTLP logları için geçerli değildir.- Yüksek hacimli kurulumlar, OTLP toplayıcı örnekleme/filtrelemeyi tercih etmelidir.
Sorun giderme ipuçları
- Ağ Geçidine erişilemiyor mu? Önce
mayros doctorçalıştırın. - Loglar boş mu? Ağ Geçidinin çalıştığını ve
logging.file'daki dosya yoluna yazdığını kontrol edin. - Daha fazla ayrıntıya mı ihtiyacınız var?
logging.level'idebugveyatraceolarak ayarlayın ve yeniden deneyin.