整合Linux Node.js日志与监控系统可以帮助你更好地管理和分析应用程序的运行状态。以下是一个基本的步骤指南,帮助你实现这一目标:
winston, pino, morgan 等。Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana), Datadog, New Relic 等。使用 winston 或 pino 等日志库来记录应用程序的日志。以下是一个使用 winston 的示例:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
在 Node.js 应用中配置 logstash 传输:
const { LogstashTransport } = require('winston-logstash');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new LogstashTransport({
host: 'localhost',
port: 5000,
ssl_enable: false
})
]
});
在 Node.js 应用中配置 fluent-logger:
const FluentLogger = require('fluent-logger');
const logger = new FluentLogger();
logger.emit('info', { tag: 'node.app', message: 'Hello World!' });
在 Node.js 应用中使用 prom-client 库来暴露监控指标:
const client = require('prom-client');
const register = client.register;
const httpRequestDurationMicroseconds = new client.Histogram({
name: 'http_request_duration_ms',
help: 'Duration of HTTP requests in ms',
labelNames: ['method', 'route', 'code'],
buckets: [0.10, 5, 15, 50, 100, 200, 300, 400, 500]
});
app.use((req, res, next) => {
res.locals.startEpoch = Date.now();
res.on('finish', () => {
const responseTimeInMs = Date.now() - res.locals.startEpoch;
httpRequestDurationMicroseconds
.labels(req.method, req.route.path, res.statusCode)
.observe(responseTimeInMs);
});
next();
});
app.get('/metrics', async (req, res) => {
res.set('Content-Type', register.contentType);
res.end(await register.metrics());
});
在 Prometheus 中配置抓取任务:
scrape_configs:
- job_name: 'node_app'
static_configs:
- targets: ['localhost:3000']
在 Grafana 中添加 Prometheus 数据源并创建仪表盘来可视化监控数据。
确保所有组件(日志和监控)都正确配置并运行。你可以通过以下方式验证:
通过以上步骤,你可以成功整合 Linux Node.js 日志与监控系统,从而更好地管理和分析应用程序的运行状态。