2013年12月14日土曜日

Fluentd Casual Talks #3 行ってみた【まとめ】#fluentdcasual

昨日パリから帰って来て口の中にワインの味が残ってる状態ながら、
Fluentd Casual Talk#3@Denaに行って来た。

Fluentd Casual Talks #3 : ATND






iOSエンジニア兼大学院生の僕ですが、最近話題という事でFluentdインターン先でいじらせてもらっててElasticsearch + td-agent + Kibana3という感じのものを構築してログとか見てニヤニヤしてます。
それでこのログ突っ込むあたりもう少し色々なことできるらしいけど具体的には何ができて、どうすりゃえんねん・・・みたいな感じで悩んでたので今回の開催がとても嬉しかったです。

今日はこんな感じでお話をしてくれた

*5分のLT
*質疑応答なし
*懇親会なし

2件もライブリリースがあり、カジュアルな話からギョームな話まで
windowsで歓声があがり、ご家庭でのご利用話まで出て盛り上がった発表内容は以下。

(今回、Fluentdどころかインフラにもあまり造詣の無い僕ですが備忘録的にまとめさせていただきました。間違ってるところ等あればコメントorTwitter(@jumbOS5)にてご指摘いただければ幸いです。)


1「fluent-plugin-norikuraについて」スライド

主催者 LINEより @tagomorisさん

・Fluentdの経験者は会場の7割くらい
知ってる人はほぼ全員

・Norikraとは?ソース
スキーマレスなイベントストリームにSQLで処理を書いて情報を取れる。
GPL V2(中でエスパーというのを使ってるため)、gemにある

・何をするか
select name, age from events where current="Shibuya"みたいなクエリを投げると
ストリームデータから情報を取れる
events.win:time_batch(5 mins)みたなクエリを追加すると5分ごとのデータを取れる
select max(age) as ac from eventとかもできる
countもできる
ハッシュの指定とかもできる

・使い方
fluentdのニューレリックモニターの設定を書く、monitor_keyが同じならいいけど違うとその度に書かないといけない。fluentdのリスタートも必要
これをnorikraにするとクエリを書くだけで大丈夫。リスタートなし、monitor_key大丈夫

・性能
data_counterでたものにパターン認識でマッチした物を数えるプラグインと比較、
タグごとに出力をまとめたりできる。設定がわかりにくい、output_per_tag
これでもnorikraならselect service count(if(status/200=2,1,null)) as  success

3つのプラグインを持っていて、in_norikra, ou_norikra, out_norikra_filter
filterはout_exec_filterのやっているのと同じ

・別に作った理由
out_norikra_filterはこれまでnorikraを使った事無い人向け
設定しておくとnorikraサーバを子プロセスとして起動して、
自動でごりごりやってくれる。


**感想
とてもいいと思った、Elasticsearchにログデータを突っ込むにあたって
動的にフィルタを書いたり、ちょと必要なデータが欲しい時にSQLでクエリが書けるとチーム内でも共有しやすい。

Norikraに関してはpixivのはるかさんがQiitaで投稿していた、いじりたくなる
Qiitaの記事

2 Fluentdでshadowサーバを用意したら捗った話 スライド

Dena よりfluentdのコミッタ @sonotsさん

・@sanotsさんの作ったもの
Haikanko:Fluentd用のクラスタ管理ツール
Yohoushi : GrouthForecastグラフツール

・Fluentdに関して
ログ監視、ログ収集で使ってる

・shadowサーバを入れること
本番環境に入れてみたらUTF-8 invalidとか、動作したら負荷が上がったとか←ありがち!!そこでこれをshadowサーバを使って解決

・shadowサーバとは
>ユーザーの実リクエストを複製して作った検証用のサーバ、Kageなどが有名

・精度検証、導入
dummy_log_generatorでランダムにログを生成、システムのI/O限界を引き出せる
ログ読み込みはliteで56万行/sec、fluentdでは15万行/sec
.confにちょろっとstoreタグで送信先を複数指定してあげればいい

・なぜかメモリをすごくくった
一回データを読み込んでチャンクに入れて、tcpソケット開いて閉じる
なので出力が落ちたりする。
ログ送信のベンチマークをやると、buffer_chunk_limitいじると
fluentd v10で3.2万行/secが限界
tcpソケットをkeep_aliveしてやればいいんじゃないかってことで、
プラグインで効果が出た

fluentd-agent-liteでは52万行/secで特に問題なく動く

・まとめ
Shadowサーバにより本番データでテスト可能に。
Deliverノードの安定パラメータの紹介。

**感想
shadowサーバという概念は初めて知ったけど、結構一般的な物なんだろうか?
RubyやPerlで書かれたモノもあるけど調べてるとGo言語がやたら出てくるなぁ、
この際だからいじってみようか・・・と思ってたら次の発表が・・・

3「Fluentd go implementation(仮」スライド

はてなCTO @stanakaさん

・冒頭トーク
京都で働きたいならはてなへ
はてなでは1000usersクラブがある
いい感じにキモかったあの青いぬいぐるみ(Gopher人形と言うらしい)はGoコンで話すと貰えるらしい
会場で10人くらいGo触った人がいた

・Goについて
2009年にGoogleからリリースされた、最新の言語
徐々にプロダクトに導入されている

・プロダクト
DevOps系のDockerとかPackerとかが書かれている

・特徴として
コンパイルして使う、静的、型推論が入っている
型はある程度推論しているモダン、ガベージコレクションが入っている
一番特徴的なのがConcurrency Model(goroutine, channel)という
新しい概念が入っている

・コード
結構早い、RubyとかPerlがコアはCで実装しなきゃってとこでもダイジョブ
スモールフットプリント、コード整形やテスト・ドキュメンテーションをする機能が標準である。標準ライブラリも147ありたいていはある、困らない。

・Go v1.2から
 ・Fluentd Go implementation - ik(アイケー)
まだまだ現状ではリリースできる状態ではない、
wgetで持ってくるだけでインストールできる
パフォーマンスはまだ最適化中、改善中
footprintが小さくて、導入が楽、パフォーマンスはまだ改善中
興味があればプルリクを送ってください

**感想
Go言語童貞の僕には何が何やらさっぱりだったけど、Go言語のAdvenCalenderもけっこう早い事埋まってたし、やっぱ最近のトレンドとしてGo言語は外せない物になってきているようですね。
まだプロダクトの事例とか少なくてサービスに適用するのはちょいこわですが、
暇な時間を作って触っておきたいです。

4 Windows版fluentdで幸せになれますか

起業向けソフトウェアベンダー fluentd windowsブランチのコミッター @okahashi117さん

・windowsでのfluentdの現状
winではgem installでこける

・動くようにしたデモ
https://github.com/fluent/fluentd/tree/windows
からwindowsブランチをチェックアウトしてgem install pkg/fluentd-0.10.35.gem (あやしい)
10.35ベースでやる、win7、Ruby 1.9.3-p429

*プラグイン
githubのREADMEを読んでくれ

*何をやっているのか
・エンジン部分
cool.io ver1.2.0の適用
HUP, USR1シグナルハンドラのインストール制御
forkをspawnで置き換え
コンソールのエスケープコード使用の抑制:文字化け制御
windowsプラットフォームの判断に寄る実行ブロックの切り替え:Linuxでも動く

・プラグイン
in_tail:
inode値というファイル一意の識別師がwinではない、win32APIのgetFileInformationByHandleで代用。
ファイルのオープン処理がwinでは共有モードの指定が必要、これをrubyでは指定できないのでwinのAPIで実装

out_forward:
tcpソケットの何かをオフにする

まだ本番では実証しないでください、ダメだし・プルリク送りましょう.

**感想
メモ帳とDOSコマンドプロンプトで動くgemにfluentdに・・・
新鮮だったのは僕だけじゃないはず。デモでログが動いた時には会場から歓声が起こってて楽しかったw
でも果たしてそこまでしてwindowsで動かす必要が・・・あるのかどうかはまだ未熟な僕にはわからない。業務PCとかに入れて作業ログを集計したりとかするんだろうか?


5 Treasure Agent Monitoring Service スライド

Treasure Data より @kzk_moverさん

・TreasureData,Fluentdについて
Nintendo、Line、Amazonで導入されている。世界中で様々なところで使われている
ドキュメンテーションはUSの方が追い抜きそう
Monitで監視する事例とかあるけど、バグがあんまないので問題が起きたとき困る人がいる。

・fluentdの何をモニタリングすべきか?
基本:プロセス、ポート監視、メモリ
Fluentdに関して:buffer溢れ、buffer flush リトライ回数、Fluentdエラー・ワーニングログ

monitor agentというプラグイン
内部情報を取って来れる、バッファ情報を取れ溢れなどを検知できる

・会場内にアンケート
プロダクトで使ってる      20人ほど
CPU/MEmoryの監視       15人ほど
Fluentdのポート監視してる     15人ほど
Fluentdのログを見てる     10人ほど
Fluentdのバッファを見てる   5人ほど

・Treasure Agent Monitoring Serviceのリリース
可視化、アラートを出す。
td-agent v1.1.8には入っている
APIKeyが必要
無料
台数などは制限をかける

**感想
エージェントの死活監視とかモニタリングは確かに必要だと思ってもあまり手をかけれないのが現状かも、実際にサービスに適用してる人には欲しかったサービスだと思う。
 フィードバックを頂ける先進ユーザーを探しているとのことで、ギョームで使ってる方は是非検討してみてはいかがだろうか

6 増えすぎた設定ファイルの行数をどうするかみたいな話をChefのcookbookとくっつけて スライド

@kenjiskywalkerさん

td-agent.confが2万行とかあるところをchefでキレイにする話
include使わない人はそんなにいない

chefでインクルードレシピというのがあり、globでファイルの読み込みを行う
長くなるconfファイルの管理をchefで、どこに何があるのかを把握しながら記述してゆく

あとでブログ(さよならインターネット)でまとめてくれるそうです

**感想
まさに僕の欲しかった話の一つでもっと詳しく聞きたかったけど、
5分というかなり短い中だったのでかなりざっくりと話していた。
chefは最近飛行機の中で以下を一気読みしてかなりモチベーションが上がってるので、
今回のスライドと合わせていろいろ検証したい。ブログの更新が超楽しみです。




**追記 :12/14 9:08
さっそく@kenjislkywalkerさんがブログ更新してくれてました!!やったー!!ギョームさぼってよむぞ!!ありがとうございます!ありがとうございます!!
Fluentd Casual Talks #3 でChefの話をしてきました #fluentdcasual - さよならインターネット

7 Fluentd as a Middleware Engine 

リブセンス インフラ @yoshi_kenさん

Yamabiko:td-agentをフォークしたミドルウェア
MySQLのテーブルをElasticsearchにレプリケート、これをfluentdでやる
fluentd-plugin-musql-replicatorでやる
非同期でインプット・アウトプットで切る

MySQLを利用しながらできる

**感想
リブセンスって技術的にも結構面白そうな事やってるのを初めて知って
話聞きに行きたいなぁと思った。yamabikoに関してはあまり調べても出てこなかったんだが公開とかされてるんでしょうか?

開発者のおすすめするFluentd解説記事まとめにはお世話になりました。

8 ご家庭でfluentd 関連情報

@bash0C7さん

MBA->Rasberry Pi
MBA→SQS→RP
fluentdは画像も送れる
アクティビティの記録に、ゆるきゃらアイドルのツイート画像取得に

**感想
fluentdで画像が送れるのは初めて知りました、またRPに対してどうやって情報送るのかなーってことで定期的にSQL通してデータをポップするって言うのがクールでいいなぁと思いました。
補足資料

9 OutputとBufferedOutputの間をうめる スライド

@kazegusuriさん

ソース
output, bufferd_output比較
普段はoutput、失敗はbufferd
bufferは失敗時の再送をまとめて行う、失敗時にロストする
バッファリングして・1リクエスト毎に処理する、再送する

・プラグインの効能
バッファリング、1リクエスト毎の再送、チャンクの途中で再起動しても続きから再開

**感想
Output, BufferedOutputのちがいをわかりやすく言ってくれてとても嬉しかった、
プラグインを自作する時に覚えておくと使えそう。

10 postgres関連の何か

 @choplinさん

・Mongoについて
一番使われているのはmongo(名前を言ってはいけない)
capped collectionがある、レコードをそのまま入れられる

**感想
PostgreSQL + pg_msgpackが数字が多くなるたびに早くなってたので、一方名前を言っては行けないあのデータストアのデータサイズがやばかった。

ほぼ内容はfluentdよりpostgre、pg_maspackの話だったw
pg_msgpackは最適かさぼってもpostgre内部でtext型扱いしてるjsonより、
サイズが半分くらいで済むみたいな話もあるし、一番使われている名前ry)よりも考慮すべきデータストアなんじゃないか?詳しく調べないと・・・

11 Fluentd v11について スライド

Trreasure Dataより @frsyukiさん
新機能
・無停止再起動
TCP listenをスーパバイザのプロセスでやる、ソケットはオープンしたまんまなので
無停止の再起動が可能になる

・マルチプロセス化
workerタグ(借)によって複数のワーカーを作れて重要なログや、実験的なプラグインを分離して使う事が出来る

・エラーストリーム
エラー処理はプラグイン依存、エラーをFluentdのコアで処理するように変更
特殊ラベルを使いエラーの怒ったレコードに処理をするように

・プラグインのバージョン管理
Gemfileを置いておいて、fluentd自体もバージョン指定できるように

・タグの書き換えがいらないストリーミング処理
matchのネスト

・ログレベル
今まではFluentd全体で一つしか指定できなかったけど、プラグインごとに指定できるように

**感想
ログレベル、無停止再起動はかなり欲しかったので入ってくれて嬉しい。
ここでもライブリリースがあったんでとりあえず入れてみる事にした。


----------------------------------------------------------------------------------以上

2013/12/13 Fluentd Casual Talks #3 は11件の発表で様々な技術の好評が飛び交い、一個5分ながらもとっても貴重な濃密な時間が過ごせました。
Fluentdはインターンでちょろっといじらせてもらってるくらいなので「プラグインの自作とかは正直だるい・・・」と思ってたんですが、今回のイベントでだいぶムラムラきたのでなんか作ります!!Rubyを勉強するところからがんばらなきゃ・・・

シールも貰って大満足。

ハッシュタグ #fluentdcasualでtogetterにもまとまってました!!

Ustreamも残ってました!!必聴!!
Ustream

**以下他の方のまとめ
@boheanimatoさん→ Fluentd Casual Talks #3にいってきました。 #fluentdcasual
@ryonextさん → Fluentd Casual Talks3に参加してきました #fluentdcasual

0 件のコメント:

コメントを投稿

ShareThis