LoginSignup
1
2

More than 3 years have passed since last update.

fluentdのsyslogプラグインを使ってsyslogプロトコルでログを受け取る

Last updated at Posted at 2020-05-15

syslogプロトコルをfluentdで直接待ち受けてログを受信します。

ログの出力先はfluentdの動くホスト上のファイルとします。

最小の設定でとりあえずfluentdを起動

設定ファイルは以下のような感じです。

sample.conf
<source>
  @type syslog
  port 5140
  bind 0.0.0.0
  tag test
  <parse>
    @type none
  </parse>
</source>
<match test.**>
  @type file
  format single_value
  append true
  path output.txt
  <buffer>
    chunk_limit_records 1
  </buffer>
</match>
$ fluentd -c sample.conf

これでUDPの5140ポートでログを待ち受けます。

設定ファイルの説明

syslogで受け取るPriority(syslogにおいてfacilityとseverityを表すuser.infoとかsecurity.alertみたいな文字列)はfluentdのタグに連結されます。この設定では tag test と書いているので、user.infoというPriorityのログが来たら、fluentdでのタグは test.user.info に変わります。したがって、設定ファイルのmatchではsyslogから来たログをすべて受け取るにはワイルドカードを使って test.** のように書く必要があります。

chunk_limit_records 1 という記述は、動作検証しやすいように、ログをfluentdがバッファリングせずに1件ずつファイルに書き出してほしかったので書いたものです。

loggerコマンドで試してみる

loggerというコマンドでsyslogプロトコルを発することができます。fluentdをローカルで動かしていて5140ポートで待ち受けているので、以下のようにすればfluentdにログを手動で送信できます。

$ logger -n localhost -P 5140 -p user.info -t tagsample1 messagesample1
$ logger -n localhost -P 5140 -p user.info -t tagsample2 messagesample2

-pオプションはsyslogのPriority、-tオプションはsyslogのタグ、その後ろはログ本体です。このloggerコマンドによりfluentdは次のようにファイルに出力します。

$ cat output.txt.20200515.log
1 2020-05-15T17:43:53.083565+09:00 0e495fc17308 tagsample1 - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="589500"] messagesample1
1 2020-05-15T17:44:42.659572+09:00 0e495fc17308 tagsample2 - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="614000"] messagesample2

parseの設定

  <parse>
    @type none
  </parse>

fluentdの設定ファイルのこの<parse>の部分がないと、loggerコマンドからログが届いたときに invalid input data というエラーが発生して受け取ることができませんでした。

<parse>の部分を以下のようにすると、loggerコマンドからの場合は日時などのメタ情報がいっさいなくて、ログ本体のみが出力されました。

  <parse>
    @type syslog
     message_format auto
  </parse>
$ logger -n localhost -P 5140 -p user.info -t tagsample3 messagesample3

$ cat output.txt.20200515.log
messagesample3

<parse>message_formatにはautoのほかにrfc3164またはrfc5424という値も設定できます。rfc5424にすればRFC5424でログをパースしてくれます。

RFC3164とRFC5424の違いを含むsyslogプロトコルの詳細は以下の記事がわかりやすいです。

syslogプロトコル再入門 ~フォーマット(BSD/IETF形式),Facility/Severity一覧,Ciscoの設定~│SEの道標

リンク

fluentdのsyslog Inputプラグインのドキュメント
syslog - Fluentd

fluentdのsyslog Parserプラグインのドキュメント
syslog - Fluentd

ソースコード
fluentd/in_syslog.rb at master · fluent/fluentd
fluentd/parser_syslog.rb at master · fluent/fluentd

以上。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2