Maison interface Web js tutoriel Node.js et MongoDB implémentent une analyse simple des journaux system_node.js

Node.js et MongoDB implémentent une analyse simple des journaux system_node.js

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

Dans un projet récent, les journaux du projet ont été enregistrés au format JSON pour une analyse facile. Auparavant, les journaux étaient stockés directement dans des fichiers, mais MongoDB est apparu au bon moment, j'ai donc enregistré les journaux dans MongoDB. Cela n'a aucun sens de simplement sauvegarder les journaux. Le plus important est de découvrir les tendances commerciales et les failles de performances du système à partir des journaux. Auparavant, il existait un module d'analyse écrit en Java et fonctionnant sous Tomcat. La mise en œuvre est assez lourde, le processus d'ajout d'un nouvel indicateur est également fastidieux et l'analyse échoue à cause du NFS. J'ai toujours voulu le réécrire, et au départ je voulais utiliser Ruby On Rails, mais je n'ai jamais eu le temps d'apprendre et de développer (je cherche des excuses !). J'ai rencontré à nouveau Node.js au QCon 2011 à Hangzhou. Même si j'en avais déjà entendu parler, je ne l'ai pas étudié en profondeur. Après avoir écouté le discours de Taobao Su Qian, j'ai immédiatement eu l'idée d'utiliser Node.js pour. mettre en œuvre ce système d’analyse des journaux. Le front-end utilise JS, le serveur utilise JS et même le shell de la base de données est JS. C'est cool quand on y pense – bien sûr, le plus important est que la taille du code soit petite.

1. Utilisez Node.js pour implémenter le code côté serveur

Afin d'avoir un bon style et une écriture de code rapide, il est inévitable d'adopter un framework simple. Express implémente la plupart des fonctions, mais il faut un certain temps pour s'y familiariser, et cela semble un peu lourd pour ce projet. Il existe une Chat Demo sur le site officiel de Node.js. Ce code est simplement déplacé et encapsule le traitement des URL et le retour du JSON. J'ai donc utilisé fu.js directement et réécrit server.js :

Copier le code Le code est le suivant :

HÔTE = nul; // 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"));

N'est-ce pas trop simple ? ! Mais c'est bel et bien le cas, un serveur a été mis en place.
Regardons le code request_handler.js qui gère les requêtes :

Copier le code Le code est le suivant :

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


// TOP 10 des actions des utilisateurs
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){
          si(!err){
          var action = [];
         var count = [];
pour(var je = 0; je < docs.length; je ){
​​​​​​ //console.log(docs[i]);
            action.push(docs[i].value.action);
Count.push(docs[i].value.count);
          }
              res.simpleJSON(200, {action:action, count:count});
                                   
​​​​​ //N'oubliez pas de fermer la connexion à la base de données
            conn.close();
>
});
});
});
});

2.Client

La chose la plus importante à propos du système de journalisation est l'affichage visuel. Un plug-in de JQuery jqPlot Chart est utilisé ici. Utilisez d’abord une page HTML statique comme conteneur pour l’affichage graphique :

Copier le code Le code est le suivant :



 
   
    Système de surveillance Rendez-vous
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 

 
 

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

复制代码 代码如下 :

// Stockez toutes les fonctions de dessin de graphiques, si nous voulons désactiver un graphique, il suffit de
// commentez la ligne push lors de la mise en fonction dans le tableau.
var dessine = [];

