整合Debian Node.js多实例日志可以通过以下几种方法实现:
syslog
和rsyslog
安装rsyslog
:
sudo apt-get update
sudo apt-get install rsyslog
配置rsyslog
:
编辑/etc/rsyslog.conf
或创建一个新的配置文件(例如/etc/rsyslog.d/nodejs.conf
),添加以下内容:
# 指定Node.js日志文件路径
$template NodejsLogs,"/var/log/nodejs/%fromhost-ip%-%programname%.log"
if $programname == 'node' then ?NodejsLogs
& stop
重启rsyslog
服务:
sudo systemctl restart rsyslog
配置Node.js应用:
在Node.js应用的启动脚本中,设置日志输出到标准输出(stdout)或标准错误(stderr),例如使用winston
或morgan
等日志库:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: '/dev/stdout' })
]
});
logrotate
安装logrotate
:
sudo apt-get update
sudo apt-get install logrotate
配置logrotate
:
创建一个新的配置文件(例如/etc/logrotate.d/nodejs
),添加以下内容:
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
重启logrotate
服务:
sudo systemctl restart logrotate
安装和配置ELK Stack
(Elasticsearch, Logstash, Kibana):
sudo apt-get update
sudo apt-get install elasticsearch
sudo apt-get install logstash
sudo apt-get install kibana
配置Node.js应用:
使用winston
或其他日志库将日志发送到Logstash:
const winston = require('winston');
const { ElasticsearchTransport } = require('winston-elasticsearch');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new ElasticsearchTransport({
level: 'info',
clientOpts: { node: 'http://localhost:9200' },
index: 'nodejs-logs-%DATE%',
type: '_doc'
})
]
});
启动和配置Logstash:
编辑/etc/logstash/conf.d/nodejs.conf
,添加以下内容:
input {
file {
path => "/var/log/nodejs/*.log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "nodejs-logs-%{+YYYY.MM.dd}"
}
}
启动Logstash:
sudo systemctl start logstash
通过以上方法,你可以有效地整合Debian Node.js多实例日志,便于管理和分析。