たそらぼ

日頃思ったこととかメモとか。

fluentdのデモ(ubuntuでローカルでログファイルを蓄積する)

ログ収集でfluentdを使いたかったので、試しにubuntu(ローカル)→ubuntu(ローカル)でやってみた。

fluentdとは

ログを集められるやつ。
www.fluentd.org

嬉しかった点は、
・ログファイルの更新を、configの設定だけですぐに監視できる。
送信先プロトコルの設定がconfigにちょっと書くだけでできる。
AWS上でEC2のログ収集などに一般的に使われている。

ちなみにログファイルの更新検知を自作した時は、bashとかnode.jsで頑張って書いた(しかも性能的には悪かった)ので、
インストールしてちょちょっとconfigを書くだけでログ監視・収集ができるのはとても良かった。
一方で、rubyとかわしわし入れるので、載せるマシンの要件であんまり環境をいじりたくない時は使いにくい。
(とはいえじゃあどうすんだという話ではあるが...。)

ubuntuに入れてみる

ubuntuに入れる場合は、公式ドキュメントのStep1に従ってcurlを叩くと一発で入る。
docs.fluentd.org
なお、ubuntuのバージョンは以下で確認する。

cat /etc/os-release

今回はとりあえず挙動が見たかっただけなので、Step1だけにしておく。

挙動の確認

参考サイトを見つつ、早速動かしてみる。
やったことはこんな感じ:
1. テスト用になんかログっぽいものを吐くスクリプトの作成(正直何でもいい)
2.td-agent.confの設定
3.pos_fileの作成(ないとエラーになる)
4.fluentdの起動

1. ログっぽいものを吐くスクリプトの作成
スクリプトは、正直何でもいいのでサイトを参考に日付を出してみる。
このスクリプトのログファイルが、本当はアプリケーションなどのログファイルとなる。

## I refered http://frazz.hatenablog.jp/entry/2017/09/21/012001
##名前はdate.shとかにしとく。

#!/bin/bash                                                                                  
while true; do date >> exp.log; sleep 3s; done &


2.td-agent.confの設定
下記のようにtd-agent.confを設定する。

# cat /etc/td-agent/td-agent.conf
<source>
    type tail  #更新があればtailして送信する
    format none 
    path /var/log/example  #監視するログファイル
    tag example  #pathで指定したログのタグになる。<match>で指定することで送り先の制御などに使う。
    pos_file ~/ex_log.pos  #ファイルを何行目まで読んだか記録するファイル。場所はどこでもいいけど権限がなかったりファイルが存在しないとerrorになる。
</source>

<match example>
    type file
    path /var/log/td-agent/example  #ログファイルを格納する場所
</match>

3.pos_fileの作成
作り忘れていてめっちゃエラーになった。
権限の関係もあるので、とりあえず~に作っておく。

# cat /etc/td-agent/td-agent.conf

    touch ~/ex_log.pos

ちなみに作り忘れているとこんなエラーが出る。
エラーは/var/log/td-agent/td-agent.logの中身をみる。

'pos_file PATH' parameter is not set to a 'tail' source.

4.fluentdの起動
まずログが吐かれていないとなので、1で作ったスクリプト(date.shに名付けたと仮定しとく)を動かしておく。

./date.sh

続いてtd-agentを起動する。

#起動するとき
service td-agent start 

# /etc/td-agent/td-agent.conf を修正したりとかして再起動するとき
service td-agent reload

上手くいくと、/var/log/td-agent/exampleにログファイルが出力されるはず。

参考にさせていただいた資料

frazz.hatenablog.jp
端的にfluentdの使い方が記載されていてめちゃくちゃわかりやすかった。

d10gkotatsu.hatenablog.jp
fluentdはマシン間でログ送信をする用途が多いので、送信先をローカルにしたい時のconfigの書き方が参考になりました。

qiita.com
pos_fileの設定忘れとパーミッションでめっちゃハマったので参考になりました。。。