欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

使用NodeJS怎么讀取分析Nginx錯(cuò)誤日志-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)使用NodeJS怎么讀取分析Nginx錯(cuò)誤日志,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),涇縣企業(yè)網(wǎng)站建設(shè),涇縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,涇縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,涇縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

錯(cuò)誤日志分析

首先我們要讀取Nginx日志,我們可以看到Nginx的錯(cuò)誤日志格式一般都是這樣子,需要注意的是Nginx的錯(cuò)誤日志格式是差不多的因?yàn)闊o(wú)法設(shè)置日志格式只能設(shè)置日志錯(cuò)誤等級(jí)所以我們分析的時(shí)候很方便

使用NodeJS怎么讀取分析Nginx錯(cuò)誤日志

 這里我們用到readline

逐行讀取,簡(jiǎn)單來(lái)說(shuō)可以做

  • 文件逐行讀?。罕热缯f(shuō)進(jìn)行日志分析。

  • 自動(dòng)完成:比如輸入npm,自動(dòng)提示"help init install"。

  • 命令行工具:比如npm init這種問(wèn)答式的腳手架工具。 這里我們主要做日志分析其他的感興趣可以琢磨一下

實(shí)現(xiàn)方法

const readline = require('readline');
const fs = require('fs');
const path = require('path');
console.time('readline-time')
const rl = readline.createInterface({
 input: fs.createReadStream(path.join(__dirname, '../public/api.err.log'), {
  start: 0,
  end: Infinity
 }),

});
let count = 0; 
rl.on('line', (line) => {
 const arr = line.split(', ');
 const time = arr[0].split('*')[0].split('[')[0].replace(/\//g, '-');//獲取到時(shí)間
 const error = arr[0].split('*')[1].split(/\d\s/)[1];//錯(cuò)誤原因
 const client = arr[1].split(' ')[1];//請(qǐng)求的客戶端
 const server = arr[2].split(' ')[1];//請(qǐng)求的網(wǎng)址
 const url = arr[3].match(/\s\/(\S*)\s/)[0].trim()//獲取請(qǐng)求鏈接
 const upstream = arr[4].match(/(?<=").*?(?=")/g)[0];//獲取上游
 const host = arr[5].match(/(?<=").*?(?=")/g)[0];//獲取host
 const referrer = arr[6] ? arr[6].match(/(?<=").*?(?=")/g)[0] : '';//來(lái)源
 console.log(`時(shí)間:${time}-原因:${error}-客戶端:${client}-網(wǎng)址:${server}-地址:${url}-上游:${upstream}-主機(jī):${host}-來(lái)源:${referrer}`); 
 count++;
});
rl.on('close', () => {
 let size = fs.statSync(path.join(__dirname, '../public/api.err.log')).size;
 console.log(`讀取完畢:${count};文件位置:${size % 2 === 0}`);
 console.timeEnd('readline-time')
});

上面代碼有幾點(diǎn)需要注意的是會(huì)創(chuàng)建一個(gè)文件可讀流然后由于演示所以我是直接找的本地地址如果是生產(chǎn)環(huán)境的話大家可以直接填寫(xiě)服務(wù)器上的錯(cuò)誤日志地址,如果沒(méi)有Nginx錯(cuò)誤日志分割的話每天會(huì)產(chǎn)生很多日志,createReadStream讀取幾十M的文件還好如果讀取幾百M(fèi)或者上G的容量日志這會(huì)造成性能問(wèn)題,所以我們需要在每次createReadStream沒(méi)必要每次從0字節(jié)開(kāi)始讀取,ceateReadStream提供了start和end

 使用NodeJS怎么讀取分析Nginx錯(cuò)誤日志

所以我們每次可以在讀取完之后記錄一下當(dāng)前文件字節(jié)大小下一次讀取文件就是可以用該文件上次的大小開(kāi)始讀取

let size = fs.statSync(path.join(__dirname, '../public/api.err.log')).size;

我們可以對(duì)比一下每次從0字節(jié)開(kāi)始讀取和從指定字節(jié)讀取

使用NodeJS怎么讀取分析Nginx錯(cuò)誤日志

保存數(shù)據(jù)進(jìn)行分析

這里我是用node-schedule這個(gè)庫(kù)進(jìn)行定時(shí)保存錯(cuò)誤日志和linux的cron差不多,用的mongodb保存數(shù)據(jù),這里更推薦大家用elasticsearch來(lái)做日志分析

rl.on('close', async () => {
     let count = 0;
     for (let i of rlist) {
      count++;
      if (count % 500 === 0) {
       const res = await global.db.collection('logs').bulkWrite(rlist.slice(count, count + 500), { ordered: false, w: 1 }).catch(err => { console.error(`批量插入出錯(cuò)${err}`) }); 
      } else if (count === rlist.length - 1) {
      //批量插入 數(shù)據(jù)
       const res = await global.db.collection('logs').bulkWrite(rlist.slice(rlist - (rlist % 500), rlist.length), { ordered: false, w: 1 });
       let size = fs.statSync(addres).size;
       size = size % 2 === 0 ? size : size + 1;//保證字節(jié)大小是偶數(shù) 不然會(huì)出現(xiàn)讀取上行內(nèi)容不完整的情況
       count = 0;
       rlist.length = [];
       //更新數(shù)據(jù)庫(kù)里面文件的size
       global.db.collection('tasks').updateOne({ _id: addre }, { $set: { _id: addre, size, date: +new Date() } }, { upsert: true }); 
      }
     }
     resolve(true);
    })

上面主要是500條保存一次,因?yàn)槲矣玫氖桥坎迦肴缓髆ongodb有限制一次性最多插入16M數(shù)據(jù)的限制,所以大家看自己清空決定一次性插入多少條 猶豫對(duì)readline的實(shí)現(xiàn)比較感興趣,就去翻閱了一下源碼發(fā)現(xiàn)并不是我們想的那么復(fù)雜, readline源碼 ,下面貼一下line事件的源碼,想繼續(xù)深入的同學(xué)可以看看全部的源碼

