Wo soll ein / opt-Paket Protokolle schreiben?

13

Ich installiere ein benutzerdefiniertes Paket in /opt/package_name, in dem Konfigurationsdateien /etc/opt/package_nameund statische Dateien gespeichert werden /var/opt/package_name/static/- alles gemäß den von FHS vorgeschlagenen Konventionen. [ 1 ] [ 2 ] [ 3 ]

Ich muss auch einige Protokolldateien speichern. Ich möchte, dass sie mit Analysewerkzeugen auffindbar sind, also sollten sie sich auch an einem herkömmlichen Ort befinden. Sollten diese in gehen:

  • /var/log/package_name (Wie ein Systempaket, auch wenn dies ein benutzerdefiniertes Paket ist)
  • /var/opt/package_name/log(Nach der /var/optKonvention - aber ist das auffindbar?)
  • etwas anderes?
david.libremone
quelle
Haben Sie ein Beispiel für ein Analysetool, das scannt / var / log?
Sourcejedi
5
Warum ist die Antwort nicht syslog?
Joshua

Antworten:

19

Ich würde sie hineinlegen /var/log/package_name; es erfüllt den Grundsatz der geringsten Überraschung besser als /var/opt/package_name/log. Ich habe kein Zitat dafür; es stimmt einfach überein, wo ich nach Protokollen suchen würde.

Ich kann auch auf das Schreiben eigener Protokolldateien verzichten und mich stattdessen syslogmit einem geeigneten Tag und einer entsprechenden Funktion anmelden . Wenn ich nach einer sauberen Integration mit etablierten Analysetools suche, kann ich für einen Kommunikationskanal keine besseren Ergebnisse erzielen:

  • Jedes generische Tool mit "Protokollanalyse" als aufgeführtes Feature wird bereits überwacht syslog.
  • Die Freigabe von Protokolldateien und die Rotationssemantik werden für mich behandelt. Ich muss keinen Mechanismus einrichten logrotate, um die Datei loszulassen und eine neue zu öffnen. Ich muss nicht einmal mehr logrotatevon neuen Dateien erzählen, um sie zu drehen!
  • Das Abladen von Protokollen auf zentrale Protokollierungsserver erfolgt für mich, wenn die Site dies verlangt. Vorhandene etablierte Tools wie rsyslogwerden bei Bedarf verwendet, sodass ich nicht überlegen muss, diese Funktion selbst zu implementieren.
  • Zugriffskontrollen (POSIX und z. B. SELinux) für die Protokolldateien werden bereits behandelt, sodass ich der verteilungsspezifischen Sicherheitssemantik nicht so viel Aufmerksamkeit schenken muss.

Ich bevorzuge syslog-freundliche maschinenparsbare Textformate wie JSON, es sei denn, ich schreibe ein benutzerdefiniertes Binärformat für mein Protokoll. Es fällt mir schwer, meine eigenen separaten Protokolldateien zu rechtfertigen. Analyse-Tools sehen bereits syslogwie ein Falke aus.

Michael Mol
quelle
8

Da Sie die FHS-Konventionen für Ihre Paketkonfigurationsdateien befolgen, sollten Sie konsistent sein und die Protokolldateien in speichern /var/opt/package_name/log.

Die FHS stellt fest:

Variable Daten der Pakete in / opt müssen in / var / opt / installiert sein

und auch Staaten

Außer den Paketdateien, die sich an bestimmten Speicherorten in der Dateisystemstruktur befinden müssen, um ordnungsgemäß zu funktionieren, dürfen keine anderen Paketdateien außerhalb der Hierarchien / opt, / var / opt und / etc / opt vorhanden sein . Beispielsweise müssen sich die Gerätesperrdateien in / var / lock und die Geräte in / dev befinden.

Die Protokolldateien unter zu haben, /var/opthindert das Paket nicht daran, ordnungsgemäß zu funktionieren, sodass die Verwendung /var/logeindeutig gegen den Standard verstößt.

Es ist unklar, was Sie mit "ist das auffindbar?" Da benutzerdefinierte Protokolle wahrscheinlich ohnehin von benutzerdefinierten Tools verarbeitet werden, ein generisches Tool jedoch für die Verarbeitung dieser Protokolle entwickelt wurde, sollte der Standardspeicherort für entbündelte Pakete wie Ihres ermittelt werden.

Beachten Sie, dass dies syslogeine nützliche Funktion zum Zentralisieren und Optimieren der Protokollierungskonfiguration ist, aber das Problem, wo Protokolle gespeichert werden sollen, wenn Sie sie in einfachen Dateien mit einem bekannten Pfad speichern müssen, nicht vollständig löst. Einige Dateien, die manchmal in einem Anwendungsprotokollverzeichnis gespeichert sind, können von der Anwendung selbst oder von zugeordneten Programmen über ihren erwarteten Pfad aufgerufen werden, z. B. eine Datei, in der eine Prozess-ID gespeichert ist syslog.

jlliagre
quelle