インストール

http://dev.classmethod.jp/cloud/td-agent2-amazon-linux/

上記ページに沿って行った。CentOSでも同じ手順。

手動で実行するならば以下の通りに実行する

yum.repositoryの追加

[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0

td-agentのインストール

yum install td-agent

設定ファイル

sourceで入力を定義して、matchで処理を行う。matchで複数の処理はできないので別々のプラグインで複数処理をしたい場合はtagをつける。

<match apache.access>
  type file
  path /var/tmp/apache_all.log
  tag next.apache.access
</match>
<match next.apache.access>
  type file
  path /var/tmp/apache_all2.log
</match>

設定ファイルのインクルード

include conf.d/*.conf

httpポート8888で待ち受け

# http://localhost:8888/<tag>?json=<json>
<source>
  type http
  port 8888
</source>

type forwardの場合はhttpアクセスはできないがそのポートで待ち受けすることになる。

type(subtype)の説明

type名簡単な概要
null転送せずに捨てる
forestタグ名を置換変数化できるので、まとめて同じような設定をしたいときに使う
rewrite_tag_filter正規表現でタグづけできる
record_modifier新たに属性を追加できる。たとえばApacheログにホスト名を付与したりとか

ローカルのファイルを転送する。

<source>
  type tail
  format apache
  path /var/log/httpd/*_access_log
  tag apache.access
  pos_file /tmp/fluentd-apache.pos
</source>
<match apache.access>
       type s3
       aws_key_id 
       aws_sec_key 
       s3_bucket bucket_name
       s3_endpoint bucket_name.s3-website-ap-northeast-1.amazonaws.com
       path logs/
       buffer_path /var/tmp/fluentd
       time_slice_format %Y%m%d/%H_apache.log
       time_slice_wait 30m
       flush_interval 60s // この感覚でS3にputするので一日1440リクエストで危うくクラウド破産!
</match>
<source>
  type   tail
  path   /var/log/httpd/error_log
  format apache_error
  tag    apache.error
  pos_file /tmp/apache_error.pos
</source>
# 送り先を Fluentd の標準ログへ出力します
<match apache.error>
  type stdout
</match>
<source>
  type tail
  path /var/log/httpd/access_log
  pos_file /var/tmp/access_log.pos
  tag httpd
  format none
</source>
# 送り先を Fluentd の標準ログへ出力します
<match httpd>
  type stdout
</match>

プラグイン

プラグイン一覧

プラグイン名
copy転送やファイル保存など複数に保存したいときに
rewrite_tag_filter条件に応じてタグを書き換えることができる
forest同じようなタグに一括で適用したい場合に非常に便利

日付付きファイル名に対応!tail_exプラグイン

<source>
  type tail_ex
  format none
  path /var/tmp/%Y%m%d.log
  tag tail_ex_test
  pos_file /tmp/td-agent/tail_ex_test.pos
  refresh_interval 10
</source>

上記の例だと20150831.logが監視ファイル名となる。

format

主要フォーマット

フォーマット名入力文字例備考
none入力そのまま
none_with_hostname入力文字列にhost情報
ltsvdomain:example.comラベル付きのTSV
apache2apacheのcombinedカスタマイズしてたらNG
apache.errorapacheのerrorログカスタマイズしてたらNG
csv,tsvexample.com,/hogekeys domain,pathなどとキーを別個定義

フィルタリング正規表現

formatを自分で作る場合rubyの正規表現の知識が必須。

Apacheの場合(combined以外)

日付の部分の正規表現がとてもめんどくさい。\[(?<time>[^\]]+)\]がその正規表現。フォーマットも指定しないとだめ。

format /^(?<host>[^ ]+) [^ ]+ [^ ]+ \[(?<time>[^\]]+)\] (?<message>[^ ]+).*$/
time_format %d/%b/%Y:%T %z 

参考サイト

http://diary.tachibanakikaku.com/2013/12/fluentdformat.html

手元で正規表現テスト

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'time'
require 'fluent/log'
require 'fluent/config'
require 'fluent/engine'
require 'fluent/parser'
$log ||= Fluent::Log.new
# debug
log = ''
format = //
time_format = ''
parser = Fluent::TextParser::RegexpParser.new(format, 'time_format' => time_format)
puts parser.call(log)
/usr/lib64/fluent/ruby/bin/ruby fluenttest.ruby

テスト実行サイト

Fluentular: a Fluentd regular expression editor http://fluentular.herokuapp.com/

実行

トラブルシューティング

  1. 読み込みファイルの指定にワイルドカードが使えないわかがない!→後で修正
  2. 読み込みにはtd-agentグループ権限が付与されていないとエラー
  3. combinedがパターンマッチされない・・これはカスタマイズしている可能性もあるので今後調査。→カスタマイズしてたら取り込まれない!

Tips

http://y-ken.hatenablog.com/entry/fluentd-syslog-permission

プラグインのgemインストール

yumインストールした場合はtd-agentが管理するrubyでインストールする必要がある。

sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-zabbix

既存ログの取り込み

posファイルを変更してもダメ!tailプラグインしかないのがイタイ。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS