Fluentd入門の入門

■ 目次

  1. 概要
  2. Fluentdとは
  3. プラグインについて
  4. 環境準備
  5. アクセスログをファイルに出力させる

■ 概要

ログ収集管理ツールであるFluentdについてまとめます

どういうものかをまとめつつ簡単なサンプルを動かすところまで記述します

■ Fluentdとは

Fluentdはログ収集管理ツールで、どういったログを収集させるかやどういうふうにログを保存するかを柔軟にカスタマイズできる
fluent01
図でわかるように好きなログについて収集することができて、何かしらのツールに連携することができる
また必要最低限の情報のみにフィルタすることができたり指定した別の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に加工しています

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です