Doküman

Sorun Giderme İçin Ubuntu Günlükleri Nasıl Kullanılır?

Ubuntu Linux’ta sistem sorunlarını giderirken, başlamanın en iyi yolu sistem günlüklerini incelemektir. Temel olarak, her sistem olayı bir yere kaydedilir. Buna çekirdek mesajları, hizmet durumu mesajları ve hayal edebileceğiniz hemen hemen her şey dahildir. Sistem günlüklerinin kısa bir süre içinde milyonlarca girişle hızla dolması alışılmadık bir durum değildir. Tüm bu bilgiler mevcut olduğunda, aradığımızı nasıl bulacağımızı bilmemiz gerekiyor ve ardından Ubuntu’daki sinir bozucu sistem sorunlarının suçlusunu hızlı bir şekilde belirleyebiliriz.
Bu eğitimde, Ubuntu Linux’taki sorunları gidermek için sistem günlüklerini kullanmanın çeşitli yöntemlerini öğreneceksiniz. Günlük girişlerinin depolanabileceği farklı yerleri ve verileri en iyi nasıl ayrıştıracağınızı ve ilgili bilgileri nasıl izole edeceğinizi göreceksiniz. Bu, sorun giderme sürecinin ilk adımıdır ve sisteminizde ortaya çıkan sorunların temel nedenini nasıl izleyeceğiniz konusunda size ek ipuçları verecektir. Hadi başlayalım!

 

Günlükleri Görüntülemek için systemd Günlüğünü Kullanma

 

Ubuntu, systemd üzerine inşa edilmiş birçok işletim sisteminden biridir. systemd çerçevesinin bir parçası, günlükleri toplayan bir hizmet olan journald’ı içerir. Neredeyse tüm hizmetler systemd’ye entegre edildiğinden, dergi arka plan programı Ubuntu üzerinde çalışan işlemler hakkında tonlarca bilgi toplayabilir. Çekirdek ayrıca systemd ile yakından entegredir, bu nedenle çekirdeğe özgü mesajlar da journald tarafından toplanacaktır.
 

