Çıktı, İlerleme ve Çıkış Kodları
GoArchive'ın standart çıktıya (stdout), standart hata çıktısına (stderr) ve günlüğe yazdıkları; ilerleme göstergesi, kapanış bloğu ve çıkış kodları.
GoArchive, bir komutun sonucunu stdout’a, tanılama mesajlarını (diagnostics) stderr’e, tüm günlük kayıtlarını ise logging ayarının belirlediği şekilde günlüğe yazar. İstemediğiniz hiçbir çıktı stdout’a ulaşmaz; hatalar ise her zaman stderr’e yazılır.
Çıktı Akışları
| Akış | Taşıdığı İçerik |
|---|---|
| stdout | validate, dry-run, plan ve list-jobs raporları; version, --version, completion ve yardım metinleri. Bir çalıştırmada yalnızca --progress ile: Başlangıç satırı, ilerleme satırları ve kapanış bloğu. logging.output değeri stdout olduğunda (veya boş bırakıldığında) günlük |
| stderr | Tüm hatalar; WARNING: satırları; --progress parametresi ve bir günlük dosyası birlikte kullanıldığında; günlüğe kaydedilen uyarı ve hatalar (level loglama seviyesine göre filtrelenerek) ile anlık canlı olaylar (live events). logging.output değeri stderr olduğunda günlük |
| günlük (log) | Her kayıt, format ayarındaki biçimde ve level ayarındaki seviyede yazılır. Günlük dosyası, çalıştırmanın kalıcı kaydıdır |
Üç Günlükleme Düzeni
Günlük dosyası (
output: <path>): Zamanlanmış çalıştırmalar için önerilen düzendir.--progressolmadan çalıştırma sessizdir: Tamamlandığında veya durduğunda hiçbir şey yazdırmaz; bir hata durumunda ise stderr üzerine bir özet ve hatanın kendisini yazdırır:Job archive_old_orders (archive): failed in 61.240s. Log: /var/log/goarchive/orders.log Error: engine: …Başlangıç aşaması tamamlanmadan (bağlantı, ön kontroller, kilitler, kayıt) oluşan bir hatada süre yerine
failed before the first batch.ifadesi yer alır.--progressile başlangıç satırı, ilerleme satırları ve kapanış bloğu stdout’a; günlüğün uyarı ve hataları ise metin satırları olarak stderr’e yazılır. Anlık olaylar günlük seviyesinden bağımsız olarak bunlara eklenir: Replikasyon nedeniyle bekletme (hold), replikanın toparlanması, bir durdurma isteğinin bekletmeyi sonlandırması, duraklatma ve sona ermesi, kurtarma.file_only: trueayarı tüm günlük kayıtlarını konsoldan uzak tutar; uyarılar ve hatalar yine de stderr’e ulaşır.Konsolda metin biçiminde günlük (
output: stdoutveyastderr,format: text): Günlük akışı, renk kodu içermeyen düz metindir.--progresskendi satırlarını ve kapanış bloğunu stdout’a ekler.Konsolda JSON biçiminde günlük (
output: stdoutveyastderr,format: json): Varsayılan düzendir ve konteynerler için önerilir. Günlük akışının her satırı tek bir JSON nesnesidir.--progresssatır yazdırmak yerineRun starting,progressve kapanış kayıtlarını bu akışa yazar; kapanış kaydı sayımları da içerir.output: stdoutayarında bir hata oluşursa stderr’e tek bir düzError:satırı yazılır;output: stderrayarında ise hatanın kendisi kapanış kaydıdır. Günlük henüz oluşmadan tespit edilen bir hata (bir parametre, yapılandırma dosyası, bilinmeyen bir görev) her zaman düz birError:satırı olarak yazılır.
validate ve dry-run, raporlarını her düzende stdout üzerine metin olarak yazdırır. Konteyner ortamında bu komutlar için logging.output: stderr ayarını kullanın; böylece stdout yalnızca raporu, stderr ise yalnızca günlüğü taşır.
İlerleme Göstergesi
Değer verilmeden kullanılan --progress her 30 saniyede bir rapor verir. --progress=10s veya --progress=1m30s ile aralığı belirleyebilirsiniz; yalnızca tam sayı verildiğinde değer saniye olarak yorumlanır (en az bir saniye). Değer = işaretiyle bitişik yazılmalıdır: --progress 10s biçimi, doğru yazımı gösteren bir ipucuyla reddedilir.
Job archive_old_orders (archive): starting. Log: /var/log/goarchive/orders.log
progress: roots 4000/~12000 ( 33.3%) remaining=8000 copied_rows=21640 deleted_rows=21640 elapsed=42s eta=1m18s
progress: roots 8000/~12000 ( 66.7%) remaining=4000 copied_rows=43310 deleted_rows=43310 elapsed=1m12s eta=36s
progress: roots 12000/~12000 (100.0%) remaining=0 copied_rows=64920 deleted_rows=64920 elapsed=1m49s eta=0s
- Kolonlar sabit genişliktedir; böylece ardışık satırlar alt alta hizalanır. Günlük konsolda JSON biçiminde yazıldığında her satır bunun yerine bir
progressgünlük kaydıdır. Bu kayıtroots_done,roots_total,percent,remaining,copied_rows,deleted_rows,elapsed_secondsveetaalanlarını, duraklatma sırasında ise ek olarakpausedalanını taşır. - Toplam değer bir tahmindir.
roots, yüzde,remainingve tahmini bitiş süresi (ETA) kök kayıtları sayar.~ile işaretlenen toplam, sorgu iyileştiricinin (optimizer)wherearalığı için yaptığı tahmindir ve kurtarma işleminden sonra bir kez okunur. Hiçbir sayım yapılmadığı için--progresskaynakta ek bir tarama yapmaz.wherekoşulu bir indeks tarafından karşılandığında tahmin gerçeğe yakındır.wherekoşulu her satırı bir alt sorgu (subquery) veya fonksiyonla filtrelediğinde ise tahmin her iki yönde de büyük sapma gösterebilir. - Sınırlar: Yüzde 100’de,
remainingise sıfırda sabitlenir. ETA, ilk kök kayıt tamamlanana kadarcalculating, tahmin aşıldığında iseunknowngösterir. Tamamlanan bir çalıştırma, işlenen kayıt sayısını toplam olarak gösterir.dry-runise aralığı kesin olarak sayar. - Tahmin okunamazsa çalıştırma ilk yığından önce başarısız olur (
engine: --progress estimate on <table>: …). Devam etmek için görevi--progressolmadan çalıştırın. - Son satır: İlk yığın başladıktan sonra her çıkışta tek bir son satır yazdırılır; doğal olarak sona eren bir çalıştırma
remaining=0gösterir. Başlangıç veya kurtarma aşamasında duran ya da başarısız olan bir çalıştırma hiçbir ilerleme satırı yazdırmaz.
Kapanış Bloğu
--progress ile başlatılan bir çalıştırma, stdout üzerinde bir kapanış bloğuyla sona erer:
Job archive_old_orders (archive): completed in 109.412s
roots: 12000 in 12 batches
table copied deleted verified (sha256)
orders 12000 12000 12000
order_items 40920 40920 40920
order_payments 12480 12480 12480
Durum bilgisi completed, stopped before the end of the where range: run the job again to continue veya failed olur; failed durumunda hata stderr’e yazılır. Kalıcı silme (purge) görevleri deleted, salt kopyalama görevleri ise copied ve verified kolonlarını gösterir; verification: none ayarında verified kolonu yer almaz. Kurtarılan kök kayıtlar, atlanan kök kayıtlar ve kabul edilen değer dönüştürmeleri roots satırının altında listelenir.
Çıkış Kodları
| Kod | Anlamı |
|---|---|
| 0 | Tamamlandı: Çalıştırma where aralığının sonuna ulaştı ya da validate, dry-run, plan, list-jobs veya version sonucunu yazdırdı |
| 1 | Başarısız: Bir kontrol işlemi reddetti, durdurulmuş bir görevin yarım kalan işi bu çalıştırmanın tablolarını tutuyor ya da çalıştırma yarıda başarısız oldu. stderr çıktısını ve günlüğü inceleyin |
| 2 | Herhangi bir bağlantı kurulmadan önce tespit edilen kullanım veya yapılandırma hatası: Bir parametre, yapılandırma dosyası ya da bilinmeyen bir görev |
| 3 | where aralığının sonuna ulaşmadan, hatasız durduruldu (kontrollü durdurma, graceful stop): Bir sonraki çalıştırma işi sürdürür |
| 4 | Başlatılmadı: Başka bir aktif çalıştırma bu görevi, bir kaynak tabloyu ya da aynı veriye ait bir işi kilitli tutuyor; veya yeni bir takip şeması oluşturma işlemi devam ediyor. Hiçbir işlem yapılmadı |
Hatayla karşılaşan bir durdurma 1 koduyla çıkar. Zamanlanmış bir betikte:
goarchive archive -c archiver.yaml --job archive_old_orders
case $? in
0|3) ;; # tamamlandı veya durduruldu: sonraki çalıştırma devam eder
4) exit 0 ;; # işi başka bir çalıştırma tutuyor: daha sonra tekrar deneyin
*) exit 1 ;; # hata veya hatalı kullanım: stderr çıktısını ve günlüğü inceleyin
esac
Konteynerler
Varsayılan günlükleme ayarını (stdout’a JSON) koruyun; böylece konteynerin günlük akışı, herhangi bir dosya veya bağlama noktası (mount) gerektirmeden çalıştırmanın tamamını taşır. Ön planda çalışan bir docker run, GoArchive’ın çıkış kodunu döndürür. Arka planda (detached) çalışan bir konteynerde çıkış kodu, docker wait <name> komutunun yazdırdığı sayıdır. docker stop bir SIGTERM sinyali gönderir ve bu bir kontrollü durdurmadır (graceful stop): Durdurma süre sınırı dolmadan önce işlenmekte olan yığın tamamlanırsa çalıştırma 3 koduyla çıkar. Varsayılan süre sınırı 10 saniyedir; bu süre dolduğunda süreç zorla sonlandırılır (kill) ve bir sonraki çalıştırma takip günlüğünde kayıtlı olan işi kurtarır. docker stop --time veya Compose’daki stop_grace_period değerini bir yığının süresinden büyük ayarlayın. İmajın kullanıcısı ve bağlama noktaları için Kurulum
sayfasına bakın.
