Diğer cevap, yazarının dediği gibi, Linux'ta "klasik kayıt" ı açıklar. Bugünlerde pek çok sistemde işler böyle yürüyor.
Çekirdek
Çekirdek mekanizmaları değişmiştir.
Çekirdek, bellek içi ara belleğe çıktı üretir. Uygulama yazılımları buna iki şekilde erişebilir. Günlük alt sistemi genellikle adlandırılmış sahte FIFO olarak erişir /proc/kmsg. Bu günlük bilgisi kaynağı yararlı bir şekilde günlük okuyucular arasında paylaşılamaz, çünkü bir kez okundu. Birden fazla işlem paylaşıyorsa, her biri çekirdek günlük veri akışının yalnızca bir bölümünü alır. Aynı zamanda salt okunur.
Buna erişmenin diğer yolu daha yeni /dev/kmsgkarakter cihazıdır. Bu, çoklu müşteri süreçleri arasında paylaşılabilen bir okuma-yazma arayüzüdür. Birden fazla işlem paylaşıyorsa, hepsi birbirinden etkilenmeyen aynı veri akışını okur. Yazma erişimi için açarlarsa, çekirdek tarafından oluşturuluyormuş gibi, çekirdeğin günlük akışına mesaj da ekleyebilirler.
/proc/kmsgve /dev/kmsglog verilerini RFC-5424 olmayan bir formda sağlar.
Uygulamalar
Uygulamalar değişti.
GNU C kütüphanesinin syslog()ana işlevi, AF_LOCALadlı bir datagram soketine bağlanmaya /dev/logve log girişlerini yazmaya çalışır. (BSD C kütüphanesinin syslog()işlevi günümüzde /var/run/logsoket adı olarak kullanır ve /var/run/logprivönce çalışır .) Uygulamaların bunu doğrudan yapmak için kendi kodları olabilir. Kütüphane işlevi, uygulamanın kendi işlem içeriğinde çalıştırılan koddur (sonuçta, bir soketi açmak, bağlamak, yazmak ve kapatmak).
Uygulamalar, biri makinedeki bir AF_INET/ AF_INET6datagram soketinde dinliyorsa, UDP yoluyla RFC 5424 mesajlarını yerel bir RFC 5426 sunucusuna gönderebilir .
Daemontools dünyasının son yirmi yılda yarattığı baskı sayesinde, GNU syslog()C kütüphane işlevini ya da UDP soketlerini kullanmadıkları bir modda çalışan birçok dæmons desteği , ancak günlük verilerini standart hataya çeviriyor . sıradan Unix modası.
nosh ve genel olarak daemontools ailesi ile günlük yönetimi
Daemontools araç gereç ailesi ile kayıt tutmada çok fazla esneklik var. Ancak genel olarak tüm aile genelinde fikir, her "ana" démon'un ilişkili bir "kayıt" dæmonuna sahip olmasıdır. "ana" dæmons, dæmon olmayan işlemler gibi çalışır ve günlük mesajlarını, servis yönetimi alt sisteminin bir boru ile bağlanması için düzenlediği (günlük tutan verilerin kaybedilmemesi için açık tuttuğu) standart hataya (veya standart çıktıya) yazar. Bir servis yeniden başlatılması) "logging" dæmon'un standart girişine.
"Günlük" dæmons'ın tümü bir yere giriş yapan bir program çalıştırır . Genel olarak bu program, standart girişinden okuyan multilogveya buna benzer bir şeydir cyclogve (nanosaniye zaman damgalı) günlük dosyalarını kesinlikle boyutlandırılmış, otomatik olarak döndürülmüş, özel bir yazma dizinine yazar. Genel olarak, bu dæmonsların tümü, bireysel özel imtiyazsız kullanıcı hesaplarının himayesinde çalışır.
Böylece, her bir hizmetin günlük verileri ayrı olarak işlenirken, büyük ölçüde dağıtılmış bir kayıt sistemi bulunur.
Bir edebilir gibi bir şey çalıştırmak klogdveya syslogdveya rsyslogdbir daemontools-aile hizmet yönetimi altında. Ancak daemontools dünyası, yıllar önce "kütükleme" dæmons'lı hizmet yönetimi yapısının işleri daha basit bir şekilde yapmaya özen gösterdiğini fark etti. Tüm günlük akışlarını tek bir dev püre haline getirmeye gerek yok, günlük verilerini ayrıştırır ve ardından günlük dosyalarını ayırmak için akışları havalandırır; ve sonra (bazı durumlarda), taraftaki güvenilir olmayan bir harici kütük dönme mekanizmasını cıvatalar. Standart log yönetiminin bir parçası olan daemontools-family yapısı zaten log rotasyonu, logfile yazma ve dere ayrımı yapıyor.
Ayrıca: Tüm hizmetlerde ortak olan araçlarla zincirleme ayrıcalıkların düşürülmesi modeli, günlükleme programlarının süper kullanıcı ayrıcalıklarına ihtiyaç duymadığı anlamına gelir; ve UCSPI modeli, yalnızca veri akışına karşı datagram taşınma gibi farklara dikkat etmeleri gerektiği anlamına gelir.
Uç araç takımı bunu örneklendirir. Biri iken edebilir çalıştırmak rsyslogdkutunun dışında, bunun altında ve sadece çekirdek yönetmek, /run/logve UDP eski şekilde girdi log; o da bunları günlüğe daha "daemontools yerli" yol sunar:
- Bir
klogdhizmeti /proc/kmsggünlük akışından standart hataya okuyan ve basitçe yazan bir servis . Bu adlı basit bir program tarafından yapılır klog-read. İlişkili günlük kaydı, standart girişindeki günlük akışını bir /var/log/sv/klogdgünlük dizinine besler .
- Bir
local-syslog-readverikatarlarının okur servis /dev/log( /run/logsadece BSD türevi üzerinde) ve onun standart hataya o günlük akışı yazar. Bu adlı bir program tarafından yapılır syslog-read. İlişkili günlük kaydı, standart girişindeki günlük akışını bir /var/log/sv/local-syslog-readgünlük dizinine besler .
- Bir
udp-syslog-readbasitçe, UDP syslog bağlantı noktasını dinleyen bunun nelerin gönderileceğini okur ve hizmet standart hata o günlük akışı yazar. Yine program syslog-read. İlişkili günlük kaydı, standart girişindeki günlük akışını bir /var/log/sv/udp-syslog-readgünlük dizinine besler .
- (BSD'lerde)
local-priv-syslog-readdatagramları okuyan /run/logprivve basitçe bu günlük akışını standart hatasına yazan bir servis . Yine program syslog-read. İlişkili günlük kaydı, standart girişindeki günlük akışını bir /var/log/sv/local-priv-syslog-readgünlük dizinine besler .
Araç seti aynı zamanda export-to-rsyslogbir veya birkaç günlük dizinini izleyebilen bir araçla birlikte gelir (müdahaleci olmayan günlük imleç sistemi kullanarak ) ve ağ üzerinden RFC 5424 formundaki yeni girişleri belirlenmiş bir RFC 5426 sunucusuna gönderir.
systemd ile log yönetimi
sistem bir tek yekpare log yönetim programına sahiptir systemd-journald. Bu sistem tarafından yönetilen bir servis olarak çalışır.
/dev/kmsgÇekirdek günlük verileri için okur .
- GNU C kütüphanesinin fonksiyonundan uygulama günlük verileri için okur
/dev/log(sembolik bir bağlantı /run/systemd/journal/dev-log) syslog().
- Sistem tarafından yönetilen servislerden gelen günlük verileri için
AF_LOCALakış soketinde dinler /run/systemd/journal/stdout.
- Sisteme özgü günlük protokolünü konuşan programlardan gelen log verilerini (örneğin ve ark.)
AF_LOCALDatagram soketinde dinler ./run/systemd/journal/socketsd_journal_sendv()
- Bunları bir araya getirir.
/run/log/journal/Veya içindeki bir sistem çapında ve kullanıcı başına günlük dosyalarına yazar /var/log/journal/.
AF_LOCALSyslog'a /run/systemd/journal/syslogiletme yapılandırılmışsa, (bir istemci olarak) oradaki bir datagram soketine bağlanabiliyorsa dergi verilerini oraya yazar.
- Konfigüre edilirse, yazılabilir
/dev/kmsgmekanizmayı kullanarak dergi verilerini çekirdek tamponuna yazar .
- Yapılandırılırsa, günlük verilerini terminallere ve konsol cihazına da yazar.
Bu program çökerse veya servis durdurulursa sistem genelinde kötü şeyler olur.
systemd, /run/systemd/journal/stdoutsokete eklenecek (bazı) hizmetlerin standart çıktılarını ve hatalarını kendisi düzenler . Bu nedenle, normal şekilde standart hataya giriş yapan kişilerin çıktılarını dergiye göndermeleri gerekir.
Bu tamamen klogd, syslogd, sysloging ve rsyslogd'u destekler.
Bunların şimdi sisteme özgü olması gerekiyor. Bir systemd sisteminde onlar sunucu sonu olamaz /dev/log. Bunun yerine iki yaklaşımdan birini alırlar:
- Onlar dergi verilerini bağlamaya ve yazmaya çalışan
/run/systemd/journal/syslog(eğer hatırlıyorsanız) sunucu sonu olurlar systemd-journald. Birkaç yıl önce, biri bunu imuxsockyapmak için rsyslogd'ın giriş yöntemini yapılandırmış olacaktı .
- İkili günlük biçimini anlayan ve eklenmiş yeni girişler için günlük dosyalarını ve dizini izleyebilen sisteme özgü bir kitaplık kullanarak doğrudan sistem günlüğünden okurlar. Günümüzde,
imjournalbunu yapmak için rsyslogd'ın giriş yöntemi yapılandırılmaktadır .