if (typeof s === 'string' && s) {
     var lines = s.split(/\r\n|\n|\r/);
     for (var i = 0, len = lines.length; i < len; i++) {
      if (i > 0) {
       this._line();
      }
      this._insertString(lines[i]);
     }
    }
...
Interface.prototype._line = function() {
 const line = this._addHistory();
 this.clearLine();
 this._onLine(line);
};
...
Interface.prototype._onLine = function(line) {
 if (this._questionCallback) {
  var cb = this._questionCallback;
  this._questionCallback = null;
  this.setPrompt(this._oldPrompt);
  cb(line);
 } else {
  this.emit('line', line);
 }
};

保存的數(shù)據(jù)需要進(jìn)行分析比如哪個(gè)IP訪問(wèn)最多哪條錯(cuò)誤最多可以用聚合來(lái)進(jìn)行分析貼出示例分析某個(gè)IP在某一天訪問(wèn)出錯(cuò)最多的原因

db.logs.aggregate(
 // Pipeline
 [
 // Stage 1
 {
  $group: {
   '_id': { 'client': '114.112.163.28', 'server': '$server', 'error': '$error', 'url': '$url', 'upstream': '$upstream','date':'$date' ,'msg':'$msg' } ,
     
   'date':{'$addToSet':'$date'},
   count: { '$sum': 1 } 
  }
 },
 // Stage 2
 {
  $match: { 
     count: { $gte: 1 },
     date: ['2019-05-10']
    
  }
 },
 {
  $sort: {
    count: -1
  }
 },
 ],
 // Options
 {
 cursor: {
  batchSize: 50
 },
 allowDiskUse: true
 }
);

以上就是使用NodeJS怎么讀取分析Nginx錯(cuò)誤日志,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標(biāo)題:使用NodeJS怎么讀取分析Nginx錯(cuò)誤日志-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://chinadenli.net/article20/cejpco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
成人免费视频免费观看| 国产欧美日韩在线一区二区| 六月丁香六月综合缴情| 一区二区三区亚洲国产| 国产精品欧美一区二区三区不卡 | 久七久精品视频黄色的| 在线观看免费视频你懂的 | 欧美日韩综合综合久久久| 国产精品流白浆无遮挡| 国产精品偷拍一区二区| 成人日韩在线播放视频| 好东西一起分享老鸭窝| 日本高清加勒比免费在线| 粉嫩国产美女国产av| 大尺度剧情国产在线视频| 国产午夜福利片在线观看| 久久re6热在线视频| 精品亚洲av一区二区三区| 91人妻久久精品一区二区三区| 激情爱爱一区二区三区| 日韩中文字幕欧美亚洲| 99国产高清不卡视频| 日韩不卡一区二区在线| 久久精品久久久精品久久| 免费大片黄在线观看国语| 国产麻豆视频一二三区| 亚洲一区二区亚洲日本| 欧美日韩校园春色激情偷拍| 好东西一起分享老鸭窝| 免费在线成人激情视频| 99久热只有精品视频最新| 激情五月激情婷婷丁香| 狠色婷婷久久一区二区三区| 国产日韩欧美综合视频| 自拍偷拍一区二区三区| 日本特黄特色大片免费观看| 免费观看一区二区三区黄片| 亚洲熟女熟妇乱色一区| 黄片免费在线观看日韩| 麻豆蜜桃星空传媒在线观看| 国产精品推荐在线一区|