以前は、syslog-ngまたはrsyslogを使用して、システムログをネットワークの他の場所にある専用のログサーバーに送信しました。ただし、systemdを使用すると、以前に/var/log/secureまたは/var/log/auth.log(デプロイメントによって異なります)に保存されていたsudoコマンドなどのエントリがログに保存されます。
ForwardToSyslog=yes
/etc/systemd/journald.confに以前の方法で戻るオプションがあることを知っていますが、これはエレガントではない回帰のようです。 systemdには、Loggrythm、ELK、または同様のセントラルロギングサーバーにログを送信する方法が組み込まれていますか?それともForwardToSyslog=yes
これを行う正しい方法はありますか?
答え1
systemdがそうですいいえメッセージをsyslogサーバーに転送する方法が組み込まれています。Red Hat 公式おすすめこのimjournal
モジュールは、/etc/rsyslog.confで次のように設定して、rsyslogがログを読み込んで中央ロギングサーバーに転送できるようにするために使用されます。
module(load="imjournal"
PersistStateInterval="number_of_messages"
StateFile="path"
ratelimit.interval="seconds"
ratelimit.burst="burst_number"
IgnorePreviousMessages="off/on")
これらのオプションの使用法の詳細を提供します。
そしてメッセージ数では、ログデータを保存する頻度を指定できます。これは、指定されたメッセージ数に達するたびに発生します。
変える道ステータスファイルへのパスです。このファイルは、最後に処理されたジャーナル項目を追跡します。
そして第二では、速度制限間隔の長さを設定します。この間隔内で処理されるメッセージの数は、Burst_numberで指定された値を超えることはできません。デフォルト設定は600秒ごとに20,000メッセージです。 Rsyslog は、指定された時間範囲内で最大のバースト後に発生するメッセージを削除します。
そして前のメッセージを無視ログの現在のメッセージを無視し、ステータスファイルが指定されていない場合は、使用される新しいメッセージのみをインポートできます。デフォルト設定はオフです。この設定がオフになっていてステータスファイルが存在しない場合は、以前のrsyslogセッションで処理されていても、ログ内のすべてのメッセージが処理されます。
答え2
私は以前はimjournaldを読んでいませんが、James Sheweyの答えを読んだ後、これは本当に簡単だと思います。
ルールセットを使用すると、必要なものすべてを取得できます。
module(load="imjournal"
PersistStateInterval="number_of_messages"
StateFile="path"
ratelimit.interval="seconds"
ratelimit.burst="burst_number"
IgnorePreviousMessages="off/on"
ruleset="journald" #bind this action to the ruleset "journald"
)
#declare ruleset "journald"
ruleset(
name="journald"
queue.type="FixedArray"
queue.spoolDirectory="/var/run/rsyslog/queues"
queue.filename="stats_ruleset"
queue.lowwatermark="20000"
queue.maxdiskspace="100m"
queue.size="5000000"
queue.dequeuebatchsize="1000"
queue.saveonshutdown="on"
) {
# add here actions you want to perform
action(
name="impstats_to_es"
type="omelasticsearch"
server="127.0.0.1"
serverport="9200"
template="stats"
searchIndex="impstats"
searchType="impstats"
bulkmode="on"
action.resumeretrycount="-1"
)
}