跳到主要内容
版本:Next

Syslog

使用 TLS 发送 RFC 5424 消息,采用 RFC 5425 字节计数分帧。

描述​

将 INSERT 行发送到 TLS Syslog 接收端。本连接器仅为 Sink,不监听或接收 Syslog。 不支持 RFC 3164、明文 TCP、UDP、RELP、事务或自动重连重试。

支持的引擎​

Spark
Flink
SeaTunnel Zeta

主要特性​

支持的数据源​

接收端必须支持 RFC 5424、TLS 和 RFC 5425 分帧,例如 syslog-ng 的 syslog(transport("tls")) Source。仅支持换行分隔的旧式 TCP 监听器不兼容。 连接器使用 JDK TLS,不需要额外客户端库。 消息字节上限不得超过接收端限制,并非所有接收端都接受 8192 字节。

Sink 选项​

名称类型必需默认值描述
hostString是-接收端 DNS 名称或 IP,不含协议或端口,必须与证书匹配。
portInt否6514接收端端口,范围 1-65535。
connect_timeout_msInt否10000TCP 连接超时毫秒数,必须为正数。不包括 JVM/平台 DNS 解析时间。
write_timeout_msInt否10000每次 TLS 握手、写入/刷新和关闭的超时毫秒数,必须为正数。
max_message_bytesInt否8192编码后的消息上限,范围 1-1048576 字节。包括头、结构化数据和 UTF-8 BOM,不含长度前缀。超限报错,不截断。
tls.ca_cert_pathString否-Worker 本地 PEM CA 证书集合;未配置时使用 JVM 默认信任证书。
tls.key_store.pathString否-双向 TLS 使用的 Worker 本地客户端密钥库。
passwordString配置密钥库时-密钥库及私钥密码。
tls.key_store.typeString否PKCS12客户端密钥库类型:PKCS12 或 JKS。
common-options否-通用 Sink 选项,包括 plugin_input。

输入 Schema​

列名固定,可用 Transform 重命名。其他列被忽略。可选列一旦存在,必须使用指定类型。 Schema 校验不会访问网络或读取 TLS 文件。

列类型缺失或 null 时约束
messageSTRING列必需;null 不发送 MSGUTF-8 文本;空字符串与 null 不同。非 null MSG 带 UTF-8 BOM。
facilityINT1(用户级)0-23,PRI = facility * 8 + severity。
severityINT6(信息)0-7。
timestampSTRING-RFC 5424 时间戳,使用大写 T/Z 或数字时区偏移,最多六位小数秒。不接受非法日期、闰秒或无时区时间。不自动生成时间戳。
hostnameSTRING-1-255 个不含空格的可打印 US-ASCII 字符。
app_nameSTRING-1-48 个不含空格的可打印 US-ASCII 字符。
proc_idSTRING-1-128 个不含空格的可打印 US-ASCII 字符。
msg_idSTRING-1-32 个不含空格的可打印 US-ASCII 字符。
structured_dataMAP<STRING, MAP<STRING, STRING>>-,空 Map 也相同SD-ID 到参数 Map 的映射,不接受原始结构化数据字符串。

SD-ID 和参数名为 1-32 个可打印 ASCII 字符,不得含空格、=、]、"。 参数值必须是非 null 字符串,允许空参数 Map。参数值中的引号、反斜杠和右方括号会被转义。 请使用 IANA 注册的 SD-ID 或带自身企业编号的标识;example@32473 仅供文档示例使用。 非法 Unicode 被拒绝。MSG 和参数值中的换行及控制字符被保留,字节分帧使它们仍属于同一消息, 但接收端的存储或显示策略可能修改这些字符。头字段中的空格及控制字符被拒绝,不进行转义。 RFC 3164 Source 的 Oct 11 22:14:15 等时间戳必须先显式转换。

交付语义和资源限制​

  • 每个 Writer 使用一个 TLS 连接,同步发送消息,没有异步消息队列。同一 Writer 最多有一次写入进行中。 字节上限限制每个帧及中间编码缓冲区。
  • 写入成功或检查点刷新成功仅表示本地 TLS/Socket 操作完成。 Syslog 不提供对接收端解析、持久化或下游交付的应用级确认。 本 Sink 不保证至少一次或精确一次;故障和恢复可能造成丢失或重复。
  • 部分写入、超时或检测到断连会永久终止该 Writer,不会静默重试。 引擎恢复可能重新执行输入,从而在接收端产生重复消息。
  • 两个 prepare-commit 方法、snapshot 和 close 都刷新或检查连接并传播传输错误。 不提供事务提交或可恢复的 Writer 状态。
  • 超时监控直接关闭底层 TCP Socket 以中断阻塞的 TLS 写入,不能仅用读超时来限制写入。 并发 close 会中断进行中的操作;中断写入线程可能需要等待至当前操作的超时期限。 DNS 解析受 JVM/平台解析器限制,需单独配置。
  • 操作超时应小于作业检查点超时。并行 Writer 使用不同连接,不保证全局顺序。 本地写入成功无法发现所有接收端故障,例如接收端接收后丢弃消息。

TLS 和安全​

必须使用 TLS,仅启用 Worker JDK 支持的 TLS 1.2 和 TLS 1.3。 使用配置的 CA 集合或 JVM 默认信任证书验证接收端证书链,并通过 JSSE HTTPS 端点标识校验 host。 不提供信任全部证书或跳过主机名校验的选项,也不修改 JVM 全局 TLS 设置。

信任证书和客户端密钥库必须部署到所有 Worker。限制私钥文件的访问权限,通过配置替换或部署环境的 密钥管理提供 password,不要提交真实密码。双向 TLS 必须同时配置密钥库路径和密码, 接收端也必须信任该客户端证书。TLS 认证的是传输对端,不是输入行中的 hostname 或应用标识。

示例​

接收端应配置为使用 TLS 接收 RFC 5424 字节计数帧。替换以下端点和 CA 路径后运行。 示例文件:seatunnel-connectors-v2/connector-syslog/examples/fake_to_syslog.conf。

env {
parallelism = 1
job.mode = "BATCH"
}
source {
FakeSource {
row.num = 1
schema.fields {
facility = int
severity = int
timestamp = string
hostname = string
app_name = string
proc_id = string
msg_id = string
structured_data = "map<string, map<string, string>>"
message = string
}
rows = [{
kind = INSERT
fields = [1, 6, "2026-01-02T03:04:05.123Z", "origin", "seatunnel", "-", "ID47",
{"example@32473": {"component": "pipeline"}}, "job completed"]
}]
}
}
sink {
Syslog {
host = "syslog.example.org"
port = 6514
tls.ca_cert_path = "/etc/seatunnel/syslog-ca.pem"
connect_timeout_ms = 10000
write_timeout_ms = 10000
max_message_bytes = 8192
}
}

可选客户端认证:

tls.key_store.path = "/etc/seatunnel/syslog-client.p12"
tls.key_store.type = "PKCS12"
password = ${SYSLOG_KEY_STORE_PASSWORD}

更新日志

连接器发布后记录变更。