rsyslogとtelegraf
何となく syslog をイケイケに監視してオレカッケーをしたかった.
構成としては, 以下の通り.
- rsyslog でインフラのログを受信
- ローカルのtelegrafにTCPでぶん投げる
- telegraf が InfluxDBに保存
- Chronograf で眺める
rsyslogの設定
Fedora では /etc/rsyslog.d/
配下の設定を読み込む形になっていたので,
そこに telegraf.conf
を作成して以下の内容を記述する.
$ModLoad imudp $UDPServerRun 514 *.notice action(type="omfwd" Target="127.0.0.1" Port="6514" Protocol="tcp" TCP_Framing="octet-counted" template="RSYSLOG_SyslogProtocol23Format" queue.type="LinkedList" queue.filename="telegraf_fwd" queue.saveonshutdown="on" action.resumeRetryCount="-1" KeepAlive="on" KeepAlive.Probes="5" KeepAlive.Interval="10" KeepAlive.Time="10" ResendLastMSGOnReconnect="off")
TCP_Framing
がデフォルトだと traditional
なのだが, Telegraf 側が octet-counted
なので, これに合わせる.
合わせないと上手く Telegraf側で受信しない.
KeepAliveの設定はなくても良いかもしれない.
Telegraf の設定
/etc/telegraf/telegraf.con
の inputs.syslog
セクションを編集する.
[[inputs.syslog]] server="tcp://127.0.0.1:6514" keep_alive_period = "10s" read_timeout = "0"
read_timeout
がデフォルトで5秒となっているのだが,
これが有効だと, 1つのTCPコネクションで5秒が経過すると問答無用で対向にFIN ACK を送ってクローズしてしまう.
rsyslog 側では destruct TCP Connection
なんてログが大量に出力されて気付いた.
Telegraf がセッションをクローズした後に送られたメッセージはロストするため, 注意が必要.
omfwd: TCPSendBuf error -2027, destruct TCP Connection to 127.0.0.1:6514 [v8.1907.0 try https://www.rsyslog.com/e/2027 ]
最初はTCPキープアライブの設定を疑ったが, パケットキャプチャを眺めた感じ変わりがなかった.
今回は localhost でやり取りをする設定になっているので, これでよしとする.