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:
- 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.
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. - 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.
- Ş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
- Ö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
- 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
- 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"
- Ç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.
- 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.
- 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
Ç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
- 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
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
- 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.
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
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:
- İ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.
- Bir profili şikayet moduna geçirmek için (uyarı verir ancak herhangi bir işlem yapmaz):
$ sudo aa-complain /path/to/binary
- 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
- 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.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.