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 # これより下の処理(ローカルファイル保存など)を行わない場合は追加
}