明らかなことを見落としてしまったように感じますが、systemd
を使用してリモートからsyslog
メッセージを受信してログに記録するArch Linuxサーバーを取得する方法がわかりませんシステム。
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メッセージをフラットファイルではなく、ジャーナルに入れたいと思います。
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 はArch LinuxにありますExtraリポジトリ:pacman -S socat
)
したがって、ここには少しギャップがあります。
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でサポートされていないので、それにも注意してください。
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。
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ユニットファイルのサンプルは、プロジェクトに含まれています。楽しい!
簡単な回避策がありますが、これは@starfryによる方法よりもハッキングが少なく、実際のソリューションですすべてのものはジャーナルに含まれることになります。
UDP:514/TCP:514をサポートする適切なsyslogサーバーをインストールするだけです。私のお気に入りはrsyslog
で、これはAURでのみsyslog-ng
は代わりにメインリポジトリにあります。このデーモンは、ネットワークからsyslogイベントを受信し、ローカルのプレーンテキストファイルに保存します。
ソケットから読み取るだけの正確な構成は、鋭いリーダー(RTFM)に任されています。
syslog-ngおよびsystemdジャーナル
から syslog-ng
Syslog-ngバージョン3.6.1以降、systemdを使用するLinuxシステムのデフォルトのsystem()
ソースは、標準のsystem()
ソースとしてjournaldを使用します。
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のテキストログのみを保持する場合は、_Storage=volatile
_に_ForwardToSyslog=yes
_および_/etc/systemd/journald.conf
_を設定します。これは、journaldをramに格納します。 syslog-ng 3.6.3以降、syslog-ngはsystem()
ソースとしてjournaldを使用しているため、Storage = noneを設定すると、systemdジャーナルはすべてのメッセージをドロップし、syslog-ngに転送しません。
変更後、_systemd-journald.service
_および_syslog-ng.service
_ daemonsを再起動します。