在Linux环境中设置系统日志集中管理通常涉及使用rsyslog或syslog-ng作为日志收集工具,并结合ELK Stack(Elasticsearch, Logstash, Kibana)或Graylog等工具进行日志分析和可视化。
# 安装rsyslog
sudo apt-get install rsyslog # Debian/Ubuntu
sudo yum install rsyslog # RHEL/CentOS
# 编辑配置文件
sudo vim /etc/rsyslog.conf
# 取消以下行的注释以启用TCP/UDP接收
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
# 设置模板,定义接收日志的存储路径
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
& ~
# 重启rsyslog服务
sudo systemctl restart rsyslog
# 编辑rsyslog配置文件
sudo vim /etc/rsyslog.conf
# 添加以下内容将日志发送到中央服务器
*.* @@<中央服务器IP>:514 # TCP方式
*.* @<中央服务器IP>:514 # UDP方式
# 重启rsyslog服务
sudo systemctl restart rsyslog
# 安装syslog-ng
sudo apt-get install syslog-ng # Debian/Ubuntu
sudo yum install syslog-ng # RHEL/CentOS
# 编辑配置文件
sudo vim /etc/syslog-ng/syslog-ng.conf
# 添加以下内容
source s_net {
udp(ip(0.0.0.0) port(514);
tcp(ip(0.0.0.0) port(514);
};
destination d_clients {
file("/var/log/remote/${HOST}.log");
};
log {
source(s_net);
destination(d_clients);
};
# 重启服务
sudo systemctl restart syslog-ng
# 编辑配置文件
sudo vim /etc/syslog-ng/syslog-ng.conf
# 添加以下内容
destination central_server {
tcp("<中央服务器IP>" port(514));
};
log {
source(s_src);
destination(central_server);
};
# 重启服务
sudo systemctl restart syslog-ng
# 安装Logstash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install logstash
# 创建Logstash配置文件
sudo vim /etc/logstash/conf.d/logstash.conf
# 添加以下内容
input {
tcp {
port => 5000
type => syslog
}
udp {
port => 5000
type => syslog
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "syslog-%{+YYYY.MM.dd}"
}
}
# 启动Logstash
sudo systemctl start logstash
修改客户端的rsyslog配置:
sudo vim /etc/rsyslog.conf
# 添加
*.* @@<Logstash服务器IP>:5000
# 重启服务
sudo systemctl restart rsyslog
加密传输:考虑使用TLS加密日志传输
# 在rsyslog中配置TLS
$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /path/to/ca.pem
$DefaultNetstreamDriverCertFile /path/to/client-cert.pem
$DefaultNetstreamDriverKeyFile /path/to/client-key.pem
访问控制:使用防火墙限制访问
sudo ufw allow from <客户端IP> to any port 514 proto tcp
日志轮转:配置logrotate管理日志文件
sudo vim /etc/logrotate.d/remote_logs
选择哪种方案取决于您的具体需求、环境规模和技术栈。对于小型环境,简单的rsyslog集中管理可能足够;对于大型分布式环境,ELK或Graylog可能更合适。