运维日志集中化管理方案: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 界面轻松搜索和分析所有服务器的日志,大大提高了故障排查效率。希望这个实战指南对你有帮助!

这个方案太实用了!正愁日志管理太麻烦
514端口用UDP会不会丢包啊?有点担心