rsyslog#
やんごとなき理由により某組織のネットワーク管理を予算ほぼゼロで保守する必要性があり, 数百のネットワーク機器のlogの収集・検索・可視化等を1箇所で行うため,rsyslogを使いsyslog受信からlogstashへlogをforwardingに関する備忘録である. ChatGPTとかがない時代に試行錯誤して構築したので,最適化されていないと思うがデータフローの概念図はこんな感じ.

当然ならがらsyslogをUTPで受信できるようにファイヤーウォールには穴あけしている.
rsyslog.conf#
デフォルトの設定から変更したもののうちlogstashへのforwaidingに関するもののみ記載している. まず,ログの取りこぼしがないようにburstとintervalを無制限にする.
module(load="imjournal"
StateFile="/var/lib/rsyslog/imjournal.state"
ratelimit.burst="0"
ratelimit.interval="0"
)
私の環境ではrsyslogとlogstashは同じホスト上で動いているので,転送先を"0.0.0.0"として logstashの設定ファイルで定義した適当な待ち受けポートに転送する.
if ($fromhost-ip == "xxx.yyy.www.zzz") then {
action(
type="omfwd"
target="0.0.0.0"
port="5044"
protocol="udp"
)
}
ドメイン(192.168.11.0/24)で設定する場合は
if ($fromhost-ip startswith "192.168.11.") then {
*.*
action(
type="omfwd"
target="0.0.0.0"
port="6647"
protocol="udp"
)
}
のようにすれば良い.
geminiに設定に関してたづねるとどうやら最近は新しいRainerScript形式が採用されているらくし, 以下のように提案してきた.これが正しいかは未検証であるが参考までに
if ($fromhost-ip startswith "192.168.11.") then {
action(
type="omfwd"
target="0.0.0.0" # LogstashのIP
port="6647"
protocol="udp"
)
stop # これより下の処理(ローカルファイル保存など)を行わない場合は追加
}