插件窝 干货文章 如何在Linux上设置系统日志集中管理

如何在Linux上设置系统日志集中管理

syslog rsyslog sudo 日志 671    来源:    2025-04-15

Linux系统日志集中管理方案

方案概述

在Linux环境中设置系统日志集中管理通常涉及使用rsyslog或syslog-ng作为日志收集工具,并结合ELK Stack(Elasticsearch, Logstash, Kibana)或Graylog等工具进行日志分析和可视化。

方案一:使用rsyslog实现集中日志管理

1. 服务器端配置(日志收集服务器)

# 安装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

2. 客户端配置(发送日志的服务器)

# 编辑rsyslog配置文件
sudo vim /etc/rsyslog.conf

# 添加以下内容将日志发送到中央服务器
*.* @@<中央服务器IP>:514  # TCP方式
*.* @<中央服务器IP>:514   # UDP方式

# 重启rsyslog服务
sudo systemctl restart rsyslog

方案二:使用syslog-ng实现集中日志管理

1. 服务器端配置

# 安装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

2. 客户端配置

# 编辑配置文件
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

方案三:使用ELK Stack进行高级日志管理

1. 安装和配置Logstash

# 安装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

2. 配置客户端发送日志到Logstash

修改客户端的rsyslog配置:

sudo vim /etc/rsyslog.conf

# 添加
*.* @@<Logstash服务器IP>:5000

# 重启服务
sudo systemctl restart rsyslog

安全考虑

  1. 加密传输:考虑使用TLS加密日志传输

    # 在rsyslog中配置TLS
    $DefaultNetstreamDriver gtls
    $DefaultNetstreamDriverCAFile /path/to/ca.pem
    $DefaultNetstreamDriverCertFile /path/to/client-cert.pem
    $DefaultNetstreamDriverKeyFile /path/to/client-key.pem
    
  2. 访问控制:使用防火墙限制访问

    sudo ufw allow from <客户端IP> to any port 514 proto tcp
    
  3. 日志轮转:配置logrotate管理日志文件

    sudo vim /etc/logrotate.d/remote_logs
    

监控和维护

  1. 设置磁盘空间监控
  2. 定期归档旧日志
  3. 监控日志收集服务的运行状态

替代方案

  1. Graylog:开源日志管理平台,提供更友好的用户界面
  2. Fluentd:云原生日志收集器,适合容器化环境
  3. Loki:Grafana Labs的日志聚合系统,特别适合与Prometheus和Grafana配合使用

选择哪种方案取决于您的具体需求、环境规模和技术栈。对于小型环境,简单的rsyslog集中管理可能足够;对于大型分布式环境,ELK或Graylog可能更合适。