読者です 読者をやめる 読者になる 読者になる

Fluentd Meetup 2015 夏 に行ってきた

Fluentd Meetup 2015 夏に行ってきました。

f:id:mia_0032:20151228091359j:plain

fluentdなどのシールをいただきました。

全体のまとめ

  • fluentd v0.12は単にログを収集するだけでなく、ログを加工する部分についても改良が加えられた。
  • fluentdはログ収集以外にも、センサーデータを集めたり、本番環境のリクエストを複製したり、キューとして利用したりと、様々な活用例がある。
  • fluent-bit はIoT領域向けの軽量ログコレクタ。
    • 発表のあった後の1週間の間にも、新機能が続々追加されている模様。

各発表のまとめ

Fluentd v0.12完全解説

資料: Fluentd v0.12 master guide @repeatedly さん

  • v0.10
    • ログ転送を目的としており、ログ処理には向いていない。
    • Outputでfilter相当の機能を実装している。
  • v0.12
    • 新機能
      • v1 config
        • hash, array型の追加。
        • Rubyコードを埋め込めるようになった。
        • :secret optionが追加された。
          • つけておくとfluentd自体のログ出力時にパラメータの中身をマスクしてくれる。
      • filter
        • タグを書き換えずにログの書き換えなどが実現できる。
        • v0.10ではOutputごとにトランザクションだったのが、filterからOutputまでがトランザクションになる。
          • 障害耐性の向上。
        • 既存のプラグインではrecord-transformerとgrep, 最近追加されたのはstdoutがある。
        • プラグインの作成方法
          • Filterクラスのfilterメソッドを実装すればよい。
          • もっといじりたい場合は filter_stream を実装するという手もある。
      • label
        • fluentd内のeventのルーティング機能。
        • タグを書き換えなくてもルーティングできるようになる。
        • Engine#emit はdeprecated。 router.emit を代わりに使う。
          • その対応が終わってないプラグインはlabel機能に未対応。
      • error stream
        • エラーが起こったレコードだけを別ラベルとして流すことができる機能。
        • router.emit_error_event でエラーの起こったレコードだけ別処理にすることができる。
      • at-least-once
        • v0.10 では at-most-once のみサポートだったがv0.12からサポート。用途によって使い分ける。
          • at-most-once → ログをロストする可能性がある。
          • at-least-once → ログが複製される可能性がある。
      • HTTP RPCベースの管理
        • signalの代わりにHTTP/JSON APIで管理する。
    • td-agentの最新版およびfluentdのdocsはv0.12ベースになっている。
  • v0.14 (summer, 2015)
    • New Plugin APIs, ServerEngine, Time ...
  • v1 (winter, 2015)
    • new feature

fluentdで本番環境を再現する

資料: Fluentdで本番環境を再現する @toyama0919 さん

Qiita記事: http://qiita.com/toyama0919/items/ae4bc88423317e6668b1

  • Shadow Proxy
    • productionのhttp requestを複製して送信するProxy
    • 本番環境依存のデータや負荷を再現できる。
    • すでに実現するOSSがいくつかある。
      • フロントエンドにミドルウェアを挟みたくないのと、ユーザー影響が心配なので今回は自作した。
  • fluent-plugin-http_shadow
    • fluentdでShadowProxyを実現するプラグイン
      • 専用のログを作ることでpostデータにも対応可能。
    • 設定
      • rateによる希釈
        • 本番と同じスペックは難しい・・・のでサンプリングするための設定。
  • ユースケース
    • バグ発見器
    • ミドルウェアの更新時に問題が起きないか確認する。
      • stagingに同じWebサーバーを用意し、片方だけアップデートする。
      • copyで同じリクエストを複製し、両方に流す。
        • まったく同じリクエストで比較できる。
  • 完全なShadow環境は難しい。
    • メールアドレスなどの情報を隠さないといけない。
    • 意図しないデータの更新が起きないようにしないといけない。

fluent-bit

資料: Fluent-bit @edsiper さん

リポジトリ: github.com

  • 組み込み用Linux向けfluentd
    • IoT分野ではロギングの重要性が高まっている。
    • OSのログだけでなくセンサーデータなども収集できるように。
      • fluentdと同じくinput, outputを組み合わせられる。
    • C言語で書かれており軽量。
    • センサーノードの間に挟まるような使い方を想定している。
      • センサーノード → fluent-bit(RasPi など) → fluentd or storage → 他サービス
  • IoTデバイスはサーバーに送るだけでなくサーバーから受け取ることが必要なのでは?
    • データのロガー・コレクターとして使う用途を想定しているのでそういう機能はない。

LT

fluentd対応MIDIキーボードを作ってみた

Qiita記事: Fluentd対応MIDIキーボードを作ってみた - Qiita @kazunori_279 さん

  • MIDIの信号をデコードしてfluentdに送るというデバイスをFPGAで実装。
    • TCPの実装は WIZnet W5300 を利用してお手軽に済ませた。

Docker and Fluentd

資料: Docker and Fluentd @tagomoris さん

  • Dockerのログの集め方
    • コンテナから集約ノードに直接送る。
      • 集約ノードの設定を配ったり、たくさんのコネクションをさばかないといけない。
    • コンテナのホストで一旦集めてから集約ノードに送る。
      • 設定が楽になる。集約ノードが変更になってもホスト側をを書き換えればよい。
  • Dockerのログドライバがプラグインになったのでfluentdに送るドライバを作った。
    • まだマージされていない。v1.7で入るか?
  • fluentdコンテナは公開されている。

fluentdによる大規模キュー設計

資料: fluentdによる大規模キュー設計 // Speaker Deck @edvakf さん

  • もし10万/secとか数日前まで巻き戻りでやる必要があると汎用キューではつらい。
    • ex. アクセス解析
    • MongoDBは安定性で難があったので、fluentdでやることにした。
      • PHPからログを出力してfluentdで転送してバッチサーバーに出力→デーモン化されたBatchに食わせる。
      • ファイルが残っているので安心。

大量のログをBigQueryに送ってみた

資料: fluentdで大量のログを Google BigQueryに送ってみた #fluentdmeetup /send_a_log_to_bigquery_with_fluentd // Speaker Deck @catatsuy さん

  • buffer_queue_limitを小さく、buffer_chunk_limitを大きくすれば問題なくBigQueryに送れるようになった。
    • ただストリームで送ると料金は10万行で$0.01で結構かかる。
  • コスト面からバッチ処理で送りたい。
    • BigQueryはGzipで送れるのでfluentdでファイルに出力して、そのファイルをJenkinsでキューイングしながら送っている。
      • 失敗したときに失敗した分も送るといった処理が必要。