概要
ログ収集管理ツールであるFluentdについてまとめます
どういうものかをまとめつつ簡単なサンプルを動かすところまで記述します
Fluentdとは
Fluentdはログ収集管理ツールで、どういったログを収集させるかやどういうふうにログを保存するかを柔軟にカスタマイズできる
図でわかるように好きなログについて収集することができて、何かしらのツールに連携することができる
また必要最低限の情報のみにフィルタすることができたり指定した別のremoteサーバに連携することができる
以下のようなことを行いたい場合に適している(例)
- 数十台のフロントサーバのアクセスログを収集して可視化させたい
- サーバの負荷状況を収集して監視を行いたい
- 独自で作成したスクリプト(例えばMySQLのテーブルをcountするスクリプト)を使ってその実行結果を可視化させたい
※ Fluentdはログ収集、連携だけを担当しているので可視化、監視させる場合は別途ツールを準備する必要がある
※ 有名所だとFluentd + Elasticsearch(検索エンジン) + Kibana(ログデータを解析して可視化するツール)で可視化を行う方法がある
プラグインについて
Fluentdではログの入力・出力をプラグインによって設定を行う
プラグインは大きく分けて2つに分類される
inputプラグイン | 入力部分を担当する、どういったものをfluentdが受け取るか |
outputプラグイン | 出力部分を担当する、どのように保存するか |
例えば、in_tailプラグインではログに出力されたものをFluentdで受け取って何かしらの処理を行うことができる
ログをどこまで読み込んだかのポジションファイルを作成することで「tail」という名がつくようにログをtailしているかのように新しく出力されたものだけを見ていく
従ってログファイルを都度最初から読み直す、ということにはならない
そのin_tailで読み込んだものは、outputプラグインでどのように保存するかをカスタマイズできる
例えばout_fileプラグインではファイルに保存することができる
その他にも、in_execプラグインを使うとコマンドの実行結果をFluentdで受け取ることができるので MySQLのあるテーブルの件数を可視化したい、という時にcountするスクリプトをin_execにより実行させて 可視化サーバーに連携するということができる
また、out_stdoutプラグインを使うとfluentdのログファイル(/var/log/td-agent/td-agent.log)に出力させることができたりもする
どういったものがあるかは以下の公式サイトを参考にする
input-plugin-overview
output-plugin-overview
環境準備
試した環境
$ cat /etc/redhat-release CentOS release 6.8 (Final)
fluentdインストール
// curlが必要なのでインストール $ sudo yum -y install curl // tg-agentがインストールされる $ sudo bash -c 'curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh' // 起動 and 再起動時に自動で起動させる設定をonにする $ sudo bash -c 'service td-agent start; chkconfig td-agent on'
apacheのアクセスログを収集させるのでapacheをインストール
// apache インストール $ sudo yum -y install httpd $ sudo bash -c 'service httpd start; chkconfig httpd on'
アクセスログをファイルに出力させる
Fluentdの設定を記述する
$ cat /etc/td-agent/td-agent.conf <source> type tail path /var/log/httpd/access_log pos_file /var/log/td-agent/access_log.pos format apache2 tag apache.access.test </source> <match apache.access.test> type file path /tmp/output_access_log </match>
設定について
・type tailでアクセスログを読み込む
・apache.access.testというタグをつける
・match apache.access.testの箇所でtail時に設定したタグがマッチされてfileとして出力される
反映の仕方
$ sudo service httpd restart
アクセスログが指定したファイルに出力されていることがわかる
$ tail /tmp/output_access_log.* 2016-08-21T04:43:33+00:00 apache.access.test {"host":"XXX.XXX.XXX.XXX","user":null,"method":"GET","path":"/","code":200,"size":21,"referer":null,"agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X XXX) AppleWebKit/XXX.XXX (KHTML, like Gecko) Chrome/XXX.XXX.XXX.XXX Safari/XXX.XXX"} ※ 念のため一部出力をXXXに加工しています
コメントを書く
コメント一覧