Nodejs 应用程序的有效日志记录和监控
目前golang学习网上已经有很多关于文章的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《Nodejs 应用程序的有效日志记录和监控》,也希望能帮助到大家,如果阅读完后真的对你学习文章有帮助,欢迎动动手指,评论留言并分享~

对于任何应用程序,尤其是在生产环境中,监控和日志记录都是关键组件。它们可以深入了解应用程序的运行状况、性能和潜在问题。在 node.js 应用程序中,监控可帮助您跟踪响应时间、内存使用情况、错误率等指标,同时日志记录可捕获有关用户活动、错误和系统性能的基本数据。本文介绍了 node.js 应用程序的有效日志记录和监控技术,以及实际示例和代码片段。
- 日志记录和监控的重要性
- 在 node.js 中设置日志记录
- 使用 winston 进行灵活的日志记录
- 使用 prometheus 和 grafana 进行监控
- 实施健康检查
- 实际用例:生产中的日志记录和监控
日志记录和监控的重要性
日志记录和监控提供了以下方面的见解:
- 应用程序运行状况:有关错误、崩溃或严重问题的实时警报。
- 性能指标:有关服务器响应时间、内存使用情况和负载处理的数据。
- 用户活动:跟踪用户请求、成功操作和错误。
- 调试:通过错误日志和跟踪查明问题,更快地进行故障排除。
在 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 并创建自定义仪表板以可视化请求率、延迟和内存使用等指标。
实施健康检查
健康检查监视您的应用程序的状态并提醒您可能影响可用性的问题。它们可以包括对服务器响应、内存使用情况或数据库连接的基本检查。
示例: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、数据加密等技术。请继续关注!
以上就是《Nodejs 应用程序的有效日志记录和监控》的详细内容,更多关于的资料请关注golang学习网公众号!
如何使用 Go 将两个切片转换为 JSON?
- 上一篇
- 如何使用 Go 将两个切片转换为 JSON?
- 下一篇
- 旧手机流通如何更放心?
-
- 文章 · 前端 | 2小时前 | 前端 · 性能优化 · javascript · ArrayBuffer postMessage 前端性能 Web Worker Transferable structured clone
- Web Worker 传大数据为何卡顿:复制与 Transferable 对比
- 220浏览 收藏
-
- 文章 · 前端 | 4小时前 | 请求超时 Fetch AbortController AbortSignal 用户取消 前端异常处理
- Fetch 请求取消后,超时与用户中断要怎样区分
- 466浏览 收藏
-
- 文章 · 前端 | 6小时前 | 文件上传 · javascript · 前端开发 · 大文件上传 断点续传 XMLHttpRequest Blob.slice 前端分片上传 暂停上传
- 前端上传大文件:分片、暂停与失败续传怎样协作
- 371浏览 收藏
-
- 文章 · 前端 | 8小时前 | 列表详情 View Transition API 前端渐进增强
- View Transition API 做列表到详情过渡的渐进增强
- 385浏览 收藏
-
- 文章 · 前端 | 10小时前 |
- 用 CSS Container Query 让卡片按容器而不是视口响应
- 289浏览 收藏
-
- 文章 · 前端 | 13小时前 | 环境变量 vite loadEnv vite.config
- Vite 环境变量为什么在配置加载时取不到
- 133浏览 收藏
-
- 文章 · 前端 | 14小时前 |
- React useOptimistic 怎么在请求失败时回滚列表
- 153浏览 收藏
-
- 文章 · 前端 | 16小时前 | 前端开发 · 前端路由 hostname URLPattern pathname
- URLPattern 怎么同时匹配域名和路径参数
- 108浏览 收藏
-
- 文章 · 前端 | 18小时前 | javascript · JavaScript Intl.DurationFormat 前端国际化 持续时间格式化
- Intl.DurationFormat 怎么本地化显示持续时间
- 141浏览 收藏
-
- 文章 · 前端 | 20小时前 | 前端开发 · 浏览器API · postMessage MessageChannel Web Worker MessagePort
- postMessage 转移 MessagePort 后原端口还能用吗
- 477浏览 收藏
-
- 文章 · 前端 | 22小时前 | html · 前端 · LCP fetchpriority HTMLImageElement.fetchPriority 首屏图片 图片加载优先级
- fetchpriority 怎么只提升首屏关键图片
- 343浏览 收藏
-
- 文章 · 前端 | 1天前 |
- AbortSignal.any 怎么合并超时和用户取消
- 106浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 365次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 420次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 433次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 387次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 213次使用
-
- JavaScript函数定义及示例详解
- 2025-05-11 502浏览
-
- 智能体安全引领产业升级——国内AI安全产品市场深度分析
- 2026-08-21 501浏览
-
- CSS变量简化按钮悬停效果技巧
- 2026-05-31 501浏览
-
- JavaScript符号类型详解与应用
- 2026-05-31 501浏览
-
- HTML剪贴板复制粘贴怎么用
- 2026-05-26 501浏览

