LoginSignup
13
13

More than 5 years have passed since last update.

vagrantを使ってfluentd、fluent-agent-liteでNginxのログを送受信する方法

Last updated at Posted at 2014-08-13

ようやくlog周りをfluentdを使って収集する事になったので、fluentd、fluent-agent-liteの設定を勉強すべくvagrantに立ててみていじってみた。
Nginxを使う事が多いので、本番に近い形でnginxで試してみる。

fluent-agent-liteとは?

fluentdは説明不要かと思いますが、fluent-agent-liteとはログ収集対象のサーバに特化したもの。
正規表現パースしないため動作が軽く、負荷の高いアプリケーションサーバでも問題なく使用可能との事。

vagrantの準備

まだvagrantを使った事が無い人は、下記のリンクを参考にしてインストールしてみて下さい。
Vagrant セットアップ (Mac)
VirtualBoxとVagrantで開発環境を構築

vagrantを2つ起動する必要があります。
下記のようにそれぞれipアドレスを設定してvagrant upを実行。

(送信側)

$ cd /home/moriyaman/work/vagrant_sent
$ vagrant init centos
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.network "private_network", ip: "192.168.33.11"
end
$ vagrant up

(受信側)

$ cd /home/moriyaman/work/vagrant_rec
$ vagrant init centos
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.network "private_network", ip: "192.168.33.10"
end
$ vagrant up

送信側:fluent-agent-lite

#fluent-agent-liteのインストール
yum install perl-ExtUtils-MakeMaker
git clone https://github.com/tagomoris/fluent-agent-lite
cd fluent-agent-lite
./bin/install.sh

インストールはこれで完了。設定ファイルを編集。

/etc/fluent-agent-lite.conf
### LOGS: tag /path/to/log/file

TAG_PREFIX="nginx"
LOGS=$(cat <<"EOF"
access_log     /var/log/nginx/access.log
EOF
)

#ポートはデフォルトの24224から変更
PRIMARY_SERVER="192.168.33.10:24207"

fluent-agent-liteを起動させときます。

$ sudo /etc/init.d/fluent-agent-lite start

続いてNginx。自分はchefで入れましたが、インストール方法は任せます。

参考URL:
CentOS6.xにてnginxの最新版をインストールする手順
CentOS 6.3にnginxをインストールする方法

インストールしたらNginxのlogフォーマットをltsvに変更。

/etc/nginx/conf.d/default.conf
 log_format  ltsv  "remote_addr:$remote_addr\t"
                                 "remote_user:$remote_user\t"
                                 "time_local:$time_local\t"
                                 "request:$request\t"
                                 "status:$status\t"
                                 "body_bytes_sent:$body_bytes_sent\t"
                                 "http_refer:$http_referer\t"
                                 "http_user_agent:$http_user_agent";

    access_log  /var/log/nginx/access.log  ltsv;


※ltsvって??という方は下記のURLが参考になります。
LTSV FAQ - LTSV って何? どういうところが良いの?
LTSVフォーマットなログを fluentd + GrowthForecast で料理

受信側:fluentd

td-agentをyumでインストール

/etc/yum.repos.d/td.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
yum install td-agent

必要なプラグインをインストール。

$ /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-parser
$ /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-file-alternative

設定ファイルは下記のようにした。

/etc/td-agent/td-agent.conf
<source>
  type forward
  port 24207
</source>

<match **.access_log>
  type copy
  <store>
    type file_alternative
    path /tmp/logs/access_log.*.log
    time_slice_format %Y%m%d
    output_include_time false
    output_include_tag false
    output_data_type attr:message
    add_newline true
  </store>
  <store>
    type parser
    tag nginx.access
    time_format %d/%b/%Y:%H:%M:%S %z
    format ltsv
    key_name message
  </store>
</match>

<match nginx.access>
  type file
  path /tmp/logs/parsed_log
</match>

吐き出しのフォルダのパーミッション周りを設定。

$ mkdir /tmp/logs/
$ sudo chown root:vagrant /tmp/logs/
$ sudo chmod 775 /tmp/logs/

fluentdがltsvをサポートしてくれているので、formatはltsvで問題なし!

fluentdを起動。

$ sudo /etc/init.d/td-agent start

あとはvagrantの送信側のipにアクセスを飛ばせば、無事受信parse側で前/parse後のlogファイルを生成する事ができました。

$ ll /tmp/logs/

-rw-r--r--. 1 td-agent td-agent 3089  8月 13 14:22 2014 access_log.20140813.b5007bf755fc6330e.log
-rw-r--r--. 1 td-agent td-agent  347  8月 13 14:22 2014 parsed_log.20140813.b500838471fd35f8e

上手く行かないときは・・・

・送信側が上手く転送できているか?

下記のファイルにエラーメッセージが吐き出されていないか確認

$ sudo tail -f /tmp/fluent-agent.log 

・受信側のtd-agentが立ち上がっているか?

僕はこれで少し手こずりました。

[vagrant@localhost ~]$ sudo /etc/init.d/td-agent start
Starting td-agent:                                   [  OK  ]
vagrant@localhost ~]$ sudo /etc/init.d/td-agent stop
Shutting down td-agent:                              [  失敗  ]

立ち上がったっぽく見えて、実は立ち上がってない。。。
シャットダウンで失敗するのはその証拠です。

その場合は、ログを確認しましょう。
勝手にエラーでシャットダウンかかっているケースが多いです。

$ sudo tail -1000 /var/log/td-agent/td-agent.log

・受信側の設定ファイルはおかしくないか?

設定ファイルの記述方は公式サイトを見るのが一番早いです。
ググると結構formatで苦戦している人がいた。。。
自分で正規表現で作る場合はこのツールオススメ。
Fluentular - Fluentdに設定する正規表現をチェック

参考URL

fluentd (td-agent) , fluent-agent-liteを使ってMySQLのslowqueryをmongoDBに突っ込んで見やすくする
fluent-agent-liteとtd-agentで複数サーバーのログを集約 + chefでの設定例
fluent-agent-lite と td-agent で、小さくはじめる fluentd
Vagrant を使って fluentd のクラスタリングを試す
さらいfluentdの設定ファイル #fluentd ~fluent-plugin-parser,fluent-plugin-file-alternative,fluent-plugin-elasticsearch
Fluentdでparser用の正規表現を書く・試す

13
13
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
13
13