一、基础部署方式
Docker Compose 快速部署
创建配置文件目录并编写 docker-compose.yml:
version: '3'
services:
syslog-ng:
image: balabit/syslog-ng
ports:
- "514:514/udp" # UDP 协议监听默认端口
- "601:601" # 支持 TCP 协议传输
volumes:
- /data/syslog/conf:/etc/syslog-ng # 映射配置目录
- /data/syslog/logs:/var/log/syslog-ng # 持久化日志存储
通过 docker-compose up -d 启动服务,适用于生产环境。
Docker CLI 单命令运行
直接运行容器(适合测试环境):
docker run -d --name syslog-ng \
-p 514:514/udp -p 601:601 \
-v /data/syslog/conf:/etc/syslog-ng \
-v /data/syslog/logs:/var/log/syslog-ng \
balabit/syslog-ng:latest
此方式无需额外配置文件,快速验证功能。
二、高级网络配置(隔离环境)
若需为 Syslog-ng 分配独立 IP 或支持 IPv6,可通过 macvlan 网络驱动实现:
创建 macvlan 网络:
docker network create -d macvlan \
--subnet=192.168.7.0/24 --gateway=192.168.7.1 \
-o parent=eth0 docker-out
启动容器并绑定网络:
docker run --net=docker-out --ip=192.168.7.49 -d \
-p 514:514/udp \
-v /data/syslog/conf:/etc/syslog-ng \
balabit/syslog-ng:latest
适用于多网卡或容器需直接暴露在物理网络的场景。
三、核心配置说明
配置文件管理
挂载宿主机目录 /data/syslog/conf 至容器内的 /etc/syslog-ng,便于动态修改配置。
示例配置(syslog-ng.conf):
@version: 3.27
source s_network {
syslog(ip(0.0.0.0) port(514) transport("udp"));
};
destination d_logs {
file("/var/log/syslog-ng/${HOST}/${YEAR}${MONTH}${DAY}.log");
};
log { source(s_network); destination(d_logs); };
按客户端 IP 和日期自动分类存储日志。
日志存储与清理
宿主机映射目录 /data/syslog/logs 存储所有日志文件,支持后续 ELK 或 Splunk 集成分析。
通过 logrotate 或 Syslog-ng 内置的 time-reap 参数实现日志滚动清理。
四、客户端日志发送示例
Linux 客户端配置
修改 /etc/rsyslog.conf,添加:
*.* @192.168.7.49:514 # 指向 Syslog-ng 服务器 IP 和端口
重启服务:systemctl restart rsyslog。
Java 应用日志转发
在 Log4j2 配置中添加 Syslog Appender:
<Syslog name="Syslog" host="192.168.7.49" port="514" protocol="UDP" />
确保依赖包含 log4j-core 和 log4j-api。
五、调试与监控
查看容器运行状态:
docker logs -f syslog-ng # 实时监控容器日志
验证日志接收:
在客户端执行 logger "Test Message",检查宿主机 /data/syslog/logs 目录是否生成对应日志文件。
六、注意事项
权限问题:确保宿主机映射目录(如 /data/syslog)对容器用户(默认 root)有读写权限。
协议选择:UDP 性能高但无确认机制,关键业务建议使用 TCP 端口 601。
安全性:暴露 514/udp 端口时,需配置防火墙规则限制访问来源 IP。