systemd Arch LinuxでSyslogメッセージを受信する


25

当たり前のことを見落としているように感じますが、リモートシステムからメッセージsystemdを受信して​​ログに記録するためにを使用するArch Linuxサーバーを取得する方法がわかりませんsyslog

Cisco 678 DSLモデムとDD-WRT WAPがあり、syslog形式のメッセージを他のマシンに送信するように両方を構成できます。そのマシンをArch Linuxサーバーにしたいのですが。

私はあちこち探してみましたが、「systemdがsyslogに置き換わる」、またはもう実行する必要がsyslogないか、質問と同様に無関係なものを見つけただけです。

更新

Archフォーラムで質問したところ、関連する回答はありませんでした。UDPポート514でリッスンするためだけにsyslog-ngをインストールしました。syslog-ngはCisco 678からのメッセージと、持っているDD-WRT WAPを書き込みます。残念ながら、メッセージはsystemdのジャーナルではなく、フラットファイルに保存されます。したがって、正確な解決策はありませんが、回避策があります。むしろ、フラットファイルではなく、ジャーナルにsyslogメッセージが必要です。


systemdは独自のログを使用します。コアArchリポジトリで利用可能なmetalogもあります。個人的には、syslog、systemdのジャーナル、metalogの3つすべてを使用します。systemdジャーナルを確認してください。正しく思い出せば、syslogはsystemdへの切り替え以来、すべてのメッセージなどをsystemdのジャーナルに送信するように構成されています。
アレクセイマグラ

回答:


11

socat使うと、貧乏人のsyslogサーバーを非常に簡単に書くことができます。次のようなサービスユニットが必要です。

[Service]
Restart=on-success
ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT

syslogサービスポートで受信したものはすべて、盲目的にsystemdジャーナルに送信します。たとえば、上記を保存して/etc/systemd/system/syslog.serviceから、

# systemctl daemon-reload
# systemctl start syslog

次に、リスニングサーバーのUDPポート514にメッセージを送信するためのソースが必要です。

これを拡張して、受信したデータを実際に解析してフォーマットすることもできますが、受信したものをジャーナル処理するだけでよい場合は必要ありません。

socatに関するはアーチのLinuxであるエクストラリポジトリ:pacman -S socat


4
いい答えだ。:私はsocatに関するインストールできませんでしたので、私は、迅速なPythonスクリプトで行ってきましたimport socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
awelkie

3

そのため、ここには少しギャップがあります。

Systemdは、systemd-journal-gatewayコンポーネントを介したリモートメッセージングをサポートします。これらのメッセージはsyslog形式ではないと言われています。(形式としての)Syslogは、RFC 5424(以前のバージョンであるRFC 3164を非推奨)で文書化されたIETF批准仕様です。

これらをうまく組み合わせて再生するための複雑さの詳細については、こちらをご覧ください。

http://www.freedesktop.org/wiki/Software/systemd/syslog/

そしてここ(man systemd-journald.service)

   systemd-journald is a system service that collects and stores logging data.
   It creates and maintains structured, indexed journals based on logging
   information that is received from the kernel, from user processes via the
   libc syslog(3) call, from STDOUT/STDERR of system services or via its native
   API. It will implicitly collect numerous meta data fields for each log
   messages in a secure and unfakeable way. See systemd.journal-fields(7) for
   more information about the collected meta data.

要約すると、メッセージがsyslog-ngからSTDOUTに送信され、ジャーナルに記録されることを確認してください。

これについてもう少しフォローアップすると、これも見つかりました。

https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md

誰かがロギングのためにPostgreSQLからsystemdにバインディングを書いているところ。この中で彼らは、現在(そのファイルの時点で、2013/06現在)複数行メッセージはsystemdでサポートされていないので、それにも注意してください。


2

Archディストリビューションがわかりません。Fedora 20(systemdを含む)があり、リモートsyslogメッセージを受け入れるように構成しました。

私見、この機能はsystemdとは関係ありません。systemd-journald.serviceは、カーネル/ユーザー空間プログラムとsyslogサブシステムの間に介在します。これらのソースからのローカルメッセージのみをジャーナルデータベースにキャプチャし(私は思う)、syslogに転送します。たとえば、「man systemd-journald.service」(少なくともFedoraでは)を参照してください。

私の場合、/ etc / rsyslog.confでオプションの「TCP syslogレシーバーモジュール」を設定することでこれを有効にします。

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

UDPモジュールも利用できます。

また、(r)syslogルールを追加して、目的のファイルに出力を送信する必要があります。完全なドキュメントについては、http//www.rsyslog.com/doc/を参照してください。

HTH。


2

syslog-ngをインストールし、syslogログメッセージを受信できました。しかし、私が本当に欲しかったのは、syslogログメッセージを受信し、そのメッセージをjournaldに書き込むことでした。リモートsyslogメッセージをjournaldに書き込むようにsyslog-ngを構成する方法が見つかりませんでした。

そこで、これを行うユーティリティを作成しました。

https://github.com/advantageous/rsyslog-journald-repeater

./rsyslog-journald-repeater -h
Usage of ./rsyslog-journald-repeater:
-debug
    debug flag
-host string
    hostname to listen on (default "0.0.0.0")
-port int
    port to listen on (default 5514 on darwin, default 514 on Linux, Unix, etc.)

ビルドファイルとテスト用の手順およびサンプルsystemdユニットファイルがプロジェクトに含まれています。楽しい!


0

syslog-ngおよびsystemdジャーナル

syslog-ngから

syslog-ngバージョン3.6.1以降、system()systemdを使用するLinuxシステムのデフォルトソースは、journaldを標準system()ソースとして使用します。

journaldファイルとsyslog-ngファイルの両方を使用する場合は、次の設定が有効になっていることを確認してください。systemd-journaldの場合、/ etc / systemd / journald.confファイルで、Storage =はautoまたはunset(デフォルトはauto)に設定され、ForwardToSyslog =はnoまたはunset(デフォルトはno)に設定されます。/etc/syslog-ng/syslog-ng.confには、次のソーススタンザが必要です。

 source src {
   system();
   internal();
 };

一方、journaldログを保持せず、syslog-ngのテキストログのみを保持する場合は、set Storage=volatileおよびForwardToSyslog=yesinを使用し/etc/systemd/journald.confます。これにより、journaldがRAMに保存されます。syslog-ng 3.6.3の時点で、syslog-ngはjournaldをsystem()ソースとして使用しているため、Storage = noneを設定すると、systemdジャーナルはすべてのメッセージをドロップし、syslog-ngに転送しません。

変更後、デーモンsystemd-journald.servicesyslog-ng.serviceデーモンを再起動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.