


Node.js et MongoDB implémentent une analyse simple des journaux system_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 :
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 :
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 :
几乎是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 :
*/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.

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

.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.

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

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

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

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

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

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é.
