Nodejs 应用程序的有效日志记录和监控

夏雪小哥_7666

夏雪小哥_7666

2024-10-31

1129人浏览

转载

nodejs 应用程序的有效日志记录和监控

对于任何应用程序,尤其是在生产环境中,监控和日志记录都是关键组件。它们可以深入了解应用程序的运行状况、性能和潜在问题。在 node.js 应用程序中,监控可帮助您跟踪响应时间、内存使用情况、错误率等指标,同时日志记录可捕获有关用户活动、错误和系统性能的基本数据。本文介绍了 node.js 应用程序的有效日志记录和监控技术,以及实际示例和代码片段。

  1. 日志记录和监控的重要性
  2. 在 node.js 中设置日志记录
  3. 使用 winston 进行灵活的日志记录
  4. 使用 prometheus 和 grafana 进行监控
  5. 实施健康检查
  6. 实际用例:生产中的日志记录和监控

日志记录和监控的重要性

日志记录和监控提供了以下方面的见解:

  • 应用程序运行状况:有关错误、崩溃或严重问题的实时警报。
  • 性能指标:有关服务器响应时间、内存使用情况和负载处理的数据。
  • 用户活动:跟踪用户请求、成功操作和错误。
  • 调试:通过错误日志和跟踪查明问题,更快地进行故障排除。

在 node.js 中设置日志记录

node.js 有一个内置的控制台对象,它提供基本的日志记录功能(console.log()、console.error() 等)。然而,对于可扩展的应用程序,结构化且可配置的日志记录至关重要。

基本日志记录示例:

// basic logging in node.js
console.log("application started");
console.error("an error occurred");

对于生产级应用程序,请使用结构化记录器,例如 winston 或 bunyan。

使用 winston 进行灵活的日志记录

winston 是 node.js 中流行的日志记录库,它允许配置日志记录级别并支持多种传输(例如文件、控制台、http)。

设置温斯顿:

const winston = require('winston');

const logger = winston.createlogger({
    level: 'info',
    format: winston.format.json(),
    transports: [
        new winston.transports.console(),
        new winston.transports.file({ filename: 'error.log', level: 'error' }),
        new winston.transports.file({ filename: 'combined.log' })
    ]
});

// log messages
logger.info("this is an informational message");
logger.error("this is an error message");

使用 prometheus 和 grafana 进行监控

prometheus 是一个用于收集应用程序指标的强大工具,grafana 允许您通过详细的仪表板可视化这些指标。

第 1 步:安装 node.js 的 prometheus 客户端

安装舞会客户端包:

npm install prom-client

第 2 步:设置 prometheus 指标

在 node.js 应用程序中定义请求持续时间和活动请求等指标:

const client = require('prom-client');

// create metrics
const requestduration = new client.histogram({
    name: 'http_request_duration_seconds',
    help: 'duration of http requests in seconds',
    labelnames: ['method', 'status']
});

const activerequests = new client.gauge({
    name: 'active_requests',
    help: 'number of active requests'
});

// record metrics
app.use((req, res, next) => {
    const end = requestduration.starttimer();
    activerequests.inc();

    res.on('finish', () => {
        end({ method: req.method, status: res.statuscode });
        activerequests.dec();
    });

    next();
});

第 3 步:公开指标端点

创建端点以向 prometheus 公开指标:

app.get('/metrics', async (req, res) => {
    res.set('content-type', client.register.contenttype);
    res.send(await client.register.metrics());
});

第 4 步:使用 grafana 进行可视化

将 prometheus 连接到 grafana 并创建自定义仪表板以可视化请求率、延迟和内存使用等指标。

Nodejs Patterns
Nodejs Patterns

内容:生产级 Node.js 后端模式,涵盖 Express/Fastify 配置、分层架构、中间件、错误处理、验证、数据库集成、身份验证及缓存。 时机:构建 REST API、搭建 Node.js 服务器、实施身份验证、集成数据库、添加验证/缓存或构建后端应用结构时。 关键词:nodejs, node, express, fastify, typescript, api, rest, 中间件, 身份验证, jwt, 验证, zod, postgres, mongodb, redis, 缓存, 速率限

下载

实施健康检查

健康检查监视您的应用程序的状态并提醒您可能影响可用性的问题。它们可以包括对服务器响应、内存使用情况或数据库连接的基本检查。

示例:node.js 中的健康检查端点

app.get('/health', (req, res) => {
    const healthstatus = {
        uptime: process.uptime(),
        message: 'ok',
        timestamp: date.now()
    };
    res.status(200).send(healthstatus);
});

将运行状况检查与 aws cloudwatch 或 google cloud monitoring 等监控工具集成,以便在出现问题时创建警报。

实际用例:生产中的日志记录和监控

假设您正在 aws 上运行电子商务应用程序,每秒处理数百个请求。以下是如何设置强大的日志记录和监控:

第 1 步:使用 winston 实施日志记录

使用 winston 记录所有关键操作,包括用户请求、成功的交易和错误。

logger.info("User login successful", { userId: "12345", timestamp: new Date() });
logger.error("Payment processing failed", { error: error.message, timestamp: new Date() });

第 2 步:设置 prometheus 进行指标收集

使用 prometheus 跟踪请求持续时间、活动请求和内存使用情况等指标。这可以帮助识别高流量期间的性能问题。

第3步:创建用于监控的grafana仪表板

将 prometheus 数据连接到 grafana 并设置仪表板来实时监控响应时间、cpu 使用率和错误率。配置警报以接收任何异常情况的通知,例如错误率激增或内存使用率过高。

结论

有效的日志记录和监控对于管理和扩展 node.js 应用程序至关重要,尤其是在生产环境中。 winston 等日志框架允许您捕获结构化日志,而 prometheus 和 grafana 等监控工具可提供性能指标的可见性并帮助您更快地解决问题。通过实施这些工具,您可以确保 node.js 应用程序平稳运行、高效处理流量并为用户提供可靠的体验。

在下一篇文章中,我们将探讨如何保护 node.js 应用程序,讨论 https、cors、数据加密等技术。请继续关注!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

nodejs

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1029

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

3260

5

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

4716

8

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.28

1415

5

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1858

5

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

2023.08.17

10283

11

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

1020

4

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2964

5

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.14

1629

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
快速入门Node.JS全套完整版
快速入门Node.JS全套完整版

共83课时 | 13.6万人学习

nodejs开发基础教程
nodejs开发基础教程

共15课时 | 4.9万人学习

JavaScript设计模式视频教程
JavaScript设计模式视频教程

共28课时 | 6.3万人学习