İçeriğe geç
ivralo
Bölümler

Dokümantasyon / Incident'lar

Incident incelemek

ivralo incident ile bir inceleme nasıl çalıştırılır: ne girdi aldığı, çıktısının nereye yazıldığı, çıkış kodlarının ne anlama geldiği ve bir raporun onu yazan çalıştırmaya kadar nasıl geri izleneceği.

Başlamadan önce

ivralo incident, incident'ın yaşandığı servisin repo'sunun içinde çalışır. Bu bir git repo'su olmalıdır, çünkü bir incelemenin ortaya koyduklarının yarısı deploy edilen kodla ilgilidir.

Kanıtları repo'nun içinde bir klasöre kopyalayın (varsayılanı incident/), sonra komutu repo'nun kökünden çalıştırın. Bir bundle'a neler konabileceği ve nasıl okunduğu Kanıt bundle'ı sayfasında anlatılıyor.

ivralo bir klasörde ilk kez çalıştığında, her komutta olduğu gibi, klasöre güvenip güvenmediğinizi sorar. Evet demediğiniz sürece repo'nun kendi tanımları, örneğin dil sunucusu ya da # Evidence kökleri, kullanılmaz.

Komut

ivralo incident [BUNDLE] [--format json] [--hosted] [--session ID]
Argüman ya da flagNe yapar
BUNDLEKanıt klasörü, çalışma alanına göreli. Varsayılanı incident/.
--format textVarsayılan: stdout'a raporun yolunu ve rapor satırını basar.
--format jsonstdout'a raporun nesnesini path, session_id ve team_run_id ile birlikte basar. Çalıştırmanın izi stderr'e gider.
--hostedBu çalıştırma için kanıtların makine dışındaki bir model tarafından okunmasına izin verir. Maskeleme de gerekir; bkz. Gizlilik ve maskeleme.
--session ID, -s IDKullanılacak oturum. shared paylaşılan oturuma katılır; başka herhangi bir id o oturumdan devam eder.

Düz bir çalıştırma iki satır basar:

.ivralo/incidents/incident-20261012-101500/report.md
DIAGNOSED - class code

İkinci satır rapor satırıdır: sonucu ve, sonuç ESCALATED değilse, sınıfı gösterir. İkisi de Raporu okumak sayfasında açıklanıyor.

Çalıştırma sırasında neler olur

  1. Kontroller. ivralo işe başlamadan önce çalışma alanını, bundle'ı ve modeli kontrol eder. Reddedilen bir bundle ya da izin verilmemiş barındırılan bir model işi burada durdurur; nedeni stderr'de tek cümleyle yazılır.
  2. Tek kişilik ekip. Ekipte yalnızca Investigator vardır; başında, isteği ona iletmekten başka bir şey yapmayan bir lider bulunur. Liderin başka hiçbir yetkisi yoktur.
  3. Digest. Investigator'ın ilk çağrısı bundle'ı okur. Digest'i kod hesaplar ve digest.json'ı yazar.
  4. Yargı. Investigator digest'i ve digest'in gösterdiği kodu okur, sonra raporu tek bir araçla kaydeder; bu araç her referansı kontrol eder.
  5. Rapor. report.md ve report.json, digest'in yanına, .ivralo/incidents/<id>/ altına yazılır.

Investigator'ın yalnızca okuma yetkileri ve o tek kayıt aracı vardır. Dosya düzenleyemez, Python ya da shell komutu çalıştıramaz, veritabanı sorgulayamaz, dışarıya hiçbir şey gönderemez. Her çalıştırmada en fazla 40 araç çağrısı yapabilir.

Terminalde ve pipe'ta sorular

Terminalde Investigator, kanıtlardan çıkaramadığı bir şeyi size sorabilir; örneğin hangi deploy'u kastettiğinizi. Soru stderr'de görünür, cevabınızı your answer > istemine yazarsınız. stdout yalnızca sonuca ayrılmış olarak kalır.

Pipe'ta ya da bir zamanlayıcı altında cevap verecek kimse yoktur. Ekip başında kimse yokmuş gibi kurulur ve soru reddedilir; Investigator elindeki bilgiyle kaydeder.

Hiçbir şey kaydedilmezse

Ne kayıt yapıp ne de reddedip duran bir Investigator'a bir kez daha sorulur; ikinci kez asla. İkinci istek onun son sözlerini alıntılar ve neden yeniden sorulduğunu açıklar.

Modelin cevabı çıktı sınırında kesildiyse ikinci istek iki katı payla çalışır. Sınır IVRALO_MAX_TOKENS'tır, Ollama'da IVRALO_NUM_PREDICT; değerini ivralo doctor gösterir. Model endpoint'i hata verdiyse, çalıştırmayı siz durdurduysanız ya da çalıştırma bir retle bittiyse yeniden sorulmaz; ama cevabın ortasında kopan bir model stream'i için yeniden sorulur.

Çıkış kodları

KodAnlamı
0Rapor yazıldı.
1Çalıştırma rapor yazılmadan bitti. Nedeni stderr'de yazar. --format json ile stdout yine tek bir nesne içerir: "outcome": null ve bir reason.
2İnceleme başlayamadı: repo değil, bundle reddedildi, --hosted olmadan barındırılan model seçildi, veritabanına ulaşılamıyor ya da --format geçersiz.

Oturumlar

Her inceleme kendi oturumunda çalışır; böylece art arda çalışan incident'lar birbirleriyle hiçbir şey paylaşmaz. Id, bundle'ın adından ve yerel saatten oluşur, sonuna dört rastgele hex basamak eklenir:

incident-20261015-101500-3fa9              varsayılan incident/ bundle'ı
incident-night-of-the-12th-20261015-101500-3fa9   başka bir bundle

Rapor klasörünün adı bundle'ın yolundan ve aynı zaman damgasından oluşur, hex basamaklar olmadan: incident/ için incident-20261015-101500. İki damga da makinenin yerel saatini, yani ivralo runs'ın gösterdiği saati kullanır. Raporun içindeki zaman damgaları UTC olarak kalır.

--session shared ise paylaşılan oturuma katılır. Bir oturumda aynı bundle için aynı içerikle yapılan ikinci kayıt reddedilir ve ilk raporun satırı ile yolu verilir. Bundle değiştiyse ya da yeni bir oturum açıldıysa yeni bir inceleme başlar.

Sonrasında

Metin modunda oturum id'si stderr'e basılır; yanında olduğu gibi çalıştırabileceğiniz üç komut da vardır:

ivralo trace -s incident-20261015-101500-3fa9
ivralo why -s incident-20261015-101500-3fa9 last "KeyError: 'coupon'"
ivralo runs -s incident-20261015-101500-3fa9
  • ivralo trace -s <id> çalıştırmayı gösterir: her araç çağrısını ve sonucunu.
  • ivralo why -s <id> last "<iddia>" raporun bir cümlesini dayandığı bundle dosyasına ve satırına kadar takip eder. İddia tamamen izlenebildiyse 0, izlenemediyse 1, çalıştırma okunamadıysa 2 ile çıkar. Ayrıntılar ivralo why sayfasında.
  • ivralo runs -s <id> oturumdaki çalıştırmaları listeler.

Bu komutlar -s verilmezse paylaşılan oturuma bakar; bu yüzden incident'ın oturumunu her zaman adıyla verin. ivralo sessions da bu oturumu listeler, ivralo --session <id> ise konuşmaya o oturumda devam eder.

Oturumun içinden

Bir ivralo oturumunda /incident [bundle] aynı incelemeyi bir tur olarak çalıştırır: başlamadan önce aynı kontroller yapılır, Investigator'a tek bir yönlendirme isteği gider, turun son satırında raporun yolu ve rapor satırı görünür. Başka bir çalıştırma sürerken bu komut reddedilir.

--hosted yalnızca komut satırında var. Oturumun ekibi, oturum başladığı andaki IVRALO_INCIDENT_HOSTED_MODEL değeriyle kurulur; oturum içinde barındırılan bir modele izin vermek için bu değişkeni ayarlayıp oturumu yeniden başlatın.

Yerel API'den

Yerel API'deki POST /incident aynı incelemeyi çalıştırır ve ilerlemeyi stream olarak döner. Body'de bundle, hosted, session ve attended alanlarını alır; attended true iken (varsayılan) Investigator'ın sorduğu bir soru, istemcinin cevapladığı bir onay olarak gelir. Alertmanager ve PagerDuty'den gelen alarmlar da incelemeyi aynı yoldan başlatır; bkz. Alarm alımı.