Rumah hujung hadapan web tutorial js Node.js dan MongoDB melaksanakan sistem analisis log ringkas_node.js

Node.js dan MongoDB melaksanakan sistem analisis log ringkas_node.js

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

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:

Salin kod Kod adalah seperti berikut:

HOST = null; // localhost
PORT = 8001;

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:

Salin kod Kod adalah seperti berikut:

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


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

Salin kod Kod adalah seperti berikut:



 
   
    Sistem Monitor Rendezvous
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 
 
 

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

复制代码 代码如下:

// Simpan semua fungsi lukisan carta, jika kita ingin melumpuhkan satu carta, hanya perlu
// ulas baris tolak apabila meletakkan fucntion ke dalam tatasusunan.
var cabutan = [];

/******************************* TOP 10 Mula Tindakan Pengguna ***************** *****************/
document.write('

');


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


  $.ajax({
    async:false,
    url: '/userActionTop10',
    dataType:'json',
    cache: palsu,
    kejayaan:fungsi(data){
      cuba{
        $('#userActionTop10Chart').html('');


        $.jqplot('userActionTop10Chart', [data.count], {
          tajuk: "10 Tindakan Pengguna Teratas",
          seriesDefaults:{
            pemapar:$.jqplot.BarRenderer,
            rendererOptions: {fillToZero: true},
            pointLabels: {
              tunjukkan:benar,
              ypadding:1
            }
          },
          axesDefaults:{
            tickRenderer:$.jqplot.CanvasAxisTickRenderer,
            tickOptions: {
              sudut: -30,
              Saiz fon: '12px'
            }
          },
          paksi: {
            xaxis: {
              pemapar: $.jqplot.CategoryAxisRenderer,
              kutu: data.tindakan
            },
            yaxis: {
              pad: 1.05
            }
          }
        });
      }tangkap(e){
        //alert(e.message);
      }
    }
  });
}


draws.push('drawUserActionTop10Carta');


/******************************* TOP 10 Tindakan Pengguna Tamat **************** *********************/

/*********** Carta Mula *****************/


//Letakkan fungsi lukisan carta anda di sini
//1. masukkan div untuk carta
//2. laksanakan carta lukisan fungsi
//3. tolak nama fungsi ke dalam lakaran tatasusunan


/*********** Carta Tamat *******************/

// Lukis semua carta
var drawAllCharts = function(){
  untuk(var i = 0; i < draws.length; i ){
    eval(menarik[i] "()");
  }


 //Ingat semula dirinya dalam masa 5 minit.
 window.setTimeout(drawAllCharts, 5 * 60 * 1000);
}


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

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

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

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

在MongoDB的文档中有关于Incremental MapReduce的介绍。刚开始一直以为MongoDB实现Streaming处理,可以增自。最后发现原来是我理解有误,文档里并没有写这一点,只是说明了如何设置才能增量执行MapReduce。

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

复制代码 代码如下:

/************** Fail dilaksanakan setiap 5 minit oleh /etc/crontab.*****************/
var action_count_map = function(){
emit(this.action, {action:this.action, count:1});
}

