Spitfire

Sürüm: 0.21.0Bu dokümantasyon Spitfire 0.21.0 içindir.

Sorun giderme, güncelleme ve yedekleme

Bir şey ters gittiğinde bu sayfayı baştan sona sırayla izleyin. Önce sorunun ne olduğunu (hata kodu, sistem olayları, log'lar), sonra sık karşılaşılan sorunlar tablosundaki çözümü bulursunuz. Çözemezseniz destek ekibine neyi göndermeniz gerektiği en sonda yazar.

Sorun olduğunda ilk 5 adım

  1. Ekranda bir Hata kodu görüyorsanız kopyalayın (aşağıya bakın). Destek ile her konuşmada bu kod en değerli bilgidir.
  2. Kurulum yöneticisiyseniz Sistem olayları sayfasını açın ve aynı saatteki uyarı ve hataları okuyun.
  3. Sorun bir runner'la ilgiliyse Runner'lar sayfasında durumuna bakın.
  4. Aşağıdaki sık karşılaşılan sorunlar tablosunda belirtiyi arayın.
  5. Hâlâ çözülmediyse Destek paketi indir ile paketi alın ve destek ekibine e-posta ile gönderin.

Hata kodları ve request id

Arayüzde bir sunucu hatası (5xx) olduğunda mesajın altında Hata kodu görünür, yanında bir kopyala düğmesiyle. Bu kod isteğin X-Request-ID'sidir ve:

  • o isteğin controller log'undaki her satırında request_id olarak,
  • Sistem olayları sayfasındaki olayında Request id sütununda

da yer alır. Yani tek bir kodla o isteğin başına ne geldiğini uçtan uca bulabilirsiniz.

Adım adım:

  1. Hata mesajındaki Hata kodu'nun yanındaki kopyala düğmesine basın.
  2. Sistem olayları sayfasında arama kutusuna (mesaj ya da request id) yapıştırın ve Filtrele'ye basın.
  3. Olayın satırını açın: mesaj, kaynak ve varsa Stack trace görünür.
  4. Log'da aramak için: grep <hata kodu> controller.log (log'un yeri aşağıda).
  5. Desteğe yazarken bu kodu mutlaka ekleyin.
Not

Kullanıcılar Sistem olayları sayfasını göremez (yalnız kurulum yöneticileri). Bir kullanıcıysanız hata kodunu yöneticinize iletin.

Sistem olayları

