You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本通过Syslog向Docker部署的Fluentd发日志无输出求助

问题:本地Python脚本发送Syslog日志到Docker部署的Fluentd无响应

Fluentd配置

<source>
  @type syslog
  port 514
  bind 0.0.0.0
  tag system
</source>

<match **>
  @type stdout
</match>

Docker启动命令

docker run -p 514:514 -v $(pwd)/tmp:/fluentd/etc fluent/fluentd:edge-debian -c /fluentd/etc/fluentd.conf

Fluentd启动日志

2023-09-20 16:05:18 +0000 [info]: init supervisor logger path=nil rotate_age=nil rotate_size=nil
2023-09-20 16:05:18 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/fluentd.conf"
2023-09-20 16:05:18 +0000 [info]: gem 'fluentd' version '1.16.2'
2023-09-20 16:05:18 +0000 [warn]: define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2023-09-20 16:05:18 +0000 [info]: using configuration file: <ROOT>
  <source>
    @type syslog
    port 514
    bind "0.0.0.0"
    tag "system"
  </source>
  <match **>
    @type stdout
  </match>
</ROOT>
2023-09-20 16:05:18 +0000 [info]: starting fluentd-1.16.2 pid=7 ruby="3.1.4"
2023-09-20 16:05:18 +0000 [info]: spawn command to main:  cmdline=["/usr/local/bin/ruby", "-Eascii-8bit:ascii-8bit", "/usr/local/bundle/bin/fluentd", "-c", "/fluentd/etc/fluentd.conf", "--plugin", "/fluentd/plugins", "--under-supervisor"]
2023-09-20 16:05:19 +0000 [info]: #0 init worker0 logger path=nil rotate_age=nil rotate_size=nil
2023-09-20 16:05:19 +0000 [info]: adding match pattern="**" type="stdout"
2023-09-20 16:05:19 +0000 [info]: adding source type="syslog"
2023-09-20 16:05:19 +0000 [warn]: #0 define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2023-09-20 16:05:19 +0000 [info]: #0 starting fluentd worker pid=16 ppid=7 worker=0
2023-09-20 16:05:19 +0000 [info]: #0 listening syslog socket on 0.0.0.0:514 with udp
2023-09-20 16:05:19 +0000 [info]: #0 fluentd worker is now running worker=0
2023-09-20 16:05:19.058192424 +0000 fluent.info: {"pid":16,"ppid":7,"worker":0,"message":"starting fluentd worker pid=16 ppid=7 worker=0"}
2023-09-20 16:05:19.058414751 +0000 fluent.info: {"message":"listening syslog socket on 0.0.0.0:514 with udp"}
2023-09-20 16:05:19.059112948 +0000 fluent.info: {"worker":0,"message":"fluentd worker is now running worker=0"}

Python测试脚本

import logging
import logging.handlers
import socket

if __name__ == "__main__":
    syslogger = logging.getLogger('SyslogLogger')
    handler = logging.handlers.SysLogHandler(address=("0.0.0.0", 514), facility=19, socktype=socket.SOCK_DGRAM)
    syslogger.addHandler(handler)
    syslogger.info("Hello World")

问题现象

脚本运行无报错,但Fluentd端未收到任何日志,服务器与脚本均在本地机器上。


解决方案

1. 修正SyslogHandler目标地址

Python脚本中SysLogHandler的address参数填"0.0.0.0"错误,0.0.0.0表示监听所有网卡,而非目标地址。本地Docker服务应使用"localhost"或主机实际IP:

handler = logging.handlers.SysLogHandler(address=("localhost", 514), facility=19, socktype=socket.SOCK_DGRAM)

2. 启用INFO级别日志

默认logging.getLogger()的日志级别为WARNING,info级别的日志会被过滤,需手动设置级别:

syslogger.setLevel(logging.INFO)

3. 完整修正后的脚本

import logging
import logging.handlers
import socket

if __name__ == "__main__":
    syslogger = logging.getLogger('SyslogLogger')
    syslogger.setLevel(logging.INFO)
    handler = logging.handlers.SysLogHandler(address=("localhost", 514), facility=19, socktype=socket.SOCK_DGRAM)
    syslogger.addHandler(handler)
    syslogger.info("Hello World")

4. 确认端口映射类型

从启动日志可知Fluentd监听UDP端口,Docker启动命令-p 514:514默认同时映射TCP和UDP,若需明确可改为-p 514:514/udp。


内容的提问来源于stack exchange,提问作者Jayendra Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:05:26