Dalam projek baru-baru ini, log projek telah disimpan dalam format JSON untuk analisis yang mudah. Sebelum ini, log disimpan terus dalam fail, tetapi MongoDB menceroboh pandangan saya pada masa yang tepat, jadi saya menyimpan log dalam MongoDB. Tidak ada makna untuk hanya menyimpan log Perkara yang paling penting ialah menemui arah aliran perniagaan dan kelemahan prestasi sistem daripada log. Sebelum ini terdapat modul analisis yang ditulis dalam Java dan berjalan di bawah Tomcat. Pelaksanaannya agak berat, proses menambah penunjuk baharu juga menyusahkan, dan analisis gagal disebabkan oleh NFS. Saya sentiasa mahu menulis semula, dan pada mulanya mahu menggunakan Ruby On Rails, tetapi saya tidak pernah mempunyai masa untuk belajar dan berkembang (saya sedang mencari alasan!). Saya bertemu Node.js sekali lagi di QCon 2011 di Hangzhou Walaupun saya pernah mendengarnya sebelum ini, saya tidak mempelajarinya secara mendalam Selepas mendengar ucapan Taobao Su Qian, saya segera mendapat idea untuk menggunakan Node.js. melaksanakan sistem analisis log ini. Bahagian hadapan menggunakan JS, pelayan menggunakan JS, malah cangkerang pangkalan data adalah JS Sejuk apabila anda memikirkannya—sudah tentu perkara yang paling penting ialah saiz kodnya kecil.
1. Gunakan Node.js untuk melaksanakan kod sebelah pelayan
Untuk mempunyai gaya yang baik dan penulisan kod yang pantas, adalah tidak dapat dielakkan untuk menggunakan rangka kerja yang mudah. Express melaksanakan kebanyakan fungsi, tetapi memerlukan sedikit masa untuk membiasakannya, dan nampaknya agak berat untuk projek ini. Terdapat Demo Sembang di tapak web rasmi Node.js Kod ini hanya dialihkan dan merangkum pemprosesan URL dan pengembalian JSON. Jadi saya menggunakan fu.js secara langsung dan menulis semula server.js:
var fu = memerlukan("./fu"),
sys = memerlukan("util"),
url = memerlukan("url"),
mongo = memerlukan("./request_handler");
fu.listen(Nombor(process.env.PORT || PORT), HOST);
fu.get("/", fu.staticHandler("index.html"));
Bukankah ia terlalu mudah? ! Tetapi ia sememangnya berlaku, pelayan telah ditubuhkan.
Mari lihat kod request_handler.js yang mengendalikan permintaan:
// Tindakan pengguna 10 Teratas
fu.get("/userActionTop10", fungsi(req, res){
mongodb.connect('mongodb://localhost:27017/log', function(err, conn){
conn.collection('action_count', function(err, coll){
coll.find({"value.action":{$in:user_action}}).sort({"value.count":-1}).had(10).toArray(function(err, docs){
jika(!err){
var action = [];
kiraan var = [];
for(var i = 0; i < docs.length; i ){
//console.log(docs[i]);
action.push(docs[i].value.action);
Count.push(docs[i].value.count);
}
res.simpleJSON(200, {action:action, count:count});
//Pastikan anda ingat untuk menutup sambungan pangkalan data
conn.close();
}
});
});
});
});
2 Perkara yang paling penting tentang sistem log ialah paparan visual Pemalam JQuery
Carta jqPlot digunakan di sini. Mula-mula gunakan halaman HTML statik sebagai bekas untuk paparan grafik: