- ruby1.9.3
apacheのログなどを解析する場合にはmongodbに一度入れると扱いやすくなります。
そこでこのプレーンテキストのapacheのログをrubyを使っていれる試みをしてみました
この辺りを参考に
http://mironal-memo.blogspot.jp/2012/07/mongodb-ruby.html
gem install mongo gem install bson_ext
ログからip,時間、urlの3つ、必要なものを抽出します
zcat access.log.gz |awk '{print $1"\t"$4"\t"$7}' > log.txt
#!/bin/env ruby require "mongo" conn=Mongo::Connection.new db=conn.db("database") col=db.collection("logs") open("log.txt"){|f| f.each{|line| line.chomp! ay=line.split("\t") col.insert({"ip"=>ay[0],"date":"ISODate(Time.parse(ay[1].gsub("[","").sub(":"," ")).strftime('%Y-%m-%dT%H:%M:%SZ'))","url":ay[2]) } }
こんな感じで入るのかと思ったのですがISODateにはなりません
仕方がないので一度ファイルにします
- create.rb
#!/bin/env ruby puts "use database" open("log.txt"){|f| f.each{|line| line.chomp! ay=line.split("\t") puts 'db.logs.insert({ip:"'+ay[0]+'","date":ISODate("'+Time.parse(ay[1].gsub("[","").sub(":"," ")).strftime('%Y-%m-%dT%H:%M:%SZ'))+'"),"url":"'+ay[2]+'"))' } }
ruby create.rb > mongo.dat mongo < mongo.dat
これくらいしかわかりませんでした