/****************************** TOP 10 Action utilisateur Démarrer ******************* ***************/
document.write('

');


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


  $.ajax({
    async: faux,
    URL : '/userActionTop10',
    Type de données : 'json',
    cache : faux,
    succès:fonction(données){
      essayez{
        $('#userActionTop10Chart').html('');


        $.jqplot('userActionTop10Chart', [data.count], {
          titre : "TOP 10 des actions utilisateur",
          sériesPar défaut :{
            moteur de rendu :$.jqplot.BarRenderer,
            options de rendu : {fillToZero : true},
            pointLabels : {
              montrer : vrai,
              ypadding :1
            >
          },
          axesDefaults :{
            tickRenderer : $.jqplot.CanvasAxisTickRenderer,
            tickOptions : {
              angle : -30,
              Taille de la police : '12px'
            >
          },
          axes : {
            axe x : {
              moteur de rendu : $.jqplot.CategoryAxisRenderer,
              ticks : data.action
            },
            yaxis : {
              tampon : 1,05
            >
          >
        });
      }attraper(e){
        //alerte(e.message);
      >
    >
  });
>


draws.push('drawUserActionTop10Chart');


/******************************* TOP 10 Action utilisateur Fin **************** ********************/

/*********** Début du graphique *****************/


//Mettez votre fonction de dessin de graphique ici
//1. insérez un div pour le graphique
//2. mettre en œuvre le tableau de dessin des fonctions
//3. poussez le nom de la fonction dans le tableau draws


/*********** Fin du graphique ******************/

//Dessinez tous les graphiques
var drawAllCharts = fonction(){
  pour(var je = 0; je < draws.length; je ){
    eval(dessine[i] "()");
  >


 // Se rappelle dans 5 minutes.
 window.setTimeout(drawAllCharts, 5 * 60 * 1000);
>


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

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

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

三、使用MongoDB et MapReduce实现日志分析

Les applications MongoDB sont basées surIncremental MapReduce.的MapReduce。最后发现原来是我理解有误,文档里并没有写这一点,只是说明了如何设置才能增量执行MapReduce。

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

复制代码 代码如下 :

/************** Le fichier est exécuté toutes les 5 minutes par /etc/crontab.*******************/
var action_count_map = fonction(){
émettre(this.action, {action:this.action, count:1});
>

var action_count_reduce = function(clé, valeurs){
var compte = 0;
valeurs.forEach(fonction(valeur){
Nombre = valeur.compte;
});
Renvoie {action:key, count : count};
>


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);

L'idée est très simple :
1. Définissez le nombre d'accès pour chaque action dans la carte sur 1
2. En réduction, comptez le nombre de visites pour une même action
3. Exécutez mapReduce. La requête est spécifiée comme « action_count » n'est pas égal à 1, c'est-à-dire que les statistiques n'ont pas été exécutées ; les résultats sont stockés dans la collection « action_count » et l'option de réduction est utilisée pour indiquer que l'ensemble de résultats est utilisé comme l’entrée de la prochaine réduction.
4. Définissez la valeur de « action_count » sur 1 dans tous les enregistrements de journal actuels, indiquant que les statistiques ont été effectuées. Je me demande si cela entraînera la mise à jour des enregistrements qui n'ont pas encore été comptés ? ? J'espère que des héros expérimentés pourront me donner quelques conseils !

Exécution planifiée du shell stats.js :

Copier le code Le code est le suivant :

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

D'accord, c'est tout le code, il n'y a rien de particulièrement mystérieux, mais Node.js est vraiment une bonne chose.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comparaison de Golang et Node.js dans le développement back-end Comparaison de Golang et Node.js dans le développement back-end Jun 03, 2024 pm 02:31 PM

Go et Node.js présentent des différences en termes de typage (fort/faible), de concurrence (goroutine/boucle d'événement) et de garbage collection (automatique/manuel). Go a un débit élevé et une faible latence, et convient aux backends à charge élevée ; Node.js est bon pour les E/S asynchrones et convient à une concurrence élevée et à des requêtes courtes. Les cas pratiques des deux incluent Kubernetes (Go), la connexion à une base de données (Node.js) et les applications Web (Go/Node.js). Le choix final dépend des besoins de l'application, des compétences de l'équipe et des préférences personnelles.

A quoi sert net4.0 A quoi sert net4.0 May 10, 2024 am 01:09 AM

.NET 4.0 est utilisé pour créer une variété d'applications et offre aux développeurs d'applications des fonctionnalités riches, notamment : programmation orientée objet, flexibilité, architecture puissante, intégration du cloud computing, optimisation des performances, bibliothèques étendues, sécurité, évolutivité, accès aux données et mobile. soutien au développement.

Comment configurer l'expansion automatique de MongoDB sur Debian Comment configurer l'expansion automatique de MongoDB sur Debian Apr 02, 2025 am 07:36 AM

Cet article présente comment configurer MongoDB sur Debian System pour réaliser une expansion automatique. Les étapes principales incluent la configuration de l'ensemble de répliques MongoDB et de la surveillance de l'espace disque. 1. Installation de MongoDB Tout d'abord, assurez-vous que MongoDB est installé sur le système Debian. Installez à l'aide de la commande suivante: SudoaptupDaSudoaptInstall-myongoDB-Org 2. Configuration de la réplique MongoDB Ensemble de répliques MongoDB assure la haute disponibilité et la redondance des données, ce qui est la base de la réalisation d'une expansion de capacité automatique. Démarrer le service MongoDB: Sudosystemctlstartmongodsudosys

Comment assurer la haute disponibilité de MongoDB sur Debian Comment assurer la haute disponibilité de MongoDB sur Debian Apr 02, 2025 am 07:21 AM

Cet article décrit comment construire une base de données MongoDB hautement disponible sur un système Debian. Nous explorerons plusieurs façons de garantir que la sécurité des données et les services continueront de fonctionner. Stratégie clé: réplicaset: réplicaset: Utilisez des répliques pour obtenir la redondance des données et le basculement automatique. Lorsqu'un nœud maître échoue, l'ensemble de répliques élise automatiquement un nouveau nœud maître pour assurer la disponibilité continue du service. Sauvegarde et récupération des données: utilisez régulièrement la commande Mongodump pour sauvegarder la base de données et formuler des stratégies de récupération efficaces pour faire face au risque de perte de données. Surveillance et alarmes: déploier les outils de surveillance (tels que Prometheus, Grafana) pour surveiller l'état de course de MongoDB en temps réel, et

Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Apr 08, 2025 pm 09:39 PM

Il est impossible de visualiser le mot de passe MongoDB directement via NAVICAT car il est stocké sous forme de valeurs de hachage. Comment récupérer les mots de passe perdus: 1. Réinitialiser les mots de passe; 2. Vérifiez les fichiers de configuration (peut contenir des valeurs de hachage); 3. Vérifiez les codes (May Code Hardcode).

Mise à jour majeure de Pi Coin: PI Bank arrive! Mise à jour majeure de Pi Coin: PI Bank arrive! Mar 03, 2025 pm 06:18 PM

Pinetwork est sur le point de lancer Pibank, une plate-forme bancaire mobile révolutionnaire! Pinetwork a publié aujourd'hui une mise à jour majeure sur Elmahrosa (face) Pimisrbank, appelée Pibank, qui intègre parfaitement les services bancaires traditionnels avec des fonctions de crypto-monnaie de pignon (prend en charge l'échange entre les Fiat Currency tels que le Dollar, l'Euro, Usdt, Usdc, Ripiah avec des crypto-monnaies. Quel est le charme de Pibank? Découvrons! Les principales fonctions de Pibank: gestion unique des comptes bancaires et des actifs de crypto-monnaie. Soutenez les transactions en temps réel et adoptez les biospécies

Comment chiffrer les données dans Debian MongoDB Comment chiffrer les données dans Debian MongoDB Apr 12, 2025 pm 08:03 PM

Le chiffrement de la base de données MongoDB sur un système Debian nécessite de suivre les étapes suivantes: Étape 1: Installez d'abord MongoDB, assurez-vous que votre système Debian a installé MongoDB. Sinon, veuillez vous référer au document officiel MongoDB pour l'installation: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/step 2: générer le fichier de clé de cryptage Créer un fichier contenant la clé de chiffrement et définir les permissions correctes: ddif = / dev / urandof = / etc / mongodb-keyfilebs = 512

Quelle est la stratégie de sauvegarde Centos MongoDB? Quelle est la stratégie de sauvegarde Centos MongoDB? Apr 14, 2025 pm 04:51 PM

Explication détaillée de la stratégie de sauvegarde efficace de MongoDB dans le cadre du système CentOS Cet article introduira en détail les différentes stratégies de mise en œuvre de sauvegarde MongoDB sur le système CentOS pour assurer la sécurité des données et la continuité des activités. Nous couvrirons les sauvegardes manuelles, les sauvegardes chronométrées, les sauvegardes de scripts automatisées et les méthodes de sauvegarde dans des environnements de conteneurs Docker, et offrir les meilleures pratiques pour la gestion des fichiers de sauvegarde. Sauvegarde manuelle: utilisez la commande mongodump pour effectuer une sauvegarde complète manuelle, par exemple: mongodump-hlocalhost: 27017-u username-p mot de passe-d database name-o / backup Directory Cette commande exportera les données et les métadonnées de la base de données spécifiée vers le répertoire de sauvegarde spécifié.

See all articles