2015年8月16日日曜日

fluentdの基本: centralized logging middle ware

ログシステムの保証レベル
at-most-once:最高で1回の送信。ただし到達を保証しない
at-least-once:少なくとも1回の送信。ただし重複の可能性がある
exactly-once:at-most-onceとat-least-onceの両方を満たす


ログ採取ミドルウェアfluentd
chmod +x install-redhat.sh
./install_redhat.sh
sudo service td-agent start //起動default port 24224


ログ/メッセージに任意のタグをつけて逐次的に収集。
フィルタ(データ加工、集計)、バッファ、ルーティングの後に各種データ出力先へ保存(Output Plugin)する。

fluentd メッセージ
[tag, time, record]

in_exec: 一定間隔ごとに指定パスにあるスクリプトをコマンド実行して、結果を収集する
out_exec_filter: tailプラグインなどで収集したログメッセージに対してデータ加工を行う
out_exec: 収集したログメッセージを指定パスにあるスクリプトの引数として渡して実行する

flush_interval: バッファリングしたメッセージを一括で受け渡しする時間間隔

tailプラグイン:既存のアプリログを収集するのに便利


fluentd設定ファイル
/etc/td-agent/td-agent.conf

有効ディレクティブ
<system> // Fluentdのコア部分の動作を決定する
<source> // プラグインの指定
<match> // ログデータの加工、フィルタリング、外部出力
include // 内部または外部の設定ファイルのロード

以下、設定ファイルの各ディレクティブの説明。[]内はデフォルト設定


system
コマンドラインの引数より優先される
log_level: [info]
suppress_repeated_stacktrace: 連続した同一エラー出力を抑制 [抑制無し]
emit_error_log_interval: 指定時間内の同一エラー出力を抑制 [抑制無し]
suppress_config_dump: 起動時に設定ファイルの標準ログ出力を抑制


source
ログの入力元を決定する。
type: Inputプラグインの指定

<source>
  type <name of plugin>
  tag <output tag>
  <option of plugin>
</source>

tailの場合、formatが必須。formatは正規表現で記述可能。例えばapachなどプリセットも用意されている。


match
ログの出力先を決定する。
type: outputプラグインの指定。フィルタリング、ルーティングも可能。

<match <マッチさせるタグ>>
  type <プラグイン名>
  <プラグインのオプション>
</match>

一度受信したtagをルーティングして、vhostのドメイン部分をタグに含めて再度ルーティングすると、vhostの情報を含むログを出力できる。
outputのプラグインには、fileやs3、mongo、stdoutなどがある。
ルーティング目的では、copy、rewrite_tag_filterなどがある。
一旦matchして出力してしまうと以降のmatchでは引っかからないので、copyなどを利用してうまく設定することが必要。


マッチングタグの記述
*: 1つのタグ要素に合致
**: 0個以上のtag要素に合致
{x, y, z}: x, y, zにマッチ。x, y, zはマッチしたいパターン


fluentdテスト用コマンド
fluent-cat: td-agent付属のコマンド

// 標準出力
echo '{"message":"Hello World."}' | /usr/lib64/fluent/ruby/bin/fluent-cat debug.test // fluent-catにはタグ名を渡す

// ログファイルの参照
sudo less /var/log/td-agent/td-agent.log


example) apache

ログファイルの権限などに注意。間違っている場合td-agent.logにエラーが出力されるので容易にわかる。

0 件のコメント:

コメントを投稿