在进行日志分析前,需先优化Node.js应用的日志输出,确保日志结构化、易存储、可分析。常用措施包括:
Winston(灵活支持多传输、多级别)、Bunyan(强调结构化JSON日志)、Pino(高性能JSON输出)等库,替代默认的console.log。例如,Winston配置文件示例:const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(), // 结构化输出
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' }),
new winston.transports.Console() // 控制台输出(调试用)
]
});
debug,生产环境用info/error),避免无关日志干扰。winston-daily-rotate-file等插件,定期分割日志文件(如按天),防止单个文件过大。例如:const DailyRotateFile = require('winston-daily-rotate-file');
new winston.transports.DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
})
{"timestamp":"2025-10-30T12:00:00.000Z","level":"info","pid":1234,"requestId":"abc123","message":"User login successful","userId":1001}
在部署正式分析工具前,可通过CentOS原生命令快速查看和处理日志:
tail -f命令跟踪日志文件的新增内容(如应用日志文件/var/log/nodejs/app.log):tail -f /var/log/nodejs/app.log
grep筛选关键词(如错误日志):grep 'error' /var/log/nodejs/app.log
wc -l统计错误日志数量:grep 'error' /var/log/nodejs/app.log | wc -l
less命令逐页浏览(按q退出):less /var/log/nodejs/app.log
rsyslog),可使用journalctl查看:journalctl -u nodejs-service -t "nodejs" # -u指定服务名,-t指定标签
ELK(Elasticsearch+Logstash+Kibana)是CentOS环境下最流行的日志分析解决方案,适合大规模、结构化日志处理。
config/elasticsearch.yml(设置cluster.name、node.name、network.host: localhost),启动服务:tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/elasticsearch-7.12.0
./bin/elasticsearch
config/kibana.yml(设置elasticsearch.hosts: ["localhost:9200"]),启动服务:tar -zxvf kibana-7.12.0-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/kibana-7.12.0
./bin/kibana
logstash.conf(定义输入、过滤、输出):input {
file {
path => "/var/log/nodejs/app.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} - %{GREEDYDATA:message}" }
}
date {
match => ["timestamp", "ISO8601"]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "nodejs-logs-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug } # 打印到控制台(调试用)
}
启动Logstash:./bin/logstash -f logstash.conf
filebeat.yml:filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nodejs/app.log
output.logstash:
hosts: ["localhost:5044"]
启动Filebeat:./bin/filebeat -e
http://<CentOS-IP>:5601,进入Kibana控制台:
nodejs-logs-*,设置时间字段为timestamp。loglevel: error筛选错误日志)。grep或Kibana筛选loglevel: error,快速找到应用报错位置(如代码行、请求参数)。logger.info({event: 'request', method: req.method, path: req.path, duration: endTime - startTime})),在Kibana中统计平均响应时间、慢请求比例,定位耗时接口。top(查看CPU/内存占用)、uptime(查看系统负载均值)、sar(查看历史性能数据)等命令,关联日志中的错误/慢请求,分析负载问题根源。通过以上步骤,可实现CentOS环境下Node.js应用日志的高效收集、分析与可视化,帮助开发者快速定位问题、优化性能。