macでfluentd のインストール 〜 out_exec_filterのrubyを試した #fluentd

@studio3104さんのエントリーを読んでて、↓は確かにできると便利そうだな〜と思ったものの、如何せんperlは使ったことがないのと、丁度Ruby修行中の身なので挑戦してみた。

webのアクセスログを解析する場合は、クエリストリングをパースしてゴニョゴニョしますよね。
解析のたびにパースするんだし、どーせなら全部fluentdにやってもらいたいところですよね。

とりあえずローカルだけでやってみた所、意外とローカルに全部盛りでやってる説明ってあんまり無かったのでまとめてみました。(最近だと皆td-agent使うでしょうしね。)
RVMやbrew等は入っている前提です。(丁度先日のエントリーでまとめてた。)


  • Fluentdのインストール
    • Installing Fluentd Using Ruby Gem | Fluentd
    • mac用のtd-agentってのは無さそうだったので素のFluentd。
    • すげー当たり前の話かもしれませんが、最後に"&" をつけてfluentdを起動した後は、jobs -l で該当のプロセスを確認して、killしてください。
      • mac端末でjobsってコマンドを入れるのはちょっとドキドキしますw


$ brew install mongodb
$ fluent-gem install fluent-plugin-mongo
$ gem install bson_ext -v=mongo_gemと同じバージョン


  • out_exec_filterで実行するRuby
    • スタジオさんのと違って、各パラメータを1フィールドにしています。
      • いつかTreasure Dataに上げる時にこっちのほうがHiveクエリ書き易そうな気がしたので。
    • 確実にもっと綺麗に短く書ける。。
    • printの代わりにputsって書いてて、エラーが出て一部欠落するという現象に結構苦しみました。。


  • 設定ファイル(ローカルの1プロセスで全部やってます。)
    • スタジオさんのblogを参考にout_formatはmsgpackにしています。
    • 今は公式ドキュメントにも書いてありました。

  • ローカルのindex.htmlにランダムなcategoryパラメータをつけて適当にアクセス
  • こんな感じで結果がとれる。
    • Mongoのクエリを駆使することで色々できそう。
    • parseの所で適当に間引いたり、何か目印となるフィールドを入れることもできるはず。
$ mongo
$ use fluent

-- category="01"のアクセス数
db.test.find({path: "/index.html", category: "01"}).count()

-- cateogry単位のアクセス数一覧
db.test.group({key:{category:true}, cond:{path:"/index.html"}, reduce:function(obj,prev) {prev.csum += 1;}, initial:{csum:0 } });


この形式であればTreasure Dataにそのままアップしてごにょごにょできそうなので、後日試してみる。とりあえず、アカウントは作った!


Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]

Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]

Rubyの写経時の環境

最近、コツコツとRubyの写経をしているのでその環境のメモ。




  • ブックスタンド(Ruby関係ない)
    • ソース忘れましたが、t_wadaさんが写経時には必ずブックスタンドを利用しているということなので模倣してた。
    • The RSpec Book のような分厚い本に加え、iPadも立てれていい感じ。
      • Railsの本はPDFで購入したが、初代iPadの純正カバーは写経にはすごく不向き。。
      • これはもっと早くから導入しておくべきだった。

ELECOM EDH-004 ブックスタンド

ELECOM EDH-004 ブックスタンド




数年前を考えると、オンラインでの学習環境も信じられない位整っていますが、ちょっとした時(電車や寝る前)の復習や、業務時に「あれ、どうやるんだったっけ?」みたいな時の読み直しのことを考えると、まだまだ書籍での写経にもメリットがあるのかな〜と思ったり。
Ruby on Railsの基礎 (全46回) - プログラミングならドットインストール
Code School
そして、オンライン学習がネット完結ではなく、テキスト(PDFや紙書籍)を用いたものになれば最強な気がするので、今後の進化に期待。



初めてのRuby

初めてのRuby


The RSpec Book (Professional Ruby Series)

The RSpec Book (Professional Ruby Series)


RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

「新年会ハッカソン ゼンリン地図を無料で使い倒せ!!」に参加しました

↓のイベントに参加しました。
新年会ハッカソン ゼンリン地図を無料で使い倒せ!! on everevo


  • やったこと
    • ゼンリンの地図でGeoHexを描画できるようにした。
    • 検索実行時に自分のサーバにダミーリクエストを飛ばし、fluentd経由でMongoDBにユーザの利用状況が蓄積されるようにした。
      • ただ、検索APIでエラーが出たのを放置したまま進んでしまい、検索自体がダミーのまま。。


  • 思い/ 狙い
    • ユーザが位置情報アプリをどのように利用しているかを簡単に見ることができれば、街の様子が見えてくるはず!!
      • 今ここでどんなワードで検索が行われているか?
      • どんなスポットが見られているか?
    • javascript APIだけで作ったサイトの利用状況を簡単に蓄積したい。
      • ログ集計スクリプトを作ったり、それ用にサーバの実装追加/修正をしたりというのは避けたい。
      • しかもリアルタイム。
    • Fluentdを使いたかった。(これがあって無理矢理つなげた感が無くもない。)
    • GeoHexベースで情報を蓄積したい。
      • メッシュベースもいいけど、見た目/大きさの融通/範囲指定等々でGeoHexに分がある。
      • ライセンス注意。



<source>
  type tail
  format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\?]*)\?word=(?<word>[^ ]*)&level8_x=(?<level8_x>[^ ]*)&level8_y=(?<level8_y>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
time_format %d/%b/%Y:%H:%M:%S %z
  path /var/log/httpd/access_log
  tag apache.access
</source>

<match apache.access>
  type mongo
  database zenrin_0126
  collection words
  flush_interval 1s
</match>



f:id:seikoudoku2000:20130126173406p:plain

> db.words.group({key:{word:true}, cond:{level8_x:"33789", level8_y:"-12063"}, reduce:function(obj,prev) {prev.csum += 1;}, initial:{csum:0 } });
[
	{
		"word" : "%A5%AB%A5%D5%A5%A7",
		"csum" : 1
	},
	{
		"word" : "%A5%D3%A5%B8%A5%CD%A5%B9%A5%DB%A5%C6%A5%EB",
		"csum" : 1
	},
	{
		"word" : "cafe",
		"csum" : 3
	},
	{
		"word" : "lunch",
		"csum" : 1
	},
	{
		"word" : "%A5%E9%A5%F3%A5%C1",
		"csum" : 1
	}
]


> db.words.find().limit(1);
{ "_id" : ObjectId("5103814a67ba440bd2000010"), "host" : "118.21.107.15", "user" : "-", "method" : "GET", "path" : "/zenrin/dummy.html", "word" : "%A5%AB%A5%D5%A5%A7", "level8_x" : "33789", "level8_y" : "-12063", "code" : "304", "size" : "-", "referer" : "http://ec2-54-249-128-153.ap-northeast-1.compute.amazonaws.com/zenrin/index.html", "agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17", "time" : ISODate("2013-01-26T07:09:09Z") }





  • 今後
    • in_tailの使い方がいけてないので、out_exec_filterを使ったやり方に変更。
    • GeoHex v3のruby gem作成。
      • サーバ側でごにょごにょしたくなったら欲しい (& 自分的にRubyの練習)
    • 蓄積した情報を活かしたコンテンツの検討
      • 利用者増えないと意味ないですが、、、
      • 仕組み自体は色んな所で使えると思うので、皆でLet's データマイニング
  • 結果
    • 惨敗。。
  • 感想

優勝した人は、4sqの検索が貧弱で近くのコンビニ探すのも一苦労だから、ゼンリンのコンビニPOIと4sqのコンビニPOIを紐づけてチェックインできるようにする、みたいのを作っていました。
自分もすごいな〜と思ってこれに投票しましたが、1dayハッカソンということで、さくっと他社のAPIを絡めれる引き出しと、現状の課題を絞り込んだ上で解決に導くという所がすごいな〜と。
発表driveで頭の中だけで思っていたことをやるのにもいいし、自分に足りない部分も見えてきたり、社外の色んな人の取り組みが見えて、とても刺激になったので、今年は座学形式よりもハッカソン形式のイベントに多く参加したいな〜と。(土/日の開催が多いので難ですが。。)

2013年にやりたいこと

2013年にやりたいこと というか、新年の抱負というか。

2011年にそんな感じのことを書いて、何個かちゃんとできたのに対し、
http://seikoudoku2000.hatenablog.com/entries/2011/01/11
2012年は書かずじまいで、いまいち新しい取り組みができなかったな~というのがあるので、2013年版を書いてみる。
一年の計は元旦にありってのはほんとですね。(もう、とっくに過ぎてるけどww)

  • Rubyの勉強
    • 昨年、↓あたりを買って一通り読んだものの、身についてないので、写経したり。

初めてのRuby

初めてのRuby


RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版


The RSpec Book (Professional Ruby Series)

The RSpec Book (Professional Ruby Series)


  • アルゴリズムに強くなる
    • この辺をRubyでやってみる。

世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~

世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~

  • 作者: Gayle Laakmann McDowell,秋葉拓哉,岩田陽一,北川宜稔,Ozy
  • 出版社/メーカー: マイナビ
  • 発売日: 2012/11/13
  • メディア: 単行本(ソフトカバー)
  • 購入: 136人 クリック: 7,620回
  • この商品を含むブログ (32件) を見る

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?



  • ラジオ英会話を再開。



今の仕事にどうこうって所にとらわれすぎず、自分的に面白そう/これで仕事してみたいって思ってるものを、学ぶこと自体の面白さを意識しながら学習していきたいなと。



  • 小笠原に行く(7月or8月あたり)。
    • 屋久島、北海道も行きたいが、、、


  • 子どもと高尾山に登る。


  • 車の運転の練習をする。



昨年の12月に家族が1人増えて、これから、どんな生活が待っているのかよく分かりませんが、まあ、ボチボチやりたいと思います。

Cloudera World Tokyo に行った #cwt2012

行ってきました。

Cloudera World Tokyo | Cloudera Japan
↑に色んな資料もあり。

全体的な感想として、
CDH4やImpalaといった最先端のhadoopの進化に興味のある人、
一方でhadoopとは/clouderaとは?みたいな所からの人と、
出て数年のプロダクトではありますが、これだけのブーム(今回は600名の参加登録!)になると、
もはや"hadoop"という言葉でまとめて何かやるっていうphaseでは無いのかな~と。

とはいえ、これだけの利用者がいるからこそ、この規模のイベントが無料で、しかも、clouderaロゴ入りカステラやNTT Dataラベルの水がいただけるわけなので、ありがたい話です!!

あと、セッションのターゲットが先端を行く人向けと、これから使いだす人向けと、どちらかに寄ってたので、
真ん中くらいのレベルの人(単純なバッチ等でhadoop自体はそこそこ使ってて、次はマイニングとか機械学習ででホゲホゲしてどんどんサービス改善につなげたいが、敷居が高くて中々手が出ない、、、みたいな。)向けにも何かあるといいのかな~と思ったりしました。
## 自分がそういうのを聞きたいだけですが。。


以下、メモとったやつと感想

ビッグデータ最新動向 cloudera ジュゼッペ小林さん

「Big Data:六つの誤解」

  • 今日の話を理解するためのclouderaの考え方の説明です
  • Big Dataではなく、Bigger Data。
    • データ自体は昔からあったが、これからどんどん大きくなっていく。
  • Dataの使い方が大事
    • 風が吹けば桶屋が儲かる
    • 今の人たちが求めているのも極論するとこれと同じではないか?データから何らかの因果関係を見つけて一儲け。
  • Dataの使用目的は何?
    • 日本の冷蔵庫
      • サイズの問題であまりたくさん入らない。毎日のように明日何が必要かを考えて、買い物をして必要なものを入れる。
    • 欧米の冷蔵庫
      • 大きいので、どかっと色々買って入れておく。その中から色んな組み合わせで何かを生み出す。
    • これまでの解析は日本の冷蔵庫で、big dataは欧米の冷蔵庫
    • コストコで今日のおかずを考えるか?売っているものを見ながら利用方法を考える。
    • 目的よりも先に一箇所に集めることが大事。
  • 解析
    • 南アフリカ vs オランダ
      • 南アフリカはダイヤ原石の採掘をしている。
      • オランダでそれを磨き加工することで、価値が何倍、何十倍になる。
    • big dataは南アフリカ。big dataのbigは大雑把の大
  • バッチ処理
    • 日本のお風呂と欧米のシャワー。手段が違うだけで目的は同じ。
    • バッチもリアルタイムも両方Big data
  • データサイエンス
    • 何でてくるか分からないアドベンチャー。
      • 勿論、アドベンチャーするための知識は必要
    • こんな面白いことを外部にはやらせたくない。 by clouderaのお客さんの言葉
    • やらせるべきではない。 by ジュゼッペさん
    • 何が出てくるか分からないデータのアドベンチャーを切り開くpassionが無いと、何も出てこないよ!

リクルート流 ビッグデータを使いこなす3つの観点 リクルート 菊地原さん

「リクルート流ビッグデータを使いこなす3つの観点」

  • リクルートのビジネスモデル
    • 顧客とサービス提供者のマッチング
    • ライフイベント と ライフスタイルのニ軸
    • 海外では例えづらい。
    • ネットモデルの売り上げが着々と伸びている。
  • 組織
    • 10月に分社した。リクルートテクノロジーズ。旧MIT
    • ビッグデータgroupがある。70人!
      • 新技術/ロジックの開拓、基盤整備、ビジネスへの導入 という3つのミッション
  • 2種類のアナリスト
    • コンサル型アナリスト
      • 昔から存在していたアナリスト。掲出メディアの最適化等。
    • エンジニア型アナリスト
      • 新技術をビジネスに持ち込む。カーセンサーの例を探してね。
      • hadoopの発展と共に現れた
    • 最初から共同はしていなかった。
      • コンサル型の人が作ったロジックをエンジニア型の人がhadoop化したり、コラボの価値があった。
      • 分社のタイミングで一緒になった。
    • データ活用 = 事業担当 + コンサル型 + エンジニア型 がベスト!
    • ビッグデータ部も全員がガリガリのアナリスト/エンジニアという訳ではない。
      • すっごく難しい所を全員がやれる必要はなくて、それをどうビジネスにつなげていくかという所に注力できることが大事。
  • システムのライフサイクル
    • 開拓
      • 色々試す
    • 実装/展開
      • 早く導入する
    • 運用
      • 安定して横展開
    • 会社単体ではトータルしてもマイナスだけど、グループの利益を最大化することがミッション!

hadoop成功の鍵となるエンジニアのスキル&開発

hadoopというプロダクトで誕生したデータマイニングのニーズやエンジニアの新しいキャリアパス自体をビジネスにしてしまうという、リクルートという会社の凄さを感じました。
そして、実は自分が転職適齢期ど真ん中なことを知るなど。


データ分析におけるhadoop活用のメリット 新日鉄重金 大坪さん

  • 新日鉄ソリューションズの取り組み
    • 意思決定支援に関する研究開発
      • 20年前から取り組んでる
      • hadoopへの調査開始は2008年から。2010年ごろから他社との連携。最近、clouderaと提携。
  • hadoopで挑戦kdd cup
    • 毎年開催されるマイニングの世界的コンテスト
      • 今年のお題は広告クリック率の予測
    • 分類とは
      • 様々なデータをもとにそのデータのカテゴリの予測をすること
      • 既知のデータでモデルの構築を行う
      • カテゴリが未知のデータに適用
      • 評価を行うためのデータがトレーニングデータ
  • random forest
    • 多数の決定木を作成
    • それぞれの決定木で判定を行い、多数決で判定
    • mahoutに実装済み
      • in memoryとpartialモード
    • in memoryと同様の条件でpartialモードを実行するとすごく遅くなる。


サンプル数をがんがん増やせることがmahoutの強みな気がするので、同一のインプット量で精度云々を測るのは何か微妙なような気がしていたら、「データ増やしてどうなったか、、、続きはFEGで(近々行われる別のイベント。ちらし置いてきた & ググっても出てこないので詳細不明ww)」とのことでした。

f:id:seikoudoku2000:20121113000749j:plain
f:id:seikoudoku2000:20121113000806j:plain
f:id:seikoudoku2000:20121113000819j:plain
f:id:seikoudoku2000:20121113000831j:plain
f:id:seikoudoku2000:20121113000839j:plain
f:id:seikoudoku2000:20121113001108j:plain
f:id:seikoudoku2000:20121113001126j:plain
f:id:seikoudoku2000:20121113001142j:plain


hadoopのシステム設計、運用のベストプラクティス cloudera 嶋内さん

すごく具体的で有益な情報が多かった。ただ、結構ペース速かったのでメモは諦め、聞くことに集中。
「Hadoopのシステム設計・運用のポイント」

  • 象本読むべし。
  • hadoop operationsもいいよ。

Hadoop Operations

Hadoop Operations



その他の見つけたエントリー:
Impala Q&A - still deeper
Cloudera World Tokyoにいってきた - tagomorisのメモ置き場
Cloudera World Tokyo 2012 #cwt2012 でとったメモを公開しよう - garage-kidz tweetz

おまけ:
ニュース - 「Hadoopは低遅延に向かう」、米クラウデラのアワダラーCTO:ITpro

Fluentd meetup 2 に行ってきた #fluentd

行ってきました。
Fluentd meetup in Japan #2 #fluentd on Zusaar
#Fluentd meetup in Japan # 2 - Togetter

全セッション濃かったうえに、QAの充実っぷりが凄かったです。(ディスプレイの接続問題で結構時間があって、ちょいちょいQAタイムがあった。しかもwindowsがつながらないという。。時代ですね〜。)
## QA内容ははまとめて古橋さんのセッションのメモ部分の最後に書いてあります。

自分はちょっと触ったことがあるくらいなので、正直、fluentdの何たるかがあんまりピンときてなくてなかったのですが、色んな角度から繰り出される質問に、古橋さんが「なるほどっ」と受けて、その後にずばっと繰り出される明瞭な回答や質問者とのやり取りを聞いているうちに、大分見え方が変わってきました。

「Fluentdの現在と未来」 古橋さん @frsyuki

  • アンケート結果
    • 7割がFluentd導入済み! (アンケートに答えた人)
    • そのうち4割がMongoDBへ入れてる。
  • 何でFluentdか?
    • ログの種類は色々 apache, アプリのログ。
    • よくある方法はログローテションしてrsyncとかscpとか。
    • 何が問題か?
      • パース処理が増えまくる。
      • 解析しづらい。human readableとmachine readable
      • ローテンションを待つ必要がある。それではシステム監視には使えない!
      • Fluentdにログを流すことで一括してログを扱える。
      • jsonでログを扱うのでmachineもhumanでも読める。
  • 他の製品と比較して
    • scribeは拡張できない。
    • flumeも使いづらい。テキストフォーマットだし。
  • 諸々のQAのまとめ
    • flumeがテキストベースなのはなぜ?
      • パースの処理は重く、ログを吐き出すサーバがやるべきではないという思想。
      • fluentdはログを吐き出す人と、使う人が違うんだから、パースはinput側でやるべきという考え方。
    • windows対応は?
      • cool.ioやめてthreadにする予定。windowsでも使えるようになる!
    • plugin のデバッグどうやる?
      • テストはあんまりイケてない。
      • fluentd cat して、 stdout に出せば、ちょっとした開発には問題ない。
      • v11でRSpec対応する予定。
    • どれくらいのパフォーマンスがでるのか?
      • 書き出しの最大値はCPUの周波数にけっこう左右される。1プロセスで動いているから。
      • でも。すでに8000qpsはいけてる! by @tagomorisさん
    • スケールした時のボトルネックは? @GedowFather さんの発表でトラフィックには影響されないとのことだったが?
      • flushの頻度やagent数に依存する? by @GedowFatherさん
      • ロックが問題っぽいので、flush間隔を長くすることで改善されるはずではあるが、しっかりと調べないと分からない。 by 古橋さん
    • UDPでの死活監視がおっつかなくなって、動いてるのに死んでる判定されてしまうことがある。
      • ver1.1で改善予定。TCPがつながってればOKにしちゃうみたいな。
      • プロトコルの分離も検討中
    • 標準のplug-in(in-tail)を継承してカスタマイズするのはマナー的にOK?

Logging infrastracture in Paas. 楽天の佐々木さん、ワリさん from Mexico

(公開されれば)資料を貼る予定 & deepだった&英語であんまり付いていけず。。

0829資料追加

Fluentdを優しく見守る監視事例 @GedowFather ドリコム

Fluentd や TreasureDataでこっそりはじめるログ集計 @mikea CROOZ

(公開されれば)資料を貼る予定 & 資料に全部書いてあった & めちゃ盛り上がった
途中でぼやけたスライドが出た時は、社内データで細かい所までは見せられないから
なのかなと思ったら、ネットワークの不調だったというw。
そして、最後はちっちゃい×だけが表示されたスライドwww。
資料公開が待ち遠しいです(笑)

0829追記
mikedaさんのブログと資料
Fluentd Meetup 2で話してきました - IT 東京 楽しいと思うこと

HBase本の紹介 玉川さん

MongoDB in Action、Hive Programming、等々、多数の本を翻訳予定。
今後、翻訳ができるかどうかは本の売れ行き次第なので、HBase本買うべし!

まとめ

想像していたより多くの人がガンガン使っていて、相当な出遅れ感を味わったので、興味を持ったら、もっと前のめりにいかんといかんな〜と感じた会でした。頑張ろう。まずはRubyを触るところから、、
主催者の皆様、GREEの皆様、ありがとうございました!


HBase

HBase


Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]

Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]