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

使用Unix Stream Socket连接Suricata与Telegraf时遇客户端消息过长问题

问题:Suricata与Telegraf通过Unix Stream套接字连接失败

环境信息

Host: Ubuntu 20.04
Docker: SURICATA_VERSION=6.0.6
Docker: INFLUXDB_VERSION=2.1.1
Docker: TELEGRAF_VERSION=1.21

Suricata配置

- eve-log:
 enabled: yes
 filetype: unix_stream
 filename: /var/run/suricata/suricata-command.socket
 types:
   - stats:
       totals: no       # 合并所有线程的统计数据
       threads: yes       # 单线程统计数据

Telegraf配置

# Suricata统计和告警日志插件
[[inputs.suricata]]
  ## Suricata统计和告警日志的数据接收器
  # 此处填写用于监听的Unix套接字文件名
  source = "/tmp/suricata-command.socket"

  # 扁平化字段键的分隔符,例如"detect"的子项"alert"
  # 当分隔符为"_"时会转换为"detect_alert"
  delimiter = "_"

  ## 检测告警日志开关
  # alerts = false

错误日志

25/7/2022 -- 09:56:27 - <Warning> - [ERRCODE: SC_ERR_SOCKET(200)] - Write error on Unix socket "/var/run/suricata/suricata-command.socket": Broken pipe; reconnecting...
25/7/2022 -- 09:56:27 - <Notice> - Reconnected socket "/var/run/suricata/suricata-command.socket"
25/7/2022 -- 09:56:27 - <Info> - Command server: client message is too long, disconnect him.

问题分析与解决步骤

1. 统一套接字路径

Suricata配置的套接字路径为/var/run/suricata/suricata-command.socket,但Telegraf配置的是/tmp/suricata-command.socket,路径不一致直接导致连接失败。需将两者配置为同一路径,例如统一设置为/var/run/suricata/suricata-command.socket。

2. 容器间共享套接字目录

由于Suricata和Telegraf分属不同Docker容器,需将套接字所在目录作为共享卷挂载到两个容器:

  • 给Suricata容器挂载主机目录或Docker卷到/var/run/suricata
  • 给Telegraf容器挂载同一目录或卷到/var/run/suricata
    确保两个容器能访问到同一个套接字文件。

3. 调整权限设置

套接字文件需要允许Telegraf容器读取,可通过以下方式调整:

  • 启动容器时指定相同的用户ID(UID)和组ID(GID)
  • 在挂载卷时设置权限为777(仅测试环境使用,生产环境需配置更严格的权限)

4. 解决"消息过长"问题

错误日志中的client message is too long是因为Suricata输出的单线程统计数据量过大,可调整Suricata配置:

  • 将threads: yes改为threads: no,仅输出合并后的统计数据
  • 若Telegraf版本支持,可调整Suricata插件的缓冲区大小参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:06:23