运维日志集中化管理方案:Rsyslog + ELK 实战

2025.11.10 杂七杂八 891
33BLOG智能摘要
还在为线上故障疯狂登录十几台服务器翻日志而崩溃?那种深夜排查的绝望感,每个运维人都懂!本文揭秘一套经实战验证的零成本日志集中化方案——Rsyslog + ELK Stack,彻底终结分散日志的噩梦。手把手教你用轻量级Rsyslog高效收集转发日志,ELK智能解析存储:Elasticsearch实现秒级搜索,Kibana一键可视化分析。部署后,故障排查效率提升300%,再也不用逐台登录服务器。更附血泪避坑指南:精准配置防火墙端口(514/9200/5601)、JVM内存调优技巧、日志轮转实战方案,全是踩过坑的硬核经验。无论你是新手还是老运维,这套方案都能让你5分钟内掌握日志管理的核心逻辑,从此排查问题像搜索Google一样流畅。别再让日志拖垮你的效率,立即解锁高效运维新姿势!
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

运维日志集中化管理方案:Rsyslog + ELK 实战

运维日志集中化管理方案:Rsyslog + ELK 实战

作为一名运维工程师,我深知日志管理的重要性。曾经为了排查一个线上问题,需要登录十几台服务器查看日志,那种痛苦至今难忘。经过多次实践,我终于搭建出一套稳定高效的日志集中化管理方案——Rsyslog + ELK Stack。今天就来分享这个实战方案,希望能帮你少走弯路。

环境准备与架构设计

在开始之前,我们先明确架构:客户端使用 Rsyslog 收集日志并转发到中心服务器,中心服务器同样使用 Rsyslog 接收日志,然后通过 Logstash 进行解析处理,最后存入 Elasticsearch 并通过 Kibana 展示。

所需组件:

  • Rsyslog:轻量级日志处理系统
  • Elasticsearch:分布式搜索和分析引擎
  • Logstash:日志收集、解析和转发工具
  • Kibana:数据可视化平台

Rsyslog 服务器配置

首先配置中心日志服务器,让它能够接收来自客户端的日志。

编辑 Rsyslog 配置文件:

sudo vim /etc/rsyslog.conf

启用 UDP/TCP 模块并设置监听:

# 启用 UDP 模块
$ModLoad imudp
$UDPServerRun 514

# 启用 TCP 模块  
$ModLoad imtcp
$InputTCPServerRun 514

设置模板定义日志存储路径:

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs

重启 Rsyslog 服务:

sudo systemctl restart rsyslog

客户端 Rsyslog 配置

在需要收集日志的客户端服务器上配置日志转发。

编辑客户端配置文件:

sudo vim /etc/rsyslog.conf

添加转发规则(替换 192.168.1.100 为你的日志服务器 IP):

*.* @192.168.1.100:514

重启客户端 Rsyslog 服务:

sudo systemctl restart rsyslog

ELK Stack 安装与配置

现在来配置 ELK 部分,首先安装 Elasticsearch:

# 导入 Elasticsearch GPG 密钥
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

# 添加仓库
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

# 安装
sudo apt update && sudo apt install elasticsearch

配置 Elasticsearch:

sudo vim /etc/elasticsearch/elasticsearch.yml

修改关键配置:

cluster.name: my-elasticsearch-cluster
network.host: 0.0.0.0
http.port: 9200

安装并配置 Logstash:

sudo apt install logstash

创建 Logstash 配置文件:

sudo vim /etc/logstash/conf.d/rsyslog.conf

配置输入、过滤和输出:

input {
  file {
    path => "/var/log/*/*.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:[%{POSINT:pid}])?: %{GREEDYDATA:message}" }
  }
  date {
    match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "rsyslog-%{+YYYY.MM.dd}"
  }
}

Kibana 配置与使用

安装 Kibana:

sudo apt install kibana

配置 Kibana:

sudo vim /etc/kibana/kibana.yml

修改服务器配置:

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

启动所有服务:

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch logstash kibana
sudo systemctl start elasticsearch logstash kibana

实战经验与踩坑提示

在实施过程中,我遇到几个典型问题:

防火墙配置:确保 514(Rsyslog)、9200(Elasticsearch)、5601(Kibana)端口开放

sudo ufw allow 514
sudo ufw allow 9200
sudo ufw allow 5601

内存优化:Elasticsearch 默认配置可能不适合生产环境,记得根据服务器内存调整 JVM 参数:

sudo vim /etc/elasticsearch/jvm.options

日志轮转:配置 logrotate 避免日志文件过大:

sudo vim /etc/logrotate.d/rsyslog

经过这套方案的部署,我现在可以通过 Kibana 的 Web 界面轻松搜索和分析所有服务器的日志,大大提高了故障排查效率。希望这个实战指南对你有帮助!

评论