var action_count_reduce = fungsi(kunci, nilai){
kiraan var = 0;
values.forEach(function(value){
Kira = nilai.kira;
});
Kembalikan {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);

Ideanya sangat mudah:
1. Tetapkan bilangan akses untuk setiap tindakan dalam peta kepada 1
2. Dalam mengurangkan, kira bilangan lawatan ke tindakan yang sama
3. Laksanakan mapReduce. Pertanyaan ditentukan sebagai 'action_count' tidak sama dengan 1, iaitu, statistik belum dilaksanakan; input pengurangan seterusnya.
4. Tetapkan nilai 'action_count' kepada 1 dalam semua rekod log semasa, menunjukkan bahawa statistik telah dilakukan. Saya tertanya-tanya adakah ini akan menyebabkan rekod yang masih belum dikira akan dikemas kini? ? Saya harap wira yang berpengalaman dapat memberi saya nasihat!

Pelaksanaan shell stats.js berjadual:

Salin kod Kod adalah seperti berikut:

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

Baiklah, ini semua kodnya, tiada apa-apa yang sangat misteri, tetapi Node.js adalah perkara yang bagus.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbandingan Golang dan Node.js dalam pembangunan back-end Perbandingan Golang dan Node.js dalam pembangunan back-end Jun 03, 2024 pm 02:31 PM

Go dan Node.js mempunyai perbezaan dalam menaip (kuat/lemah), konkurensi (goroutine/gelung peristiwa) dan pengumpulan sampah (automatik/manual). Go mempunyai daya pemprosesan yang tinggi dan kependaman rendah, dan sesuai untuk bahagian belakang beban tinggi Node.js bagus pada I/O tak segerak dan sesuai untuk permintaan serentak tinggi dan pendek. Kes praktikal kedua-duanya termasuk Kubernetes (Go), sambungan pangkalan data (Node.js) dan aplikasi web (Go/Node.js). Pilihan terakhir bergantung pada keperluan aplikasi, kemahiran pasukan, dan keutamaan peribadi.

Apakah kegunaan net4.0 Apakah kegunaan net4.0 May 10, 2024 am 01:09 AM

.NET 4.0 digunakan untuk mencipta pelbagai aplikasi dan ia menyediakan pemaju aplikasi dengan ciri yang kaya termasuk: pengaturcaraan berorientasikan objek, fleksibiliti, seni bina berkuasa, penyepaduan pengkomputeran awan, pengoptimuman prestasi, perpustakaan yang luas, keselamatan, Kebolehskalaan, akses data dan mudah alih sokongan pembangunan.

Cara mengkonfigurasi pengembangan automatik MongoDB pada Debian Cara mengkonfigurasi pengembangan automatik MongoDB pada Debian Apr 02, 2025 am 07:36 AM

Artikel ini memperkenalkan cara mengkonfigurasi MongoDB pada sistem Debian untuk mencapai pengembangan automatik. Langkah -langkah utama termasuk menubuhkan set replika MongoDB dan pemantauan ruang cakera. 1. Pemasangan MongoDB Pertama, pastikan MongoDB dipasang pada sistem Debian. Pasang menggunakan arahan berikut: SudoaptDateSudoaptInstall-ImongoDB-Org 2. Mengkonfigurasi set replika replika MongoDB MongoDB Set memastikan ketersediaan dan kelebihan data yang tinggi, yang merupakan asas untuk mencapai pengembangan kapasiti automatik. Mula MongoDB Service: sudosystemctlstartmongodsudosys

Cara Memastikan Ketersediaan MongoDB Tinggi di Debian Cara Memastikan Ketersediaan MongoDB Tinggi di Debian Apr 02, 2025 am 07:21 AM

Artikel ini menerangkan cara membina pangkalan data MongoDB yang sangat tersedia pada sistem Debian. Kami akan meneroka pelbagai cara untuk memastikan keselamatan data dan perkhidmatan terus beroperasi. Strategi Utama: Replicaset: Replicaset: Gunakan replika untuk mencapai redundansi data dan failover automatik. Apabila nod induk gagal, set replika secara automatik akan memilih nod induk baru untuk memastikan ketersediaan perkhidmatan yang berterusan. Sandaran dan Pemulihan Data: Secara kerap Gunakan perintah Mongodump untuk membuat sandaran pangkalan data dan merumuskan strategi pemulihan yang berkesan untuk menangani risiko kehilangan data. Pemantauan dan penggera: Menyebarkan alat pemantauan (seperti Prometheus, Grafana) untuk memantau status MongoDB dalam masa nyata, dan

Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Apr 08, 2025 pm 09:39 PM

Tidak mustahil untuk melihat kata laluan MongoDB secara langsung melalui Navicat kerana ia disimpan sebagai nilai hash. Cara mendapatkan kata laluan yang hilang: 1. Tetapkan semula kata laluan; 2. Periksa fail konfigurasi (mungkin mengandungi nilai hash); 3. Semak Kod (boleh kata laluan Hardcode).

Kemas kini utama Pi Coin: Pi Bank akan datang! Kemas kini utama Pi Coin: Pi Bank akan datang! Mar 03, 2025 pm 06:18 PM

Pinetwork akan melancarkan Pibank, platform perbankan mudah alih revolusioner! Pinetwork hari ini mengeluarkan kemas kini utama mengenai Pimisrbank Elmahrosa (muka), yang disebut sebagai Pibank, yang mengintegrasikan dengan baik perkhidmatan perbankan tradisi C). Apakah pesona Pibank? Mari kita cari! Fungsi utama Pibank: Pengurusan sehenti akaun bank dan aset cryptocurrency. Menyokong urus niaga masa nyata dan mengamalkan biospesies

Cara Menyulitkan Data dalam Debian Mongodb Cara Menyulitkan Data dalam Debian Mongodb Apr 12, 2025 pm 08:03 PM

Menyulitkan pangkalan data MongoDB pada sistem Debian memerlukan langkah berikut: Langkah 1: Pasang MongoDB terlebih dahulu, pastikan sistem Debian anda dipasang MongoDB. Jika tidak, sila rujuk kepada dokumen MongoDB rasmi untuk pemasangan: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/step 2: menghasilkan fail kunci penyulitan Buat fail yang mengandungi kunci penyulitan dan tetapkan kebenaran yang betul:

Apakah strategi sandaran CentOS MongoDB? Apakah strategi sandaran CentOS MongoDB? Apr 14, 2025 pm 04:51 PM

Penjelasan terperinci mengenai strategi sandaran yang cekap MongoDB di bawah sistem CentOS Artikel ini akan memperkenalkan secara terperinci pelbagai strategi untuk melaksanakan sandaran MongoDB pada sistem CentOS untuk memastikan kesinambungan data dan kesinambungan perniagaan. Kami akan merangkumi sandaran manual, sandaran masa, sandaran skrip automatik, dan kaedah sandaran dalam persekitaran kontena Docker, dan menyediakan amalan terbaik untuk pengurusan fail sandaran. Sandaran Manual: Gunakan perintah Mongodump untuk melakukan sandaran penuh manual, contohnya: Mongodump-Hlocalhost: 27017-U Pengguna-P Password-D Database Data-O/Backup Direktori Perintah ini akan mengeksport data dan metadata pangkalan data yang ditentukan ke direktori sandaran yang ditentukan.

See all articles