以前は、syslog-ngまたはrsyslogを使用して、ネットワーク上の別の場所にある専用のログサーバーにシステムログを送信していました。ただし、systemdでは、以前は/ var/log/secureまたは/var/log/auth.logに保存されていたSudoコマンドなど(ディストリビューションによって異なります)。
/etc/systemd/journald.confにForwardToSyslog=yes
オプションを使用すると、以前の方法に戻ることができますが、これは、後ろに進んでいないように見えます。 systemdには、LogrhythmやELKなどの中央ロギングサーバーにログを送信する、またはForwardToSyslog=yes
これを行う適切な方法は?
Systemdには、syslogサーバーにメッセージを転送する組み込みの手段がないではないようです。 Red Hatの公式の推奨事項 は、imjournal
モジュールを使用して、rsyslogがjournaldログを読み取り、/ etc/rsyslog.confで次のように設定することにより、これらのログを中央のログサーバーに転送できるようにします。 :
module(load="imjournal"
PersistStateInterval="number_of_messages"
StateFile="path"
ratelimit.interval="seconds"
ratelimit.burst="burst_number"
IgnorePreviousMessages="off/on")
これらのオプションの使用法の詳細を提供します。
number_of_messagesを使用して、ジャーナルデータを保存する頻度を指定できます。これは、指定された数のメッセージに到達するたびに発生します。
pathを状態ファイルへのパスに置き換えます。このファイルは、最後に処理されたジャーナルエントリを追跡します。
secondsを使用して、レート制限間隔の長さを設定します。この間隔中に処理されるメッセージの数は、burst_numberで指定された値を超えることはできません。デフォルト設定は、600秒あたり20,000メッセージです。 Rsyslogは、指定された時間枠内の最大バーストの後に来るメッセージを破棄します。
IgnorePreviousMessagesを使用すると、現在Journalにあるメッセージを無視して、状態ファイルが指定されていない場合に使用される新しいメッセージのみをインポートできます。デフォルト設定はオフです。この設定がオフで状態ファイルがない場合、以前のrsyslogセッションですでに処理されていたとしても、ジャーナルのすべてのメッセージが処理されることに注意してください。
以前はインジャーナルについて徹底的に読んでいませんでしたが、ジェームズ・シェイイの答えを読んだ後、それは本当に簡単だと思います。
ルールセットを使用すると、必要なことをすべて達成できます。
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"
)
}