Heim Web-Frontend js-Tutorial Node.js und MongoDB implementieren eine einfache Protokollanalyse system_node.js

Node.js und MongoDB implementieren eine einfache Protokollanalyse system_node.js

May 16, 2016 pm 04:02 PM
mongodb node.js

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:

Code kopieren Der Code lautet wie folgt:

HOST = null; // localhost
PORT = 8001;

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:

Code kopieren Der Code lautet wie folgt:

var mongodb = require("mongodb");
var fu = require("./fu");


// 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:

Code kopieren Der Code lautet wie folgt:



 
   
    Rendezvous-Monitorsystem
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 
 
 

几乎是jqPlot的示例中的完整拷贝,好吧,我承认我太懒了.
下面是看用来显示生成图形的chart.js:

复制代码 代码如下:

// Alle Diagrammzeichnungsfunktionen speichern. Wenn wir ein Diagramm deaktivieren möchten, ist nur
erforderlich // Kommentiere die Push-Zeile, wenn du eine Funktion in das Array einfügst.
var draws = [];

/**************************** TOP 10 Benutzeraktion Start **************** ****************/
document.write('

');


var drawUserActionTop10Chart = function(){
  if(!$("#userActionTop10Chart").attr('class')){
    $("#userActionTop10Chart").attr('class', 'small_chart');
  }


  $.ajax({
    async:false,
    URL: '/userActionTop10',
    dataType:'json',
    Cache: falsch,
    success:function(data){
      versuche es{
        $('#userActionTop10Chart').html('');


        $.jqplot('userActionTop10Chart', [data.count], {
          Titel: „TOP 10 Benutzeraktion“,
          seriesDefaults:{
            renderer:$.jqplot.BarRenderer,
            rendererOptions: {fillToZero: true},
            Punktbezeichnungen: {
              show:true,
              ypadding:1
            }
          },
          axisDefaults:{
            tickRenderer:$.jqplot.CanvasAxisTickRenderer,
            tickOptions: {
              Winkel: -30,
              Schriftgröße: '12px'
            }
          },
          Achsen: {
            xaxis: {
              Renderer: $.jqplot.CategoryAxisRenderer,
              Häkchen: data.action
            },
            Y-Achse: {
              Pad: 1,05
            }
          }
        });
      }catch(e){
        //alert(e.message);
      }
    }
  });
}


draws.push('drawUserActionTop10Chart');


/******************************* TOP 10 Benutzeraktion Ende **************** ********************/

/*********** Diagrammstart *****************/


//Fügen Sie hier Ihre Diagrammzeichnungsfunktion ein
//1. Fügen Sie ein Div für das Diagramm ein
//2. Implementieren Sie die Funktion Zeichnungsdiagramm
//3. Schieben Sie den Funktionsnamen in die Array-Zeichnungen


/*********** Diagrammende *****************/

// Alle Diagramme zeichnen
var drawAllCharts = function(){
  for(var i = 0; i < draws.length; i ){
    eval(draws[i] "()");
  }


 //Sich selbst in 5 Minuten zurückrufen.
 window.setTimeout(drawAllCharts, 5 * 60 * 1000);
}


//
$(function(){
  drawAllCharts();
});

服务器端和客户端的代码都有了,那就跑起来看效果吧:

好像忘了什么?日志的分析代码.

三、使用MongoDB 增量式MapReduce实现日志分析

Die Funktion „Inkrementelles MapReduce“ von MongoDB ist die neueste Version von MongoDB apReduce.只是说明了如何设置才能增量执行MapReduce.

为了方便,我把MapReduce使用MongoDB的JavaScript写在了单独的js文件中,然后通过crontab定时执行。stats.js的代码:

复制代码 代码如下:

/************** Die Datei wird alle 5 Minuten von /etc/crontab ausgeführt.*********************/
var action_count_map = function(){
emit(this.action, {action:this.action, count:1});
}

var action_count_reduce = Funktion(Schlüssel, Werte){
var count = 0;
Werte.forEach(Funktion(Wert){
Count = value.count;
});
Gib {action:key, count : count};
zurück }


db.log.mapReduce(action_count_map, action_count_reduce, {query : {'action_count' : {$ne:1}},out: {reduce:'action_count'}});

db.log.update({'action_count':{$ne:1}}, {$set:{'action_count':1}}, false, true);

Die Idee ist ganz einfach:
1. Setzen Sie die Anzahl der Zugriffe für jede Aktion in der Karte auf 1
2. Zählen Sie beim Reduzieren die Anzahl der Besuche derselben Aktion
3. Führen Sie mapReduce aus. Die Abfrage ist so angegeben, dass „action_count“ nicht gleich 1 ist, d die Eingabe der nächsten Reduzierung.
4. Setzen Sie den Wert von „action_count“ in allen aktuellen Protokolldatensätzen auf 1, um anzuzeigen, dass die Statistiken durchgeführt wurden. Ich frage mich, ob dies dazu führt, dass Datensätze, die noch nicht gezählt wurden, aktualisiert werden? ? Ich hoffe, erfahrene Helden können mir einen Rat geben!

Geplante Ausführung der stats.js-Shell:

Code kopieren Der Code lautet wie folgt:

*/5 * * * * root cd /root/log; mongo localhost:27017/log stats.js

Okay, das ist der ganze Code, es gibt nichts besonders Geheimnisvolles, aber Node.js ist wirklich eine gute Sache.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vergleich von Golang und Node.js in der Back-End-Entwicklung Vergleich von Golang und Node.js in der Back-End-Entwicklung Jun 03, 2024 pm 02:31 PM

Go und Node.js weisen Unterschiede in der Typisierung (stark/schwach), der Parallelität (Goroutine/Ereignisschleife) und der Speicherbereinigung (automatisch/manuell) auf. Go hat einen hohen Durchsatz und eine geringe Latenz und eignet sich für Backends mit hoher Auslastung; Node.js eignet sich gut für asynchrone E/A und eignet sich für hohe Parallelität und kurze Anfragen. Praktische Beispiele für beide sind Kubernetes (Go), Datenbankverbindungen (Node.js) und Webanwendungen (Go/Node.js). Die endgültige Wahl hängt von den Anwendungsanforderungen, den Teamfähigkeiten und den persönlichen Vorlieben ab.

Was nützt net4.0? Was nützt net4.0? May 10, 2024 am 01:09 AM

.NET 4.0 wird zum Erstellen einer Vielzahl von Anwendungen verwendet und bietet Anwendungsentwicklern umfangreiche Funktionen, darunter objektorientierte Programmierung, Flexibilität, leistungsstarke Architektur, Cloud-Computing-Integration, Leistungsoptimierung, umfangreiche Bibliotheken, Sicherheit, Skalierbarkeit, Datenzugriff und Mobilgeräte Entwicklungsunterstützung.

Integration von Java-Funktionen und Datenbanken in serverlose Architektur Integration von Java-Funktionen und Datenbanken in serverlose Architektur Apr 28, 2024 am 08:57 AM

In einer serverlosen Architektur können Java-Funktionen in die Datenbank integriert werden, um auf Daten in der Datenbank zuzugreifen und diese zu bearbeiten. Zu den wichtigsten Schritten gehören: Erstellen von Java-Funktionen, Konfigurieren von Umgebungsvariablen, Bereitstellen von Funktionen und Testen von Funktionen. Durch Befolgen dieser Schritte können Entwickler komplexe Anwendungen erstellen, die nahtlos auf in Datenbanken gespeicherte Daten zugreifen.

So konfigurieren Sie die automatische Expansion von MongoDB auf Debian So konfigurieren Sie die automatische Expansion von MongoDB auf Debian Apr 02, 2025 am 07:36 AM

In diesem Artikel wird vorgestellt, wie MongoDB im Debian -System konfiguriert wird, um eine automatische Expansion zu erzielen. Die Hauptschritte umfassen das Einrichten der MongoDB -Replikat -Set und die Überwachung des Speicherplatzes. 1. MongoDB Installation Erstens stellen Sie sicher, dass MongoDB im Debian -System installiert ist. Installieren Sie den folgenden Befehl: sudoaptupdatesudoaptinstall-emongoDB-org 2. Konfigurieren von MongoDB Replika-Set MongoDB Replikate sorgt für eine hohe Verfügbarkeit und Datenreduktion, was die Grundlage für die Erreichung der automatischen Kapazitätserweiterung darstellt. Start MongoDB Service: SudosystemctlstartMongodsudosysys

Wie Sie eine hohe Verfügbarkeit von MongoDB bei Debian gewährleisten Wie Sie eine hohe Verfügbarkeit von MongoDB bei Debian gewährleisten Apr 02, 2025 am 07:21 AM

In diesem Artikel wird beschrieben, wie man eine hoch verfügbare MongoDB -Datenbank für ein Debian -System erstellt. Wir werden mehrere Möglichkeiten untersuchen, um sicherzustellen, dass die Datensicherheit und -Dienste weiter funktionieren. Schlüsselstrategie: ReplicaSet: Replicaset: Verwenden Sie Replikaten, um Datenreduktion und automatisches Failover zu erreichen. Wenn ein Master -Knoten fehlschlägt, wählt der Replikate -Set automatisch einen neuen Masterknoten, um die kontinuierliche Verfügbarkeit des Dienstes zu gewährleisten. Datensicherung und Wiederherstellung: Verwenden Sie den Befehl mongodump regelmäßig, um die Datenbank zu sichern und effektive Wiederherstellungsstrategien zu formulieren, um das Risiko eines Datenverlusts zu behandeln. Überwachung und Alarme: Überwachungsinstrumente (wie Prometheus, Grafana) bereitstellen, um den laufenden Status von MongoDB in Echtzeit zu überwachen, und

Navicat -Methode zum Anzeigen von MongoDB -Datenbankkennwort Navicat -Methode zum Anzeigen von MongoDB -Datenbankkennwort Apr 08, 2025 pm 09:39 PM

Es ist unmöglich, das MongoDB -Passwort direkt über Navicat anzuzeigen, da es als Hash -Werte gespeichert ist. So rufen Sie verlorene Passwörter ab: 1. Passwörter zurücksetzen; 2. Überprüfen Sie die Konfigurationsdateien (können Hash -Werte enthalten). 3. Überprüfen Sie Codes (May Hardcode -Passwörter).

Großes Update von Pi Coin: Die PI Bank kommt! Großes Update von Pi Coin: Die PI Bank kommt! Mar 03, 2025 pm 06:18 PM

Pinetwork startet Pibank, eine revolutionäre Mobile -Banking -Plattform! PiNetwork today released a major update on Elmahrosa (Face) PIMISRBank, referred to as PiBank, which perfectly integrates traditional banking services with PiNetwork cryptocurrency functions to realize the atomic exchange of fiat currencies and cryptocurrencies (supports the swap between fiat currencies such as the US dollar, euro, and Indonesian rupiah with cryptocurrencies such as PiCoin, USDT, and USDC). Was ist der Charme von Pibank? Lass uns herausfinden! Die Hauptfunktionen von Pibank: One-Stop-Management von Bankkonten und Kryptowährungsvermögen. Unterstützen Sie Echtzeittransaktionen und übernehmen Sie Biospezies

So verschlüsseln Sie Daten in Debian MongoDB So verschlüsseln Sie Daten in Debian MongoDB Apr 12, 2025 pm 08:03 PM

Verschlüsseln Sie die MongoDB -Datenbank in einem Debian -System erfordert die folgenden Schritte: Schritt 1: Stellen Sie zuerst die MongoDB -Installation durch, dass Ihr Debian -System MongoDB installiert hat. Wenn nicht, lesen Sie bitte das offizielle MongoDB-Dokument für die Installation: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/step 2: Generieren Sie die Verschlüsselungsschlüsseldatei Erstellen Sie eine Datei, die die Verschlüsselungsschlüssel enthält, und setzen

See all articles