私は明らかなことを見落としていると思いますが、Arch Linuxサーバーを使用してリモートシステムからメッセージを受信systemd
して記録する方法がわかりません。syslog
私はCisco 678 DSLモデムとDD-WRT WAPを持っていますが、どちらもsyslog形式のメッセージを別のコンピュータに送信するように設定できます。私はそのマシンが私のArch Linuxサーバーになることを望みます。
私はそれを検索し、私が見つけたのは「systemd replacement syslog」でしたsyslog
。
修正する
私は尋ねたアーチフォーラム関連する回答を受け取りませんでした。 UDPポート514を受信するためにsyslog-ngをインストールしました。 syslog-ngは私のCisco 678と私が持っているDD-WRT WAPからメッセージを作成します。残念ながら、これらのメッセージはsystemdのログではなくフラットファイルに書き込まれます。したがって、正確な解決策はありませんが、解決策があります。私はsyslogメッセージをフラットファイルよりもログに入れることを好みます。
答え1
あなたは貧しい人々の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にメッセージを送信するにはソースが必要です。
実際に受信したデータを解析してフォーマットするためにこの機能を強化できますが、受信したデータのみを記録したい場合はこれは必要ありません。
(ソカットArch Linuxで追加リポジトリpacman -S socat
:)
答え2
だからここにいくつかのギャップがあります。
Systemd は、systemd-journal-gateway コンポーネントを介したリモートメッセージングをサポートします。つまり、これらのメッセージはsyslog形式ではありません。 Syslog(フォーマット)は、RFC 5424に文書化されたIETF承認仕様です(以前のバージョンのRFC 3164は廃止されました)。
これを一緒に作成することによるより複雑さはここに文書化されています。
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が複数行のメッセージをサポートしていないことを指摘しました。
答え3
私はArchディストリビューションについて知りません。 Fedora 20(systemdを含む)があり、リモートsyslogメッセージを受け入れるように設定しました。
IMHO、この機能は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。
答え4
syslog-ng および systemd ログ
~からシステムログ
syslog-ng バージョン 3.6.1 以降、system()
systemd を使用する Linux システムのデフォルトソースは、Journald を標準system()
ソースとして使用します。
Journaldファイルとsyslog-ngファイルの両方を使用するには、次の設定が有効であることを確認してください。 systemd-journaldの場合、/etc/systemd/journald.confファイルでは、Storage =はautoまたは設定解除(デフォルトはauto)に設定され、ForwardToSyslog =はnoまたは設定解除(デフォルトはno)に設定されます。 /etc/syslog-ng/syslog-ng.conf には、次のソーススタンザが必要です。
source src {
system();
internal();
};
一方、ロギングログを保持せずにsyslog-ngのテキストログのみを維持するには、Storage=volatile
およびForwardToSyslog=yes
。/etc/systemd/journald.conf
これにより、ログインがメモリに保存されます。 syslog-ng 3.6.3以降、syslog-ngはJournaldをソースとして使用するため、system()
Storage = noneが設定されている場合、systemdログはすべてのメッセージを削除してsyslog-ngに転送しません。
変更後に再起動systemd-journald.service
してデーモン化します。syslog-ng.service