温馨提示×

怎样远程发linux syslog

小樊
54
2026-09-07 19:06:07
栏目: 智能运维

“远程发 Linux syslog”一般指把本机日志通过网络发送到远程 syslog 服务器(或日志收集系统)。下面按常见场景 + 实操命令说明。


一、先明确:你要的是哪种?

  1. 本机程序发 syslog 到远程服务器(最常见)
  2. 系统日志(/var/log/*)转发到远程
  3. 容器 / 脚本 / 应用直接发 syslog
  4. Windows / 网络设备发到 Linux

下面主要讲 Linux → 远程 syslog。


二、最常见方案:rsyslog 转发(推荐)

1️⃣ 服务端(接收日志)

在远程 Linux 上开启 syslog 接收(以 rsyslog 为例):

# /etc/rsyslog.conf 或 /etc/rsyslog.d/remote.conf
module(load="imudp")
input(type="imudp" port="514")

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

重启:

systemctl restart rsyslog

2️⃣ 客户端(发送日志)

在要发送日志的 Linux 上:

# /etc/rsyslog.conf
*.* @remote-ip:514        # UDP
# 或
*.* @@remote-ip:514       # TCP(更可靠)

示例:

*.* @@192.168.1.100:514

重启:

systemctl restart rsyslog

✅ 这样所有系统日志都会远程发送


三、只发送指定日志(更精细)

auth.* @@192.168.1.100:514
local0.* @@logs.example.com:514

应用可用 local0~local7


四、用 logger 手动发 syslog(测试 / 脚本)

logger -n 192.168.1.100 -P 514 "hello syslog"

指定 facility:

logger -n 192.168.1.100 -P 514 -t myapp -p local0.info "test"

五、应用直接发 syslog(常见)

Python

import logging
import logging.handlers

handler = logging.handlers.SysLogHandler(address=('192.168.1.100', 514))
logging.getLogger().addHandler(handler)

Docker

docker run \
  --log-driver=syslog \
  --log-opt syslog-address=tcp://192.168.1.100:514 \
  nginx

六、TLS 加密(生产建议)

# 客户端
*.* @@(o)logs.example.com:6514

需要配置证书(rsyslog + gnutls / openssl)


七、常见坑

  • 防火墙未放行 514
  • SELinux 阻止
  • 时间不同步(建议 NTP)
  • 用 UDP 丢日志(重要日志用 TCP)

如果你愿意,可以告诉我:

  • 用 rsyslog / syslog-ng / journald?
  • 发到 SIEM / Loki / ELK / 云日志?
  • 是 系统日志 还是 业务日志?

我可以给你精确配置示例。

0 踩