http://frsyuki.hatenablog.com/entry/20110929/p1
-
syslogdのように、イベントログの転送や集約するためのツール
-
ログメッセージにテキストではなくJSONを使う
-
プラグインアーキテクチャを採用
-
SPOF回避のためのログ転送ルーティング
-
Pluggerのようなフィルタ処理(抽出・合成・分岐など)
-
既にログ収集ツールのデファクト
-
内部データ保持にMessagePackを利用
http://frsyuki.hatenablog.com/entry/20111006/p1
- 速くて小さいバイナリシリアライザー
- バイナリシリアライザーだけどJSON互換(toString() が JSONを返すとか)
- 各種言語のバインディングが用意されている(C, C++, Ruby, Java, , , D言語とか)
- 日本発のOSS
- 実装がいけてる
シリアライズとは
- シリアライズ:直列化(オブジェクトをバイト列やXMLフォーマット等に変換すること)
- オブジェクトをある状態のまま永続化したり、ネットワークで伝送したりできるようになる
- インスタンスをプロトコル変換する仕組み
利用場面
- あるオブジェクトのスナップショットの保持
- フォーム定義の永続化
- undo/redo記録の永続化
言語非依存にシリアライズする
- 複数システム間でのオブジェクトのやりとりや、サービスを利用する場面
- (Java標準のシリアライズを利用せずに)汎用シリアライズフォーマットを利用する
- JSON
- XML
- Protocol Buffers
- MessagePack
- 速いし拡張性がある
- ただし細かいとこまでは見てくれないから注意(LinkdListなど無視)
-
複数台のサーバからログを収集
-
プラグインと定義でログ収集を構造化
-
条件によって抽出する
-
条件によって保存先を分岐させる、あるいは両方に保持させる
-
プラグイン
-
実践逆引きユースケース
mongoDBに放り込んでログ分析
-
ログ内容をMapReduce解析
-
リアルタイムログ
Elasticsearch:kibanaに放り込んでリアルタイム・ビジュアライザ
Immutable Infrastructure
- Immutableを維持するためにローカルデータをどんどん掻き出す
http://gihyo.jp/news/report/2013/01/2801
- BigDataのクエリサービス
- Fluentdで収集し、SQLでクエリを書ける
- web01とapi01からPlayプロジェクト毎のapplication.logを収集
# vim /etc/td-agent/td-agent.conf
<source>
type forward
</source>
# パース
<match raw.**>
type parser
remove_prefix raw
add_prefix parsed
format /^(?<datetime>.*?,[0-9]{3}) (?<status>.*?) (?<message>.*)$/
time_format %d/%b/%Y:%H:%M:%S,%z
key_name message
</match>
# フィルタ
<match parsed.**>
type rewrite
remove_prefix parsed
<rule>
key message
pattern ^Auth error by sso auth. Access from (127.0.0.1|192.168.0.1)$
ignore true
</rule>
</match>
# 保存
<match play.**>
type file
path /var/log/td-agent/play.*.log
time_slice_format %Y%m%d
time_slice_wait 10s
time_format %Y/%m/%d %H:%M:%S
</match>
# どこにもマッチしないログを保存
<match **>
type file
path /var/log/td-agent/unmatched.*.log
time_slice_format %Y%m%d
time_slice_wait 10s
time_format %Y/%m/%d %H:%M:%S
</match>
-
解析要件はそれほどないが、監視が片手落ち
-
エラー/警告の監視
-
現在は tail -f
-
ログはLTSV形式にした方がいいかもね