systemd günlük hizmeti, journalctl komutu kullanılarak sorgulanabilir. Günlük girişlerini bu şekilde görüntülüyoruz ve ne tür günlükler görmek istediğimizi belirtiyoruz. Ubuntu’da günlükleri görüntülemek için bu komutu nasıl kullanabileceğimizi görmek için birkaç örnek komuta bakalım:

  1. Journalctl için en temel commad sözdizimi, onu ekstra seçenek olmadan yürütmektir. Çıktı, sisteminizin günlüğe kaydettiği her şeyi içerecektir ve bu, çok miktarda veri nedeniyle muhtemelen manuel olarak yapılamayacak kadar hantal olacaktır. Unutmayın, bir makine bir süre çalıştırıldıktan sonra günlük girişlerinin milyonları bulması oldukça yaygındır.
    $ journalctl
    

    Günlüklerin genel biçimini görmek için aşağıdaki ekran görüntüsüne bakın. Çıkış, otomatik olarak tüm bilgileri verir. Satır satır kaydırmak için Enter tuşunu veya sayfa sayfa kaydırmak için Boşluk tuşunu kullanın. Günlük çıktısından çıkmak için klavyenizdeki q tuşuna basın.

    Running the journalctl command on Linux
    Linux’ta journalctl komutunu çalıştırma
    NOT
    Journalctl’yi tek başına çalıştırmak pek yardımcı olmuyor. Günlükleri kullanmanın püf noktalarından biri, ek komut seçenekleri kullanarak veya grep gibi diğer araçlara yönlendirerek ilgili bilgilerin nasıl izole edileceğini anlamaktır.

  2. Günlüklülüğün bir kolaylığı, günlük girişlerinin her sistem önyüklemesi için ayrı ayrı depolanmasıdır. Bu kural, örneğin en son sistem önyüklemesinde oluşan hataları belirlemeyi kolaylaştırır. Önceki önyüklemelerdeki tüm günlüklerin listesini görmek için –list-boots seçeneğini kullanın.
    $ journalctl --list-boots
    

    Aşağıdaki ekran görüntüsü, journalctl’nin sistemimizin son 11 önyüklemesindeki günlüklere erişebildiğini göstermektedir. Mevcut botumuz 0 numara ile gösterilir ve önceki botumuz 1 numaradır.

    Viewing the past boot logs with journalctl
    Geçmiş önyükleme günlüklerini journalctl ile görüntüleme
  3. Şimdi önceki sistem önyüklemesi sırasında kaydedilen günlükleri görüntülemeyi deneyelim. Bunu yapmak için, -b (önyükleme) seçeneğini ve en son önyüklemeye karşılık gelen sayıyı veya -1’i kullanacağız. Daha da eski bir önyüklemenin günlüklerini görüntülemek istiyorsanız farklı bir sayı belirtebilirsiniz.
    $ journalctl -b -1
    
  4. Önceki bir önyüklemenin günlüklerini görüntülemek için önyükleme kimliğini de kullanabilirsiniz. Bu alfanümerik dize, her önyüklemeden sonra artmaya devam eden sıralı sayıların aksine değişmeyecektir.
    $ journalctl -b b4b4ea9fd1eb431699634b90e1c24d3f
    
  5. Belki de belirli bir zaman diliminde gerçekleşen günlük girişlerini bulmanız gerekir. Örneğin, son bir saat içinde bir sistem hatasıyla karşılaştığınızı biliyorsanız. Bu durumda, –since ve –until seçenekleri, ilgili günlük dosyalarını belirli bir zaman diliminden yalıtmak için yararlıdır. Örneğin, dünden bu yana tüm günlükleri görmek için:
    $ journalctl --since yesterday
    
  6. Seçenekleri birbiriyle bağlantılı olarak da kullanabilirsiniz. Bu örnekte, dünden iki saat öncesine kadar tüm günlük girişlerini kontrol ediyoruz:
    $ journalctl --since yesterday --until "2 hours ago"
    
  7. Çok özel bir zaman dilimi için günlük girişlerini ayırmak istiyorsanız, YYYY-AA-GG SS:DD:SS tarih biçimini şu iki seçenekle birlikte kullanın:
    $ journalctl --since 2022-10-03 01:00:00 --until 2022-10-04 14:30:00
    

    Bu, bu süre zarfında bir yerde bir hata veya ilgili bir olayın meydana geldiğini kesin olarak biliyorsanız ve bunun tam olarak ne zaman gerçekleştiğini belirlemeniz veya gerçekleştiğinde hangi verilerin günlüğe kaydedildiğini görmeniz gerekiyorsa yararlı olabilir.

  8. Belirli bir sistem hizmeti için günlüğe kaydedilmiş girişleri görmek için -u bayrağını kullanın. Örneğin, Nginx tarafından günlüğe kaydedilen tüm girişleri görmek için:
    $ journalctl -u nginx.service
    

    Bu, durum mesajları, uyarılar, hatalar vb. dahil olmak üzere Nginx hizmetinin kaydettiği tüm günlük girişlerini gösterir.

  9. En son girişlerden bazılarını görmek için -n seçeneğini kullanabiliriz. Varsayılan olarak, bu size son 10 günlük girişini gösterir.
    $ journalctl -n 10
    

    Bu seçeneğin, yukarıda ele alınan -u seçeneğiyle birleştirildiğinde en yararlı olacağını unutmayın. Aksi takdirde, tüm sistem için ayrılan son günlük girişi sayısını görürsünüz:

    $ journalctl -n 10 -u nginx.service
    
  10. Çekirdek günlüklerini journalctl ile görüntüleme

    Yalnızca günlüklü olarak günlüğe kaydedilen çekirdekle ilgili iletileri görmek için -k seçeneğini sunuyoruz:

    $ journalctl -k
    

    Ancak, bu seçenek tek başına çok fazla günlük girişi döndüreceğinden, yalnızca belirli bir önceliğe sahip olanları görmek yararlı olabilir. En yüksek öncelik seviye 0 ve en düşük seviye 7’dir. Günlük düzeyleri aşağıdaki gibidir:

    0: emergency
    1: alert
    2: critical
    3: error
    4: warning
    5: notice
    6: info
    7: debug
    

     

  11. Belirli bir düzeydeki günlükleri ve bu düzeyin üzerindeki günlükleri öncelikli olarak görmek için -p seçeneğini kullanın. Bu örnekte, hata, kritik, uyarı veya acil durum olarak işaretlenmiş herhangi bir giriş olan seviye 3 ile gideceğiz.
    $ journalctl -p 3
    
  12. journalctl ile ek komutlar kullanma

    Journalctl çıktısında ilgili verileri bulmaya yardımcı olması için grep gibi komutlardan da yararlanabiliriz. Örneğin, ‘GNOME’ (kurulu GUI’mizin adı) metnini içeren girişleri arayalım. -i seçeneğinin yalnızca arama büyük/küçük harfine duyarsız hale getirdiğini unutmayın:

    $ journalctl | grep -i gnome
    
  13. tail komutuna filtrelemek, çıktıda yer alan en son girişleri kontrol etmek için kullanışlıdır:
    $ journalctl | grep -i gnome | tail
    

Günlük Dosyalarını Görüntüleme

Evrensel bir günlük sistemi (günlüklü) kullanılmaya başlanmadan önce, günlükler genellikle /var/log dizininde bulunan dosyaların içinde depolanıyordu. Bu dizini incelemek, bir zamanlar olduğu kadar yararlı değildir, çünkü çekirdek ve çoğu hizmet, bugünlerde günlük girişlerini depolamak için günlüğe kaydedilir ve bunları verimli bir şekilde görüntülemek için zaten kullanışlı journalctl komutuna sahibiz.

Ancak, apt paket yöneticisi gibi bazı hizmetler ve önyüklemenin kendisi gibi sistem olayları, girişleri /var/log içinde depolayacaktır. Niş programlar ve özel komut dosyaları da bu dizini kullanabilir, bu nedenle kontrol etmeye değer olabilir.

Viewing the /var/log directory in Ubuntu
Ubuntu’da /var/log dizinini görüntüleme

Bir dosyadaki günlük girişlerini görüntülemek için cat veya less komutunu kullanmanız yeterlidir. Aradığınız bilgileri tam olarak izole etmek için grep kullanmanız da gerekebilir:

$ cat /var/log/service/file.log
BİLİYOR MUYDUNUZ?
Günlük dosyaları, çok fazla girişle doldukları ve bir süre sonra yer kapladıkları için bu dizinde düzenli olarak arşivlenir. Logrotate hizmeti, bu günlük dosyalarını arşivlemekten sorumludur ve gereksinimlerinizi karşılayacak şekilde yapılandırılabilir.

AppArmor Günlüklerini Kullanma

AppArmor, Ubuntu Linux dahil olmak üzere çeşitli dağıtımlarda uygulanan bir Zorunlu Erişim Kontrolü izin sistemidir (MAC). AppArmor, işlemlere, ağ bağlantı noktalarına, dosyalara ve kullanıcılara “profiller” atayarak çalışır. Kullanıcılar, AppArmor’u kullanarak hangi varlıkların sınırlı kaynaklara erişmeye çalıştığını denetleyebilir ve günlüğe kaydedebilir.

AppArmor ile etkileşim kurmak ve seçilen kaynaklarla ilgili bilgileri günlüğe kaydetmeye başlamak için bazı komutlar şunlardır:

  1. İlk olarak, AppArmor’un mevcut durumunu kontrol etmek için:
    $ sudo apparmor_status
    

    Olası modlar zorlanır, şikayet edilir ve sınırlandırılmaz.

  2. Bir profili şikayet moduna geçirmek için (uyarı verir ancak herhangi bir işlem yapmaz):


     

    $ sudo aa-complain /path/to/binary
    
  3. Bir profili zorlama moduna geçirmek için (günlükler oluşturur ancak erişim denetimi ilkelerini de zorlar):
    $ sudo aa-enforce /path/to/binary
    
  4. AppArmor tarafından oluşturulan günlük dosyalarını görüntülemek için /var/log/dmesg günlük dosyasını kontrol edebiliriz:
    $ cat /var/log/dmesg | grep apparmor
    

    Ancak, yukarıda gösterildiği gibi journalctl komutuyla ilgili AppArmor günlük girişlerini görüntülemek daha verimli olacaktır.

 

 

Yazının orijinalini buradan okuyabilirsiniz.