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/kmsg
karakter 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/kmsg
ve /dev/kmsg
log verilerini RFC-5424 olmayan bir formda sağlar.
Uygulamalar
Uygulamalar değişti.
GNU C kütüphanesinin syslog()
ana işlevi, AF_LOCAL
adlı bir datagram soketine bağlanmaya /dev/log
ve log girişlerini yazmaya çalışır. (BSD C kütüphanesinin syslog()
işlevi günümüzde /var/run/log
soket 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_INET6
datagram 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 multilog
veya buna benzer bir şeydir cyclog
ve (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 klogd
veya syslogd
veya rsyslogd
bir 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 rsyslogd
kutunun dışında, bunun altında ve sadece çekirdek yönetmek, /run/log
ve UDP eski şekilde girdi log; o da bunları günlüğe daha "daemontools yerli" yol sunar:
- Bir
klogd
hizmeti /proc/kmsg
gü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/klogd
günlük dizinine besler .
- Bir
local-syslog-read
verikatarlarının okur servis /dev/log
( /run/log
sadece 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-read
günlük dizinine besler .
- Bir
udp-syslog-read
basitç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-read
günlük dizinine besler .
- (BSD'lerde)
local-priv-syslog-read
datagramları okuyan /run/logpriv
ve 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-read
günlük dizinine besler .
Araç seti aynı zamanda export-to-rsyslog
bir 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_LOCAL
akış soketinde dinler /run/systemd/journal/stdout
.
- Sisteme özgü günlük protokolünü konuşan programlardan gelen log verilerini (örneğin ve ark.)
AF_LOCAL
Datagram soketinde dinler ./run/systemd/journal/socket
sd_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_LOCAL
Syslog'a /run/systemd/journal/syslog
iletme yapılandırılmışsa, (bir istemci olarak) oradaki bir datagram soketine bağlanabiliyorsa dergi verilerini oraya yazar.
- Konfigüre edilirse, yazılabilir
/dev/kmsg
mekanizmayı 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/stdout
sokete 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 imuxsock
yapmak 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,
imjournal
bunu yapmak için rsyslogd'ın giriş yöntemi yapılandırılmaktadır .