在进行日志分析前,需先优化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.loggrep筛选关键词(如错误日志):grep 'error' /var/log/nodejs/app.logwc -l统计错误日志数量:grep 'error' /var/log/nodejs/app.log | wc -lless命令逐页浏览(按q退出):less /var/log/nodejs/app.logrsyslog),可使用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/localcd /usr/local/elasticsearch-7.12.0./bin/elasticsearchconfig/kibana.yml(设置elasticsearch.hosts: ["localhost:9200"]),启动服务:tar -zxvf kibana-7.12.0-linux-x86_64.tar.gz -C /usr/localcd /usr/local/kibana-7.12.0./bin/kibanalogstash.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.conffilebeat.yml:filebeat.inputs:- type: logenabled: truepaths:- /var/log/nodejs/app.logoutput.logstash:hosts: ["localhost:5044"]启动Filebeat:./bin/filebeat -ehttp://<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应用日志的高效收集、分析与可视化,帮助开发者快速定位问题、优化性能。