まっしろけっけ

めもてきなやーつ

fluent-plugin-record-reformerを使ってhostnameを追加してみた

以前下記の記事でFluentd + Elasticsearch + kibanaを導入して
リアルタイムログ解析を行う方法をメモったその後。

実際に導入してみるとhostnameが無いと結局調査を行うには
どのhostに入って詳細な調査をすれば良いか分からないから片っ端から入ってみるみたいな感じになっちゃっていたので
hostnameも追加したいなとずっと思っていてしてなかった。。。


fluentd + elasticsearch + kibanaを導入したので手順をメモ - まっしろけっけ

つい先日hostname追加を行ったのでその内容をメモ
※今回の方法以外にも実は簡単に出来る方法があるかもしれない。

fluent-plugin-record-reformerをinstall

構成は上記の過去記事を参照してください。
今回はfluent-plugin-record-reformerというpluginを使います。
Forwarderにて下記を実行

$ gem install fluent-plugin-record-reformer

fluent.confを編集

# Nginx access logの設定
<source>
  type tail # 
  path /var/log/nginx/access.log # nginxのaccess logのpath
  format nginx # fileのフォーマット
  tag nginx.access.addHostname # tag名
  pos_file /var/log/fluent/nginx.access.pos # position fileを保存しておくpath
</source>

# Rails errorの設定
<source>
  type tail
  path RAILS_ROOT/log/rails.log # Railsのlogのpath指定
  format multiline # 複数行のログを送りたいときに指定
  format_firstline /.*[eE]rror.*/ # Errorもしくはerrorを含む行からformatNの条件を満たすログまでを送信する
  format1 /(?<error>.*[eE]rror.*)\n\n/ # 改行が連続している部分まで送信する
  tag rails.error.addHostname # tag名
  pos_file /var/log/fluent/rails.error.pos # position fileを保存しておくpath
</source>

<match **.addHostname>
  type record_reformer
  renew_record false
  enable_ruby true
  output_tag ${(tag_parts - ["addHostname"]).join(".")}

  <record>
    hostname ${hostname}
  </record>
</match>

<match *.**> # この条件にmatchするtagを下記の条件でごにょごにょする
  type forward
  buffer_type memory # Fluentdの内部バッファリングにmemoryを使用
  buffer_chunk_limit 256m # チャンクのサイズ
  buffer_queue_limit 128 # チャンクキューの長さ
  flush_interval 5s # データフラッシュの間隔
  <server>
    host aggregator_host # aggregatorのIP
    port aggregator_port # aggregatorのfluentの使用portを指定
  </server>
</match>
  • 各tag名に.addHostnameを追加
  • addHostnameが付いているtag用のmatchを追加
  • addHostnameのmatchでhostnameを追加

あとはForwarderのfluentdを再起動させるとhostnameが追加されます

感想

簡単にhostnameの追加が出来ました。
そしてhostnameあるとやはり便利!