基于Rsyslog + MongoDB搭建集中式日志管理系统

基于Rsyslog + MongoDB搭建集中式日志管理系统:


一、架构概述

  1. 日志采集端:Web服务器/防火墙等设备
  2. 日志服务器:Rsyslog + MongoDB
  3. 数据流向:
    Laravel App → Rsyslog Client → Rsyslog Server → MongoDB
    Firewall → Rsyslog Client → Rsyslog Server → MongoDB

二、服务端配置(日志中心服务器)

  1. 安装必要组件
# Ubuntu
sudo apt-get install rsyslog rsyslog-mongodb mongodb

# CentOS
sudo yum install rsyslog rsyslog-mongodb mongodb-org
  1. 配置Rsyslog服务端
# 编辑配置文件
sudo vim /etc/rsyslog.conf

# 启用网络接收
module(load="imudp")
input(type="imudp" port="514")

module(load="imtcp")
input(type="imtcp" port="514")

# 添加MongoDB支持
module(load="ommongodb")

# 定义日志模板
template(name="MongoLogs" type="list") {
    property(name="timestamp" dateFormat="iso8601")
    constant(value=" ")
    property(name="hostname")
    constant(value=" ")
    property(name="syslogtag")
    constant(value=" ")
    property(name="msg" spifno1stsp="on")
}

# 转发到MongoDB
action(type="ommongodb"
       server="127.0.0.1"
       serverport="27017"
       database="syslog"
       collection="logs"
       template="MongoLogs")
  1. 配置MongoDB
# 启动MongoDB服务
sudo systemctl start mongod

# 创建日志数据库用户
mongo
> use syslog
> db.createUser({
    user: "rsyslog",
    pwd: "StrongPassword123",
    roles: [ { role: "readWrite", db: "syslog" } ]
})
  1. 重启服务
sudo systemctl restart rsyslog mongod

三、客户端配置(Web服务器/防火墙)

  1. Laravel日志配置
# .env文件
LOG_CHANNEL=syslog
LOG_SYSLOG_HOST=your-log-server-ip
APP_NAME=laravel-app
  1. Rsyslog客户端配置
sudo vim /etc/rsyslog.d/10-forward.conf

# 转发规则
*.* @@your-log-server-ip:514  # TCP传输
# 或
*.* @your-log-server-ip:514   # UDP传输

# Laravel专用模板
template(name="LaravelFormat" type="string" string="%timegenerated% %HOSTNAME% %syslogtag% %msg%\n")

if $syslogtag contains 'laravel' then {
    action(type="omfwd" Target="your-log-server-ip" Port="514" Protocol="tcp" Template="LaravelFormat")
}
  1. 防火墙日志配置(以iptables为例)
# 添加日志规则
iptables -A INPUT -j LOG --log-prefix "[FIREWALL] "

# 配置rsyslog捕获防火墙日志
sudo vim /etc/rsyslog.d/20-ufw.conf
:msg, contains, "[FIREWALL]" -/var/log/ufw.log
& @@your-log-server-ip:514

四、验证配置

  1. 发送测试日志
logger -t TestTag "This is a test message"
  1. 查询MongoDB
mongo syslog -u rsyslog -p
db.logs.find().pretty()

五、常见问题排查

  1. 日志未接收:
  • 检查防火墙是否开放514端口
  • 验证rsyslog服务状态 systemctl status rsyslog
  • 查看本地日志 /var/log/syslog
  1. MongoDB连接问题:
  • 检查MongoDB服务状态
  • 验证认证信息是否正确
  • 测试本地连接 mongo --host 127.0.0.1 --port 27017 -u rsyslog -p

六、高级配置建议

  1. 日志分类存储
# 按设备类型分集合
template(name="DynamicCollection" type="list") {
    property(name="hostname")
    constant(value="_")
    property(name="syslogfacility-text")
}

action(type="ommongodb"
       server="127.0.0.1"
       database="syslog"
       collection="DynamicCollection")
  1. 安全增强
# TLS加密传输
action(type="ommongodb"
       server="mongodb.example.com"
       tls="on"
       tls.caCert="/path/to/ca.pem"
       tls.myCert="/path/to/client-cert.pem")
  1. 性能优化
# Rsyslog队列配置
action(type="ommongodb"
       queue.type="LinkedList"
       queue.size="100000"
       queue.workerThreads="4"
       queue.dequeueBatchSize="1000")

七、日志查看示例

  1. Laravel日志查询:
db.logs.find({
    "syslogtag": "laravel-app"
}).sort({ timestamp: -1 })
  1. 防火墙日志分析:
db.logs.aggregate([
    { $match: { "syslogtag": { $regex: /FIREWALL/ } } },
    { $group: { _id: "$hostname", count: { $sum: 1 } } }
])

提示:建议配合ELK Stack或Grafana进行可视化展示,可通过MongoDB Connector实现数据集成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值