Sistem olayları (kurulum yöneticileri, sol menüde Altyapı → Sistem olayları) controller'ın fark ettiklerini listeler: panic'ler (yakalanmış, stack trace'leriyle), sunucu hataları (5xx), runner'ların bağlanması ve kopması, başarısız koşular, lisans, güncelleme denetimi, veritabanı, SSO/LDAP ve bildirim kanalı hataları. Olaylar 30 gün, en çok 20 000 tane tutulur.

Sistem olayları sayfasıSistem olayları sayfası

Sayfanın üstü:

  • Yakalanan panic: N — controller'ın kendi hatalarından yakalayıp kurtardığı panic sayısı. Sıfırdan büyükse destek paketini mutlaka gönderin.
  • "Controller log'u veri birimine de yazılıyor (döndürülerek, 20 MiB × 5)." ya da "Controller log'u yalnızca stdout'a yazılıyor (SPITFIRE_LOG_FILE yok): container yeniden oluşturulunca kaybolur." — log'un kalıcı olup olmadığını söyler.
  • "N olay veritabanı yetişemediği için kaydedilemedi." — veritabanı aşırı yüklüyse görünür.

Filtreleme, adım adım:

  1. Başlangıç ve Bitiş ile zaman aralığını sorunun olduğu saatlere daraltın.
  2. Seviye: Tümü, Uyarı ve hatalar ya da Yalnız hatalar.
  3. Kaynak: Panic, API (5xx), Runner, Koşu, Lisans, Güncelleme denetimi, Veritabanı, SSO / LDAP, Bildirim kanalları, Entegrasyonlar, Controller, Zamanlayıcı, Sentetik izleme, Mobil bildirim ya da Tüm kaynaklar.
  4. Ara: mesajdan bir parça ya da bir request id.
  5. Filtrele'ye basın; Filtreleri temizle her şeyi sıfırlar.

Listede her satırda Zaman, Seviye (bilgi, uyarı, hata), Kaynak, Olay ve Request id vardır. Aynı olay bir dakika içinde tekrarladıysa yanında kaç kez olduğu yazar. Ayrıntılar ve Stack trace satır açılınca görünür.

Sayfanın altında Bellekteki son uyarı ve hatalar controller'ın bu çalışmasında log'a düşen son uyarı ve hata satırlarını, en yenisi üstte ve gizli değerleri temizlenmiş olarak gösterir. Controller yeniden başlayınca sıfırlanır; bu yüzden yeniden başlatmadan önce bakın.

Destek paketi

Destek paketi, sorunu anlamak için gerekenleri tek bir zip'te toplar. Spitfire bu paketi hiçbir yere kendiliğinden göndermez: indirirsiniz, isterseniz içine bakarsınız ve destek ekibine e-posta ile siz iletirsiniz.

Arayüzden

  1. Sistem olayları sayfasında sağ üstteki Destek paketi indir'e basın.
  2. Pencere pakete girecek Dosya'ları ve Boyut'larını gösterir (zip sıkıştırıldığı için genelde çok daha küçüktür).
  3. Pakete konmayanlar bölümünü okuyun.
  4. İndir'e basın.

Destek paketi penceresiDestek paketi penceresi

Arayüz açılmıyorsa (komut satırından)

Controller sürekli yeniden başlıyorsa ya da kimse giremiyorsa, kurulum dizininde (varsayılan ~/spitfire):

bash
./install.sh --support-bundle                 # Docker (bu dizindeki kurulum)
./install.sh kubernetes --support-bundle      # Kubernetes (--namespace / --context)

Windows'ta (Docker Desktop), PowerShell'de:

powershell
.\install.ps1 -SupportBundle

Kurulum betikleri container log'larını (docker compose logs / kubectl logs, çökme sonrası önceki container'ınkini de), docker compose ps / kubectl get pods çıktısını ve gizli değerleri silinmiş ayarları toplar ve controller'a verir; controller bunları aynı zip'in cli/ klasörüne ekler. Controller bunu yapamazsa zip yalnız betiğin topladıklarını içerir. Betik dosyanın yerini yazar; dosya o makinede kalır.

Pakette ne var

Dosya İçerik
README.txt paketin açıklaması
system.json sürüm ve derleme, kurulum türü, işletim sistemi/mimari, Go sürümü, çalışma süresi, veritabanı ve migration sürümü
config/env.txt, config/settings.json SPITFIRE_ değişkenleri; saklama süreleri, log, güncelleme denetimi, SSO ve SMTP tanımlı mı
license.json durum, plan, düzenleyen, bitiş, limitler, özellikler, anahtar kimliği
events.json son 30 günün sistem olayları
counts.json test, koşu, runner, kullanıcı sayıları
failed-runs.json son 20 başarısız koşu: kimlik, test kimliği, zaman, hata, runner'lar
runners.json runner listesi
controller/controller.log, controller/recent.log controller log'unun son ~20 MiB'ı ve bellekteki son satırlar
runners/<id>.log bağlı her runner'ın son log'u
cli/ kurulum betiğinin topladıkları (yalnız komut satırından)

Pakete konmayanlar: test tanımları, istek/yanıt gövdeleri, veri dosyaları, bağlantı ayrıntıları, kullanıcı adları ve e-postaları, lisans anahtarı ve imzası. Zararsız ayarların izin listesinde olmayan her ayar [redacted] olur. Log'larda gizli değerler ve kimlik bilgisine benzeyen her şey (URL'deki parola, bearer ve Spitfire token'ları, password=, client_secret=, sohbet webhook adresleri) [redacted], e-posta adresleri [e-mail] olur.

Log'lar

Nerede

