Nodejs Express 通过log4js写日志到Logstash(ELK)

yizhihongxing

下面是详细讲解“Nodejs Express 通过log4js写日志到Logstash(ELK)”的完整攻略:

什么是ELK?

ELK 是 ElasticSearch、Logstash、Kibana 三个开源软件的缩写。

  • ElasticSearch 是一个基于Lucene搜索引擎构建的开源搜索和数据分析引擎,可以用于全文检索、结构化搜索、统计分析等领域。
  • Logstash 是一个数据采集、转换和传输工具,可以实时采集和处理来自多种来源的数据,完成数据清洗、格式转换和数据传输等任务。
  • Kibana 是一个数据可视化和分析工具,它可以使用 ElasticSearch 作为后端存储来展现和分析数据。

Node.js应用如何将日志写入ELK?

Node.js 应用可以通过 log4js 模块将日志输出到文件或控制台,log4js 还支持多种输出方式,其中包括输出到 Logstash 的 TCP 输入插件,从而实现数据的实时传输到 ELK 中。

以下是具体的实现过程:

1. 安装配置log4js

npm install log4js

在项目中使用配置文件 log4js.json

{
  "appenders": {
    "out": {
      "type": "stdout",
      "layout": {
        "type": "coloured"
      }
    },
    "errors": {
      "type": "dateFile",
      "filename": "logs/errors/error.log",
      "alwaysIncludePattern": true,
      "pattern": "-yyyy-MM-dd"
    },
    "logstash": {
      "type": "@log4js-node/logstashudp",
      "host": "127.0.0.1",
      "port": "5000",
      "fields": {
        "environment": "dev",
        "component": "nodejs-express"
      },
      "layout": {
        "type": "pattern",
        "pattern": "%m"
      }
    }
  },
  "categories": {
    "default": {
      "appenders": [
        "out",
        "errors",
        "logstash"
      ],
      "level": "all"
    }
  }
}

这个配置文件定义了三个输出器,分别输出到 stdoutlogs/errors/error.log、logstash 的 TCP 输入插件。

2. 启动Logstash

可以使用 Docker 启动一个 ELK 环境:

docker run -d -p 5601:5601 -p 9200:9200 -p 5000:5000 -v /path/to/logstash.conf:/config-dir/logstash.conf -v /path/to/logs:/logs --name elk sebp/elk

其中 /path/to/logstash.conf 是你的 Logstash 配置文件所在的路径, /path/to/logs 是你的应用日志所在的路径。

Logstash 的配置文件示例如下:

input {
  tcp {
    port => 5000
  }
}

filter {
  json {
    source => "message"
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    document_type => "_doc"
    codec => "json"
  }
}

该配置文件指定从TCP输入插件中读取数据,解析 JSON 格式后输出到 Elasticsearch 服务器中。

3. 在Node.js应用中输出日志

在 Node.js 应用中导入 log4js 模块:

const log4js = require('log4js')

使用 log4js 输出日志:

const logger = log4js.getLogger('app')

logger.debug('Hello world')
logger.info('Hello world')
logger.warn('Hello world')
logger.error('Hello world', { error: new Error('Something went wrong') })

其中第一个参数 'app' 是一个命名空间,用于区分不同的输出器。这里使用了 debug、info、warn、error 四个不同的级别来输出日志。

至此,我们已经完成了 Node.js 应用将日志写入 ELK 的过程。

示例1

以下是一个简单的 Express 应用,演示如何将日志输出到 ELK 中:

const express = require('express')
const log4js = require('log4js')

const app = express()

log4js.configure(require('./log4js.json'))
const logger = log4js.getLogger('app')

app.use((req, res) => {
  logger.info('Received request: %s %s', req.method, req.url)
  res.send('Hello world')
})

app.listen(3000, err => {
  if (err) {
    logger.error('Failed to start server', { error: err })
  } else {
    logger.info('Server started at http://localhost:3000')
  }
})

log4js.json 文件中,我们定义了三个输出器:out 输出到控制台,errors 输出到 logs/errors/error.log 文件,logstash 输出到 Logstash 的 TCP 输入插件。

运行应用:

node app.js

访问 http://localhost:3000,查看 ELK 界面,可以看到日志已经传输到 Logstash 中。

示例2

以下是一个使用 Express 和 mongoose 的应用,演示如何将错误信息写入 ELK 中:

const express = require('express')
const log4js = require('log4js')
const mongoose = require('mongoose')

const app = express()

log4js.configure(require('./log4js.json'))
const logger = log4js.getLogger('app')

mongoose.connect('mongodb://localhost:27017/myapp')

const db = mongoose.connection

db.on('error', err => {
  logger.error('Error connecting to MongoDB', { error: err })
})

db.once('open', () => {
  logger.info('Connected to MongoDB')
})

app.get('/users', (req, res) => {
  User.find((err, users) => {
    if (err) {
      logger.error('Error finding users', { error: err })
      res.send('Error finding users')
    } else {
      res.json(users)
    }
  })
})

app.listen(3000, err => {
  if (err) {
    logger.error('Failed to start server', { error: err })
  } else {
    logger.info('Server started at http://localhost:3000')
  }
})

该应用使用 mongoose 连接到 MongoDB 数据库,并在 /users 路由中查询所有用户信息,如果发生错误,将错误信息输出到 Logstash 中。

总结

通过 log4js,Node.js 应用可以实现将日志输出到多种目的地的功能,包括文件、控制台和 Logstash 等,实际应用中可以根据需要选择相应的输出方式。

以上就是“Nodejs Express 通过log4js写日志到Logstash(ELK)”的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs Express 通过log4js写日志到Logstash(ELK) - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node-red File读取好保存实例讲解

    下面是node-red对于文件读取和保存的完整攻略: 1. 首先安装node-red的fs模块 在使用node-red读取和保存文件之前,需要先安装node-red的fs模块。打开终端窗口,进入到node-red的安装目录下,然后输入以下命令进行fs模块的安装: npm install fs –save 2. 读取文件 在node-red中,使用fs模块的…

    node js 2023年6月8日
    00
  • 用nodejs搭建websocket服务器

    使用Node.js可以很方便地搭建Websocket服务器,下面就来详细讲解一下具体的步骤。 步骤1:安装依赖 安装websocket和ws模块,这两个模块都可以用于搭建websocket服务器,我们在下面的示例中将演示这两个模块的使用方法。可以使用npm命令进行安装: npm install websocket npm install ws 步骤2:创建W…

    node js 2023年6月8日
    00
  • async/await优雅的错误处理方法总结

    异步编程中的错误处理 异步编程中的一个常见问题就是错误处理。在JavaScript中,我们可以使用try…catch语句来捕获同步代码的错误。但是对于异步代码来说,错误处理就需要一些特别的技巧。 Promise的错误处理 在Promise中,我们可以在链式调用的then和catch方法中捕获错误。如果前面的Promise发生错误,则会直接调用catch方…

    node js 2023年6月8日
    00
  • nodejs个人博客开发第六步 数据分页

    下面我会详细讲解“nodejs个人博客开发第六步 数据分页”的完整攻略。 步骤一:安装必要的依赖 在开始数据分页之前,我们需要安装一些必要的依赖,包括「mongoose-paginate」和「mongoose」。 npm install mongoose-paginate mongoose –save 步骤二:设置数据模型 在我们开始分页之前,我们需要先定…

    node js 2023年6月8日
    00
  • 基于nodejs res.end和res.send的区别

    首先,需要了解的是res.end()和res.send()都是Node.js用于向客户端发送HTTP响应的方法。它们都可以发送内容到客户端,但是在某些情况下它们会有些微的差异,下面就详细讲解一下它们之间的区别。 1. res.end() 1.1 作用 res.end()是Node.js内置HTTP模块的方法之一,用于结束响应进程并向客户端发送最后一个数据块。…

    node js 2023年6月8日
    00
  • 基于Element的组件改造的树形选择器(树形下拉框)

    基于Element的组件改造的树形选择器(树形下拉框)的完整攻略如下: 准备工作 安装 Element UI。可以在项目中使用 npm 安装,安装命令为 npm i element-ui -S,也可以通过 CDN 引入。 引入相关的文件。在 HTML 文件中,需要引入 Element UI 的样式文件和 JS 文件,还需要引入一个自定义的 CSS 文件和一个…

    node js 2023年6月8日
    00
  • Node.js中的进程间通信

    在Node.js中,可以通过各种方式进行进程间通信,这些方式包括:共享内存、管道、信号、Socket以及Unix Domain Socket等。下面将针对其中几种方式进行详细讲解。 管道 管道是一种常见的进程间通信方式,它可以被用于连接两个进程,从而使得一个进程的输出(stdout)可以作为另一个进程的输入(stdin)。在Node.js中,可以使用spaw…

    node js 2023年6月8日
    00
  • Sublime Text3 配置 NodeJs 环境的方法

    下面我来为你详细讲解“Sublime Text3 配置 NodeJs 环境的方法”的完整攻略。具体过程如下: 1. 安装 NodeJs 首先,我们需要安装 NodeJs,NodeJs 的安装比较简单,前往官网下载对应版本的 NodeJs 安装包,安装即可。 2. 安装 Package Control 插件 Sublime Text3 的 Package Co…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部