Skip to content

Instantly share code, notes, and snippets.

@asufana
Last active January 3, 2016 20:39
Show Gist options
  • Save asufana/8516071 to your computer and use it in GitHub Desktop.
Save asufana/8516071 to your computer and use it in GitHub Desktop.
Fluentdとは

Fluentdとは

http://frsyuki.hatenablog.com/entry/20110929/p1

  • syslogdのように、イベントログの転送や集約するためのツール

  • ログメッセージにテキストではなくJSONを使う

  • プラグインアーキテクチャを採用

  • SPOF回避のためのログ転送ルーティング

  • Pluggerのようなフィルタ処理(抽出・合成・分岐など)

  • 既にログ収集ツールのデファクト

  • 内部データ保持にMessagePackを利用

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など無視)

Fluentdの利用場面

よくある構成

mongoDBに放り込んでログ分析

Elasticsearch:kibanaに放り込んでリアルタイム・ビジュアライザ

Immutable Infrastructure

  • Immutableを維持するためにローカルデータをどんどん掻き出す

Treasure Dataのデータ転送基盤

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>

思いつく課題

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment