Common Lispでビッグデータを作ろ
う
Lisp Meet Up #10
κeen(@blackenedgold)
自己紹介
●

κeen

●

数学科生の就活生

●

Common Lisp, Ruby, Emacs Lispな人

●

@blackenedgold

●

http://keens.github.io

●

就活生
ビッグデータとは?
●

定義は色々

●

「アプリケーションの吐き出す大量のデータ」

●

ビッグデータを作る=アプリにデータを吐かせ
る

という訳で今回はログの話をします
タイトルは釣りでした
Log4CL
●

●

●

●

CLikiのCurrent recommended
librariesにある
高速かつカスタマイザブルな
出力
JavaのLog4Jを参考に作られた
ユーザーフレンドリーなイン
ターフェース
Usage
●

(log:config <many-configs>)
–
–

●

(log:config :debug :daily “logfile.log” :backup nil)
debug以上を出力、”logfile.log”...
論理出力先

もうちょっと詳しく
logger

category

App

物理出力先

物理出力先
appender

appender

layout
layout
ファイル

コンソール
(ql:quickload :log4cl)
(ql:quickload :cl-syslog)

拡張してみる
<demo2>

;; アペンダを定義
(defclass syslog-appender (log4cl-impl:append...
もう一度ビッグデータ
ところでビッグデータで何したいの?

もちろん、解析。
ログのありかた
●

× 人間が読み易い形式

●

○ 機械が読んで人間に分かり易く出力できる形
式

1.機械が読んで
2.出力する

割と面倒
それっぽいデータ吐くから誰か解析して

任せろ!
Fluentdについて
●

ログ解析フレームワーク

●

Ruby製、gemで入る

●

様々な入力を
–

●

今回はCommon Lispから

様々に出力する
–

MongoDBに保存

–

トラフィックを監視

–

グラフ...
fluentdのプロトコル
●

●

●

データは <time> <tag> <json>の形式
json→ログが構造化される(機械に扱いやす
い)
標準でtail -F, HTTP, TCPなどでデータを渡せる

Log4CLからこの形式...
作ってみた
●

https://github.com/KeenS/log4cl-fluentd

●

TCP, HTTP, tail -Fのどれで渡すか選べる

●

一応log4clのプラグインの形だが使い勝手が違
う。
–

●

ログ...
ところで
●

「ビッグ」データを作るには?
–

→やっぱWebアプリケーションでしょ

–

→てことは…

Clack!!
Clack+Log4CL+fluentd?
●

まあ、普通に使えば動く

●

でも、もっとカジュアルに

Access Logが望まれている…?
Clack.Middleware.AccessLog4CLack
●

作りました
–

●

●

●

正確には動くかどうか実験しました

https://github.com/KeenS/clack のそれっぽいブラ
ンチ参照
だいたいリ...
ベンチマークしてみた
●

ab -c 10 -n 1000 localhost:5000/

(defun app (env)

●

(declare (ignore env))
'(200
(:content-type "text/pla...
今後の課題
●

とりあえず「まともに動く」レベルにもっていく

●

ドキュメントとか

●

てか、遅い

●

使い勝手とか?

●

拡張性?

●

そもそも需要ある?
まとめ
●

Common LispでログとるならLog4CL

●

それにfluentdつけてみた

●

さらにclackで動かしてみた

●

調子乗りましたごめんなさい

以上です
Upcoming SlideShare
Loading in …5
×

Common Lisp でビッグデータを作ろう

927
-1

Published on

Shibuya.lispのLisp Meet Up #10で発表した資料です。
スライドだと舌足らずなところがあるのでUstreamの発表も合わせてご覧下さい

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
927
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Common Lisp でビッグデータを作ろう

  1. 1. Common Lispでビッグデータを作ろ う Lisp Meet Up #10 κeen(@blackenedgold)
  2. 2. 自己紹介 ● κeen ● 数学科生の就活生 ● Common Lisp, Ruby, Emacs Lispな人 ● @blackenedgold ● http://keens.github.io ● 就活生
  3. 3. ビッグデータとは? ● 定義は色々 ● 「アプリケーションの吐き出す大量のデータ」 ● ビッグデータを作る=アプリにデータを吐かせ る という訳で今回はログの話をします タイトルは釣りでした
  4. 4. Log4CL ● ● ● ● CLikiのCurrent recommended librariesにある 高速かつカスタマイザブルな 出力 JavaのLog4Jを参考に作られた ユーザーフレンドリーなイン ターフェース
  5. 5. Usage ● (log:config <many-configs>) – – ● (log:config :debug :daily “logfile.log” :backup nil) debug以上を出力、”logfile.log”にも出力 (log:<log-level> “~a~a” args) – (log:info “~{~a~^, ~}” '(a b c)) – “a, b, c”を出力<demo1>
  6. 6. 論理出力先 もうちょっと詳しく logger category App 物理出力先 物理出力先 appender appender layout layout ファイル コンソール
  7. 7. (ql:quickload :log4cl) (ql:quickload :cl-syslog) 拡張してみる <demo2> ;; アペンダを定義 (defclass syslog-appender (log4cl-impl:appender) ()) ;; アペンダの出力方法を定義 (defmethod log4cl-impl:appender-do-append ((appender syslog-appender) logger level log-func) ;; 出力はcl-syslogに丸投げ。 (cl-syslog:log "log4cl" :local7 :info (with-output-to-string (s) (log4cl-impl:layout-to-stream (slot-value appender 'log4cl-impl:layout) s logger level log-func)))) ;; ロガーを作成 (defvar syslog-logger (log:category '(syslog))) ;; ロガーにアペンダを対応付ける (log4cl-impl:add-appender syslog-logger (make-instance 'syslog-appender)) ;; ログ出力 (log:i :logger syslog-logger "from cl")
  8. 8. もう一度ビッグデータ ところでビッグデータで何したいの? もちろん、解析。
  9. 9. ログのありかた ● × 人間が読み易い形式 ● ○ 機械が読んで人間に分かり易く出力できる形 式 1.機械が読んで 2.出力する 割と面倒
  10. 10. それっぽいデータ吐くから誰か解析して 任せろ!
  11. 11. Fluentdについて ● ログ解析フレームワーク ● Ruby製、gemで入る ● 様々な入力を – ● 今回はCommon Lispから 様々に出力する – MongoDBに保存 – トラフィックを監視 – グラフ化などなど
  12. 12. fluentdのプロトコル ● ● ● データは <time> <tag> <json>の形式 json→ログが構造化される(機械に扱いやす い) 標準でtail -F, HTTP, TCPなどでデータを渡せる Log4CLからこの形式でデータを 吐ければ幸せになれるのでは?
  13. 13. 作ってみた ● https://github.com/KeenS/log4cl-fluentd ● TCP, HTTP, tail -Fのどれで渡すか選べる ● 一応log4clのプラグインの形だが使い勝手が違 う。 – ● ログメッセージにJSON形式のデータを要求するな ど <demo3>
  14. 14. ところで ● 「ビッグ」データを作るには? – →やっぱWebアプリケーションでしょ – →てことは… Clack!!
  15. 15. Clack+Log4CL+fluentd? ● まあ、普通に使えば動く ● でも、もっとカジュアルに Access Logが望まれている…?
  16. 16. Clack.Middleware.AccessLog4CLack ● 作りました – ● ● ● 正確には動くかどうか実験しました https://github.com/KeenS/clack のそれっぽいブラ ンチ参照 だいたいリクエストヘッダからできてる`env`と レスポンスタイムを吐く demo?
  17. 17. ベンチマークしてみた ● ab -c 10 -n 1000 localhost:5000/ (defun app (env) ● (declare (ignore env)) '(200 (:content-type "text/plain") ("Hello, Clack!"))) • Requests per second: • • • forward Requests per second: • 136.72 [#/sec] (mean) http Requests per second: • 156.03 [#/sec] (mean) なし 1009.76 [#/sec] (mean)
  18. 18. 今後の課題 ● とりあえず「まともに動く」レベルにもっていく ● ドキュメントとか ● てか、遅い ● 使い勝手とか? ● 拡張性? ● そもそも需要ある?
  19. 19. まとめ ● Common LispでログとるならLog4CL ● それにfluentdつけてみた ● さらにclackで動かしてみた ● 調子乗りましたごめんなさい 以上です
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×