Portál AbcLinuxu, 10. května 2025 08:03
$PreserveFQDN on module(load="imudp") # input module for UDP syslog module(load="omjournal") # output module for journal input(type="imudp" port="514" ruleset="writeToJournal") ruleset(name="writeToJournal") { action(type="omjournal") }Potřeboval bych rozlišit odesílající stranu prefixem hostname, aktuálně se v journalu objeví:
Dec 29 11:52:33 server hostapd:[339]: wlan0: STA 11:22:33:44:55:66 WPA: pairwise key handshake completed (RSN)
kde 'server' je local hostname - ten jen tam zřejmě přidán journalem. Rád bych tam viděl něco jako:
Dec 29 11:52:33 wifi hostapd:[339]: wlan0: STA 11:22:33:44:55:66 WPA: pairwise key handshake completed (RSN)
nebo
Dec 29 11:52:33 server wifi:hostapd:[339]: wlan0: STA 11:22:33:44:55:66 WPA: pairwise key handshake completed (RSN)
Tj. nelze-li modifikovat hostname, tak alespoň přidat prefix před samotnou msg. V některých případech to umožňuje odesílající strana (mikrotik), v jiných nikoliv (openWRT).
Trochu jsem studoval rsyslog, tuším, že bych se mohl vydat cestou: if $fromhost-ip == '192.168.1.10.' then ..modify msg to 'wifi:msg'..
, ale zatím nevím, jak modifikovat samotnou zprávu (respektive nastavit hostname).
Poradíte někdo se syntaxí či alespoň odkazem kterou funkcionalitu rsyslogu konkrétně využít?
Díky.
set $.journal = $hostname+$syslogtag+$msg; template(name="journal" type="list") { property(name="$.journalfmt" outname="MESSAGE") property(name="syslogseverity" outname="PRIORITY") property(name="syslogfacility" outname="SYSLOG_FACILITY") }Ale zatím se nedaří, nic se v journalu neobjevuje. (Journal vyžaduje outname="MESSAGE")
set $.journalfmt = $hostname+$syslogtag+$msg; template(name="journal" type="list") { property(name="$.journalfmt" outname="MESSAGE") property(name="syslogseverity" outname="PRIORITY") property(name="syslogfacility" outname="SYSLOG_FACILITY") }Zkoušel jsem i natvrdo
set $.journalfmt = "test";
, ale kde nic tu nic.
Fields prefixed with an underscore are trusted fields, i.e. fields that are implicitly added by the journal and cannot be altered by client code.Takze tam ten hostname nepropasirujes i kdyby jsi chtel. Syslog proste vezme zpravu a vlozi jido promenne MESSAGE a journal doplni zbytek, vcetne lokalniho hostname. Resenim by bylo nelogovat do journal, ale logovat do syslogu kde ptakovy problem neni, ale to jsi asi nechtel slyset ;).
$template JournalTpl, "%HOSTNAME%:%msg%\n"a aplikovat template
... action(type="omjournal" templeate=JournalTpl) ...
module(load="imudp") # input module for UDP syslog module(load="omjournal") # output module for journal $PreserveFQDN on input(type="imudp" port="514" ruleset="writeToJournal") template(name="journal" type="list") { property(name="rawmsg-after-pri" outname="MESSAGE") property(name="syslogseverity" outname="PRIORITY") property(name="syslogfacility" outname="SYSLOG_FACILITY") } ruleset(name="writeToJournal") { action(type="omjournal" template="journal") }což sice vyhodí duplicitní datetime stamp, ale budiž:
Dec 30 15:56:14 server rsyslogd[3668]: Dec 30 15:56:14 wifi hostapd: wlan0: STA 11:22:33:44:55:66 IEEE 802.11: associated (aid 3)
datetimestamp hostname appname: prefix: log msgprvní tři pole jsou ztracena při transportu z rsyslog --> journald (z důvodu zamezení podvrhu, jak píšeš výše, což dává smysl, jen škoda, že to nejde vypnout) a v journalu je vidět již jen
prefix: log msg
, což je z pohledu syslogu i journald obsah pole msg respektive MESSAGE.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.