電脳世界のケーキ屋さん

考えの甘い甘党エンジニアがいろいろ書くブログ

rsyslogとtelegraf

何となく syslog をイケイケに監視してオレカッケーをしたかった.
構成としては, 以下の通り.

  1. rsyslog でインフラのログを受信
  2. ローカルのtelegrafにTCPでぶん投げる
  3. telegraf が InfluxDBに保存
  4. 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.coninputs.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 でやり取りをする設定になっているので, これでよしとする.