Perché ci sono così tanti file di registro in un tipico sistema Linux? Perché non usano un db / file di log consolidati e un api?


8

Mi chiedo solo perché ci sono così tanti file di registro in un tipico sistema Linux? Non sarebbe un'idea migliore avere una funzione API di sistema per la registrazione e una tabella consolidata per salvare tutte le voci di registro da tutte le applicazioni?


1
Domanda di appendice refactored: Considerando che * nix è così maturo, perché le convenzioni di denominazione dei log (e conf) + le posizioni sono ancora così sporadiche e incoerenti? Se le estensioni dei file sono puramente per uso umano, perché tutti gli sviluppatori (e i collegamenti simbolici per legacy) non possono accettare di utilizzare .loge .confcome identificatori?
Dhaupin,

Risposte:


16

Fa parte della filosofia Unix . L'idea è che i file di testo siano liberi dal blocco del programma e che tutti possano usare qualunque tecnica preferiscano. Per fare ciò, vengono spesso utilizzati file flat, al contrario di linguaggi di markup come XML (anche se ho visto programmi che memorizzano anche cose in formato XML).

Nel googling ho trovato questo bel commento sul testo in chiaro, con commenti sulla filosofia Unix.



15

L'uso di semplici file di testo ha il vantaggio di non aver bisogno di strumenti specifici del database per ottenere le voci del registro.

Puoi analizzarli con grep se vuoi, puoi aprirli con il tuo cercapersone preferito e puoi elaborarli nel tuo linguaggio di scripting preferito come Perl, Python, ecc. Senza la necessità di ulteriori librerie.

Su un sistema Unix hai già una sorta di "API del registro di sistema". Si chiama syslog. Syslog non è in realtà un'API ma è uno standard per la registrazione dei messaggi. Il nome indica il protocollo di rete e la libreria e il demone dietro di esso.

La configurazione predefinita della maggior parte dei sistemi è un demone syslog che ascolta i messaggi locali.

Il demone accetta i messaggi ed esegue la registrazione. Esistono diverse implementazioni di demoni syslog per tutti i tipi di piattaforme ed è anche possibile registrare i tuoi messaggi in un database.

Spetta a voi.


10

Mi chiedo solo perché ci sono così tanti file di registro in un tipico sistema Linux?

I diversi file di registro contengono informazioni diverse (sebbene in genere vi siano duplicazioni). Spesso hanno caratteristiche diverse: diverse politiche di rotazione e conservazione, diverse autorizzazioni, ecc. Il demone syslog si occupa di scriverle; puoi vedere le sue impostazioni in /etc/syslog.confo /etc/syslog-ng.conf.

Non sarebbe un'idea migliore avere una funzione API di sistema per la registrazione

Questa è una buona idea. Chiamiamolo syslog . Il suo compito è inviare le voci di registro al demone syslog.

e una tabella consolidata per salvare tutte le voci di registro da tutte le applicazioni?

Questa è un'intera lattina di vermi. Sembra che tu stia presupponendo la presenza di un motore di database, probabilmente un database relazionale, probabilmente uno che puoi interrogare in SQL. Ma Unix è più vecchio di SQL e ci sono ottime ragioni per cui non ha adottato SQL come componente standard. Sotto Unix, il database è il filesystem. Non è un database relazionale, è semplice . Le sue voci non sono righe, ma file semplici , preferibilmente di testo, preferibilmente con un formato semplice. Ad esempio, i file di registro sono file di testo, con una voce per riga, contenenti la data, il nome della macchina, il programma di origine e il testo della voce. L'uso di un database relazionale avrebbe una serie di aspetti negativi:

  • Cosa fai se il database non funziona? (Il filesystem è un componente fondamentale (e ho già detto che è molto più semplice di un database relazionale?); Il demone syslog è un componente semplice che fa un lavoro (una caratteristica comune nella progettazione Unix) e quindi dovrebbe farlo bene e affidabile.)
  • Come si registrano le operazioni del database? (Ok, attraverso il database stesso - dopo che tutti i log contengono voci dal kernel e dal demone syslog - ma ancora una volta un database molto più complesso lo rende più difficile e meno affidabile).
  • Come si accede alle voci del registro? Confrontare la semplicità di cat, grep, lesscontro le query SQL. E i permessi sui file, beh, non so come lo gestiresti in un tipico database relazionale.
  • Le installazioni multi-server non memorizzano i loro registri localmente, usano la funzione di registro remoto che è stata integrata nel demone syslog fin dagli albori di Unix. È facile da implementare con l'architettura di registrazione unix; non è possibile eseguire un database replicato con quel budget di complessità.


1

Ciò renderebbe impossibili cose come 'tail -f /var/log/apache/access.log'.

Perché pensi che sarebbe meglio mettere tutto in un file?


1
grep '\[apache\]' | tail -f /dev/stdin- ma con server di accesso per utente (quando l'utente non ha accesso al registro di altri utenti).
Maciej Piechotka,

"Perché pensi che sarebbe meglio mettere tutto in un file?" - Perché amo SQL ;-) E perché non mi piace (e quasi non riesco) a tenere a mente molte cose.
Ivan

11
Quando tutto ciò che sai è SQL, tutto sembra un problema di database relazionale.
David Mackintosh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.