In einem aktuellen Projekt wurden die Projektprotokolle zur einfachen Analyse im JSON-Format gespeichert. Früher wurden die Protokolle direkt in Dateien gespeichert, aber MongoDB geriet zum richtigen Zeitpunkt in mein Blickfeld, sodass ich die Protokolle in MongoDB speicherte. Es ist sinnlos, nur Protokolle zu speichern. Das Wichtigste ist, Geschäftstrends und Schwachstellen in der Systemleistung anhand von Protokollen zu erkennen. Zuvor gab es ein Analysemodul, das in Java geschrieben war und unter Tomcat lief. Die Implementierung ist ziemlich schwer, das Hinzufügen eines neuen Indikators ist ebenfalls umständlich und die Analyse schlägt aufgrund von NFS fehl. Ich wollte es schon immer neu schreiben und wollte ursprünglich Ruby On Rails verwenden, aber ich hatte nie die Zeit, es zu lernen und weiterzuentwickeln (ich suche nach Ausreden!). Ich traf Node.js wieder auf der QCon 2011 in Hangzhou, obwohl ich es nicht eingehend studiert hatte. Nachdem ich Taobao Su Qians Rede gehört hatte, kam mir sofort die Idee, Node.js zu verwenden Implementieren Sie dieses Protokollanalysesystem. Das Front-End verwendet JS, der Server verwendet JS und sogar die Datenbank-Shell ist JS. Wenn man darüber nachdenkt, ist es cool – das Wichtigste ist natürlich, dass die Codegröße klein ist.
1. Verwenden Sie Node.js, um serverseitigen Code zu implementieren
Um einen guten Stil und schnelles Code-Schreiben zu haben, ist es unvermeidlich, ein einfaches Framework zu übernehmen. Express implementiert die meisten Funktionen, es dauert jedoch einige Zeit, sich damit vertraut zu machen, und es scheint für dieses Projekt etwas schwerfällig zu sein. Auf der offiziellen Website von Node.js gibt es eine Chat-Demo. Dieser Code wird einfach verschoben und kapselt die Verarbeitung von URLs und die Rückgabe von JSON. Also habe ich fu.js direkt verwendet und server.js neu geschrieben:
var fu = require("./fu"),
sys = require("util"),
url = require("url"),
mongo = require("./request_handler");
fu.listen(Number(process.env.PORT || PORT), HOST);
fu.get("/", fu.staticHandler("index.html"));
Ist es nicht zu einfach? ! Es ist aber tatsächlich so, ein Server wurde eingerichtet.
Schauen wir uns den Code request_handler.js an, der Anfragen verarbeitet:
// TOP 10 Benutzeraktion
fu.get("/userActionTop10", function(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}).limit(10).toArray(function(err, docs){
if(!err){
var action = [];
var count = [];
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});
//Denken Sie unbedingt daran, die Datenbankverbindung zu schließen
conn.close();
}
});
});
});
});
2. Kunde
Das Wichtigste am Protokollsystem ist die visuelle Darstellung. Hier kommt ein Plug-in von JQuery jqPlot Chart zum Einsatz. Verwenden Sie zunächst eine statische HTML-Seite als Container für die grafische Darstellung: