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あるとやはり便利!