Kurulum Controller log'u Runner log'u
Docker docker compose -p spitfire -f deploy/docker/docker-compose.yml logs controller (kurulum dizininde) aynı komutta runner
Kubernetes kubectl -n spitfire logs deploy/spitfire-controller kubectl -n spitfire logs deploy/spitfire-runner
Uzak runner (Docker) — runner sunucusunda docker ps ile konteyneri bulun, docker logs <konteyner>
Runner (systemd, Docker'sız) — journalctl -u 'spitfire-runner@*'
Runner (Windows hizmeti) — %ProgramData%\Spitfire\logs

Controller log'u ayrıca veri birimindeki bir dosyaya da yazılır ve container yeniden oluşturulunca kaybolmaz (Docker: logs volume'ü; Kubernetes: container yeniden başlamasından sağ çıkan ama pod'la giden bir emptyDir):

Değişken Varsayılan Anlamı
SPITFIRE_LOG_FILE /var/lib/spitfire/logs/controller.log log dosyası; off ile kapalı
SPITFIRE_LOG_MAX_SIZE_MB 20 dosya bu boyutta döndürülür
SPITFIRE_LOG_MAX_FILES 5 tutulan dosya sayısı, güncel dosya dahil
SPITFIRE_LOG_LEVEL info debug, info ya da warn
SPITFIRE_LOG_FORMAT text text ya da json (log toplayıcılar için)

Canlı izlemek için (Docker):

bash
cd ~/spitfire
docker compose -p spitfire -f deploy/docker/docker-compose.yml logs -f --tail 200 controller

Nasıl okunur

Varsayılan text biçiminde her satır anahtar=değer çiftleridir:

text
time=2026-10-08T09:41:12.318+03:00 level=ERROR msg="…" request_id=4f1c…
  • level: INFO, WARN, ERROR. Önce ERROR satırlarına bakın.

  • msg: ne oldu.

  • request_id: arayüzdeki Hata kodu ile aynı; o isteğin tüm satırlarını bulmak için:

    bash
    docker compose -p spitfire -f deploy/docker/docker-compose.yml logs controller | grep 4f1c

Ayrıntı gerekiyorsa controller'da SPITFIRE_LOG_LEVEL=debug ayarlayıp yeniden başlatın; sorun çözülünce info'ya geri alın.

Sık karşılaşılan sorunlar

Runner çevrimdışı

Runner'lar sayfasında durumlar: Boşta, Koşuda, Boşaltılıyor, Çevrimdışı.

Runner'lar sayfasıRunner'lar sayfası

Belirti Neden Çözüm
Runner Çevrimdışı Runner süreci/konteyneri durmuş Runner sunucusunda konteynerin ya da hizmetin çalıştığını kontrol edin; log'una bakın.
Uzak runner hiç bağlanmıyor Runner'dan controller'ın gRPC portuna (Docker'da 8471) TCP kapalı Güvenlik duvarında runner → controller:8471 çıkışını açın. Runner dışarı doğru bağlanır; runner sunucusunda gelen port açmak gerekmez.
Runner log'unda "controller certificate does not match the pinned key" TLS pin uyuşmuyor: yanlış adres, araya giren TLS denetimi yapan bir proxy ya da controller anahtarı değişmiş Runner'lar sayfasındaki pini (sha256:…) olduğu gibi kullanın. Kurumsal CA sertifikanız varsa pin yerine --tls kullanın. TLS denetimi yapan proxy'yi 8471 için devre dışı bırakın.
Runner kuruluyor ama "bağlanamadı" Token iptal edilmiş ya da yanlış Runner'lar → Runner token'ları'ndan yeni token ve hazır komutu alın. İptal edilen token'la systemd runner çıkış kodu 3 ile durur ve yeniden başlatılmaz.
Runner sarı eski sürüm Runner controller'dan eski Güncelle'ye basın (Docker'sız runner'lar) ya da runner sunucusunda kurulum komutunu yeniden çalıştırın.
"Runner CPU sınırında: sonuçlar çarpık olabilir" Yük üreteci doydu Daha çok runner kullanın ya da yükü bölün; bu koşunun gecikmeleri runner'ın kendi kuyruğunu da içerir.
"Yeterli boşta runner yok…" Runner'lar başka koşuda Süren koşunun bitmesini bekleyin ya da runner ekleyin.

Lisans limitleri

Belirti Neden Çözüm
Koşu başlamıyor, 402 license_limit ve açık bir mesaj Planlanan VU, istek hızı, süre, runner ya da lokasyon lisansı aşıyor Mesajdaki limite bakın; yükü (--scale) azaltın ya da Lisans sayfasından lisansı yükseltin. Geride koşu kaydı kalmaz.
"Yeni koşu başlatmak için lisans anahtarı gerekiyor…" Anahtarsız 14 günlük süre bitti spitfire.tr/ucretsiz-anahtar'dan ücretsiz anahtar alıp Lisans sayfasına yapıştırın. Testler ve sonuçlar silinmez.
"Bu anahtarın etkinleştirme süresi doldu." Ücretli anahtar düzenlendikten sonra 30 gün içinde girilmedi Yeni anahtar için iletişime geçin.
"Lisans anahtarı geçersiz…" Anahtar eksik kopyalanmış ya da değiştirilmiş SPF1.… anahtarını tek parça halinde yeniden yapıştırın.
Zamanlama, kanal ya da izleme Duraklatıldı (lisans) Lisans daha azına izin veriyor En eskiler çalışır; fazlası saklanır. Lisansı yükseltin ya da fazlasını silin.
Kullanıcı giriş yapıyor ama hiçbir şey değiştiremiyor Etkin kullanıcı sayısı limitin üstünde Kullanıcıları azaltın ya da lisansı yükseltin.

Bağlantı ve ağ hataları

Belirti Neden Çözüm
"Sunucuya ulaşılamadı." Tarayıcı controller'a ulaşamıyor Adresi, VPN'i ve controller'ın ayakta olduğunu kontrol edin.
"Controller yeniden başlıyor; birazdan tekrar deneyin." Controller yeniden başlıyor ya da güncelleniyor Birkaç saniye bekleyin. Sürekli tekrarlıyorsa log'a ve destek paketine bakın.
"Test tanımındaki bir bağlantıya ulaşılamıyor." Kayıtlı bağlantının (DB, Kafka…) hedefine runner'lardan erişilemiyor Bağlantılar sayfasında bağlantıyı test edin; runner'ın o ağa erişimini kontrol edin.
"Hedef değişti: gizli değerleri … yeniden girin" Bağlantının adresi değişti Güvenlik gereği kayıtlı sırlar yeni sunucuya gönderilmez; parolayı yeniden girin.
Koşu bulgularında DNS ya da TLS hatası Runner'ın ağından hedef adres çözülemiyor ya da sertifika reddediliyor Runner sunucusunda DNS'i ve hedefin sertifikasını kontrol edin.
Giriş: "Çok fazla giriş denemesi…" Giriş sınırı (429) Belirtilen süre kadar bekleyin. Çok kullanıcı tek bir proxy/NAT arkasındaysa SPITFIRE_SIGNIN_BURST'ü artırın.
Denetim kaydında tüm istemciler aynı IP Spitfire genel adresli bir proxy'nin (bulut yük dengeleyici, Cloudflare) arkasında Proxy'yi SPITFIRE_TRUSTED_PROXIES ile (virgülle ayrılmış CIDR'ler) tanıtın.

Yazma koruması retleri

Veri değiştiren adımları (SQL/Mongo yazma, riskli Redis komutu, veri değiştirdiği işaretli HTTP isteği) olan bir test her yerde açık onay ister:

Nerede Belirti Çözüm
Web arayüzü "Bu test veriyi değiştiriyor; devam etmek için onaylayın." Çalıştır penceresindeki onay kutusunu işaretleyin ya da Ya da telefonumdan onaylayayım.
CLI / CI Exit code 2 Bilerek yapıyorsanız --confirm-writes ekleyin.
Zamanlama Durum başlamadı Zamanlama penceresindeki yazma onayını işaretleyin.
Sentetik izleme İzleme oluşturulmuyor ya da kapandı Bu adımların her kontrolde veri değiştirmesine izin veriyorum'u işaretleyin.
Karşılaştırmalı koşu Karşılaştırma başlatılamıyor Pencerede her ortam için ayrı onay kutusunu işaretleyin (CLI'da --confirm-writes iki ortamı da onaylar).
Telefon onayı "Telefondaki onay geçersiz…" Onay 10 dakikada dolar ve bir kez kullanılır; Yeniden iste.

Güncelleme sorunları

Belirti Neden Çözüm
Güncelleme kontrolü: Kontrol başarısız Controller spitfire.tr'ye ulaşamıyor Kurumsal proxy arkasındaysanız kurulum komutunu HTTPS_PROXY tanımlıyken yeniden çalıştırın (proxy controller'a aktarılır). İnternetsiz kurulumda SPITFIRE_UPDATE_CHECK=off ile kapatın ve sürüm notlarını spitfire.tr/surum-notlari'dan takip edin.
"Sürüm listesi alındı ama imzası doğrulanmadı" Liste yolda ya da sunucuda değiştirilmiş olabilir Bu listeye göre güncellemeyin; spitfire.tr/surum-notlari'dan kontrol edin ve bize bildirin. SPITFIRE_UPDATE_FEED ile ayna kullanıyorsanız releases.json.sig'in de kopyalandığından emin olun.
Güncellemeden sonra bir şey bozuldu Yeni sürümde bir sorun Geri alma ile önceki sürüme dönün ve destek paketini gönderin.
Runner'lar eski sürüm Uzak runner'lar kendiliğinden güncellenmez (Docker) Runner sunucusunda runner kurulum komutunu yeniden çalıştırın; Docker'sız runner'larda Güncelle.

Veritabanı

Belirti Neden Çözüm
Controller açılmıyor, log'da veritabanı bağlantı hataları Postgres konteyneri/pod'u ayakta değil ya da disk dolu docker compose -p spitfire -f deploy/docker/docker-compose.yml ps (Kubernetes: kubectl -n spitfire get pods) ile durumuna bakın; postgres log'unu ve disk alanını kontrol edin.
Sistem olayları'nda Veritabanı kaynaklı hatalar ya da "olay kaydedilemedi" Veritabanı yavaş ya da aşırı yüklü Disk ve CPU'yu kontrol edin; Lisans sayfasındaki veri saklama sürelerini kısaltmayı düşünün.
Kayıtlı bağlantı sırları okunamıyor SPITFIRE_SECRET_KEY değişmiş ya da kaybolmuş Yedeklediğiniz deploy/docker/.env (ya da spitfire-secrets Secret'ı) ile geri yükleyin. Anahtar yoksa sırları yeniden girmeniz gerekir.

Güncelleme

Yeni sürüm çıktığında kurulum yöneticileri üstte bir bant görür ("Spitfire … çıktı"); Neler yeni, nasıl güncellenir? komutu gösterir. Aynı bilgi her zaman Lisans sayfasındaki Sürüm ve güncellemeler kartındadır: Kurulu sürüm, Kurulum, Güncelleme kontrolü, Çıkış proxy'si ve Güncelleme komutu.

Sürüm ve güncellemeler kartıSürüm ve güncellemeler kartı

Adım adım:

  1. Koşu sürerken güncellemeyin. Süren koşuların bitmesini bekleyin.

  2. Lisans sayfasında Sürüm ve güncellemeler kartındaki komutu kopyalayın (ya da Şimdi kontrol et ile yeniden kontrol edin).

  3. Controller'ın kurulu olduğu sunucuda çalıştırın:

    bash
    # Linux / macOS (Docker)
    curl -fsSL https://spitfire.tr/install.sh | bash -s -- docker
    # Kubernetes
    curl -fsSL https://spitfire.tr/install.sh | bash -s -- kubernetes
    powershell
    # Windows (PowerShell)
    irm https://spitfire.tr/install.ps1 | iex

    Kurulumu başka bir klasöre yaptıysanız kart komutu SPITFIRE_DIR=… ile verir.

  4. Komut önce veritabanını yedekler (sürüm değişiyorsa), ayarlarınızı (deploy/docker/.env ya da spitfire-secrets Secret'ı) ve verilerinizi korur, yeni sürümü kurar.

  5. Başka lokasyonlardaki runner sunucuları için kartta ayrı komut vardır (curl -fsSL https://spitfire.tr/install.sh | bash -s -- runner). Uzak runner'ları controller ile aynı sürümde tutun; Runner'lar sayfası farklı sürümü sarıyla işaretler. Docker'sız (systemd, Windows hizmeti) runner'larda Güncelle düğmesi ya da Runner'ları otomatik güncelle yeterlidir.

Not

Güvenlik güncellemesi bandı ("Güvenlik güncellemesi: Spitfire …") bir güvenlik açığını kapatır; en kısa sürede güncelleyin.

Yedekleme ve geri yükleme

Ne otomatik yedeklenir

  • Sürüm değiştiren her güncellemede veritabanı önce ~/spitfire/backups/*.dump olarak yedeklenir. Son 5 yedek kalır. --no-backup (Windows: -NoBackup) bu adımı atlar; önerilmez.
  • Ayrıca anahtarları kendiniz yedekleyin: deploy/docker/.env dosyası (Docker) ya da spitfire-secrets Secret'ı (Kubernetes). İçindeki SPITFIRE_SECRET_KEY kaybolursa kayıtlı bağlantı sırları okunamaz.
Dikkat

./uninstall.sh docker --purge verileri ve anahtarları da siler. Yalnızca kaldırma için --purge'süz çalıştırın: veriler ve anahtarlar korunur.

Geri alma

Bir güncelleme ters gittiyse, kurulum dizininde:

bash
~/spitfire/install.sh docker --rollback          # Docker
~/spitfire/install.sh kubernetes --rollback      # Kubernetes
~/spitfire/install.sh docker --rollback ~/spitfire/backups/<yedek>.dump   # belirli bir yedek
powershell
.\install.ps1 -Rollback                          # Windows
.\install.ps1 -Rollback -RollbackDump <dosya>

Ne olur:

  1. Şimdiki veritabanı da önce yedeklenir.
  2. Seçilen (varsayılan en yeni) yedek geri yüklenir.
  3. O yedeği alan sürüm başlatılır.

O yedekten sonra yapılan değişiklikler geri gelmez. Komutu yeniden çalıştırmak ileri sarar. Terminalsiz çalışırken (ör. bir script'ten) --yes gerekir.

Destekle iletişim

Yukarıdakiler sorunu çözmediyse destek ekibine yazın:

E-postaya şunları ekleyin (eksiksiz bir e-posta çözümü günlerce hızlandırır):

  1. Ne oldu? Beklediğiniz ve gördüğünüz, kısa ve somut.
  2. Ne zaman? Tarih, saat ve saat dilimi.
  3. Hata kodu (varsa) — arayüzdeki Hata kodu / request id.
  4. Destek paketi — Sistem olayları → Destek paketi indir ya da ./install.sh --support-bundle. Göndermeden önce içine bakabilirsiniz.
  5. Sürüm ve kurulum türü — Lisans sayfasındaki Kurulu sürüm ve Kurulum (Docker, Kubernetes, Windows).
  6. Adımlar — sorunu yeniden üretmek için ne yaptınız; ekran görüntüsü yardımcı olur.
  7. Bir koşuyla ilgiliyse koşunun bağlantısı ya da kimliği; CI ile ilgiliyse CLI'ın çıktısı (token'ı silerek) ve exit code.
Dikkat

E-postaya asla lisans anahtarınızı, API token'larını, parolaları ya da deploy/docker/.env dosyasını eklemeyin. Destek paketi bunları zaten içermez.

İlgili sayfalar