
Vector splunk_hec Source 完全指南Splunk HEC 协议接入与配置详解【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector导读splunk_hec是 Vector 中用于接收 Splunk HTTP Event CollectorHEC数据的日志源source。它在一个可配置地址上暴露三个 HTTP 端点完整实现 Splunk HEC API 的/services/collector/event、/services/collector/raw与/services/collector/health让现有 Splunk 客户端无需改造即可把数据接入 Vector 管道。读完本文你将掌握splunk_hec source 的三个端点分别承担什么职责、全部配置项的含义与默认值、基于索引器确认indexer acknowledgements的端到端交付确认机制以及该组件的源码级工作原理与事件字段映射。本文依据 splunk_hec 组件文档该页面由模板与 CUE 数据生成Markdown 源文件见 splunk_hec.md与 源码实现 撰写。组件总览一个地址三个端点按照组件元数据定义splunk_hec source 默认监听0.0.0.0:8088见 源码中的default_socket_address通过 HTTP 协议对外提供服务。它在同一监听地址上暴露三条路由端点方法作用/services/collector/eventPOST接收 JSON 格式的 HEC 事件包HEC envelope一个请求可包含多个事件/services/collector/rawPOST接收原始raw文本数据默认将整个请求体作为一个事件/services/collector/healthGET健康检查端点返回{text:HEC is healthy,code:17}此外从源码看还包含/services/collector/ackPOST用于索引器确认查询以及 OPTIONS 预检路由用于 CORS 场景下的Allow头协商见 event_service / raw_service / health_service / ack_service 的构建代码。组件类属性classes定义了其在 Vector 中的定位delivery:at_least_once至少一次交付语义deployment_roles:aggregator典型部署角色为聚合器development:stable稳定级组件egress_method:batch以批量方式向下游发送stateful:false无状态特性features方面该组件支持自动生成配置、支持 acknowledgements确认机制TLS 支持开启但默认关闭enabled_default: false且可配置证书校验多行multiline处理不支持。快速上手最小与进阶配置组件文档与配置生成器提供了两档配置示例生成于 website/generated/example-configs/sources/splunk_hec/。最小配置minimal.yamlsources: my_source_id: type: splunk_hec最小配置下source 使用默认监听地址0.0.0.0:8088且不校验请求中的Authorization头即任何请求都可写入。进阶配置advanced.yamlsources: my_source_id: type: splunk_hec address: 0.0.0.0:8088 store_hec_token: false valid_tokens: - A94A8FE5CCB19BA61C4C08进阶配置显式指定监听地址并通过valid_tokens启用 HEC token 认证。一个完整的接入示例通常形如sources: splunk_hec_in: type: splunk_hec address: 0.0.0.0:8088 valid_tokens: - A94A8FE5CCB19BA61C4C08 tls: enabled: true crt_file: /etc/vector/tls/server.crt key_file: /etc/vector/tls/server.key acknowledgements: enabled: true sinks: my_sink: type: console inputs: [splunk_hec_in] encoding: codec: json配置项逐项详解含源码依据splunk_hec source 的全部配置选项定义于 SplunkConfig 结构体下面逐项说明其含义、默认值与底层影响。address监听地址类型SocketAddr必须包含端口。默认值0.0.0.0:8088。源码依据字段标注 The addressmustinclude a port默认值由default_socket_address()生成。该地址同时用于向拓扑系统声明占用的 TCP 资源Resource::tcp(self.address)。valid_tokens有效认证令牌列表类型VecSensitiveString敏感字符串数组。默认值None即不校验任何 token。行为配置后客户端必须在Authorization头携带Splunk token与直接访问 Splunk HEC 端点的方式一致。认证逻辑见 authorization()当令牌列表为空时忽略Authorization头不认证列表非空时缺失头返回MissingAuthorization不匹配返回InvalidAuthorization。token单一令牌已弃用类型OptionSensitiveString。说明该字段已被标记为 deprecated文档与代码均建议改用valid_tokens。在SplunkSource::new中token会被并入valid_tokens一并校验见 构建 valid_credentials 的代码。store_hec_token是否透传 HEC 令牌类型bool。默认值false。行为设为true时若请求携带了 HEC token该 token 会保存在事件元数据中并在事件后续被发送到 Splunk HEC sink 时优先使用sink 侧会读取set_splunk_hec_token写入的元数据。源码中 token 仅在store_hec_token为真时才写入事件见 raw_service 中的 token 透传。tlsTLS 配置类型OptionTlsEnableableConfig。默认值None关闭。行为开启后通过MaybeTlsSettings::from_config构建 TLS 监听器。源码还支持通过build_with_tls_reloader注入TlsAcceptorReloader在证书轮换时无需重启即可热更新 TLS 接受器见 tls_config / build_with_tls_reloader。acknowledgements索引器确认类型HecAcknowledgementsConfig使用bool_or_struct反序列化——既可直接写true/false也可写为结构体细粒度配置。默认值组件默认开启确认支持can_acknowledge()返回true源码。行为开启后启用 Splunk HEC indexer acknowledgements 协议详见下文专节。log_namespace日志命名空间类型Optionbool默认None即跟随全局设置。说明决定事件按 legacy 命名空间还是 Vector 命名空间组织影响输出字段的元数据路径metadata_pathvsevent_path。该字段在文档中标记为docs::hidden。keepalive连接保活类型KeepaliveConfig包含 TCP keepalive 参数与max_connection_age_secs连接最大存活时长等。行为作用于监听器与每连接层max_connection_age_secs配合抖动因子实现连接老化回收见 build_with_tls_reloader 中的 MaxConnectionAgeLayer。event与raw编解码配置进阶特性类型CodecConfig含framing与decoding两个子项。默认值均未启用。行为event作用于/services/collector/event。设置decoding后Vector 在解析完 HEC envelope 后对event字段再做一次解码单个 envelope 可扇出fan out为多个事件解码失败会被吞掉不会向 Splunk 客户端返回错误。raw作用于/services/collector/raw。设置decoding后整个解压后的请求体直接交给编解码器而非作为一个整体事件发出。编解码器可访问 HEC envelope 元数据host、sourcetype、channel 等路径为%splunk_hec.*认证令牌可通过get_secret!(splunk_hec_token)读取。未设置时各端点保持各自的默认行为event 端点逐 envelope 解析 JSONraw 端点每个请求体生成一个事件。输出事件字段组件文档output.logs.event.fields与源码共同定义了事件的输出字段。对于 legacy 命名空间典型输出字段包括字段类型说明messagestring事件消息内容对应 Splunk envelope 中的_raw/event字段源码引用fields._raw_linesplunk_channelstringSplunk channel 标识取自X-Splunk-Request-Channel请求头或channel查询参数头优先于查询参数见 event_service 中 channel 解析splunk_sourcetypestring源类型名称HEC envelope 中的sourcetype字段timestamptimestamp事件时间戳默认取接收时刻可用 envelope 中的time字段覆盖除文档列出的字段外源码还定义了四个与 Splunk 强相关的常量字段CHANNEL / INDEX / SOURCE / SOURCETYPE 常量splunk_channelchannel 标识splunk_index目标索引名splunk_source数据来源映射语义meaning::SERVICEsplunk_sourcetype源类型另外host字段的取值优先级为事件 payload 中的host字段 X-Forwarded-For请求头 warp 提供的远端 SocketAddr见 EventIterator 的 extractors 构建。当事件被配置了 decoder编解码器时这些元数据字段的写入策略会从Overwrite切换为InsertIfEmpty以保证解码器解析出的值优先。端到端确认Indexer Acknowledgements 深度解析splunk_hec是 Vector 中支持 acknowledgements 的 source 之一特性表中acknowledgements: true。组件文档的how_it_works章节专门说明了该机制开启确认后source 使用 Splunk HEC indexer acknowledgements 协议让客户端能够验证数据是否已被投递到下游 sink。简言之每个到达 source 的请求都会关联一个整数标识符ack id客户端拿到该 id 后可用于查询该请求的处理状态。工作机制对应源码实现位于 src/sources/splunk_hec/acknowledgements.rs核心流程如下客户端 POST 事件到/services/collector/event或/services/collector/raw。请求必须携带 channel否则返回MissingChannel错误。source 为请求关联一个 batchBatchNotifier并注册一个 ack id 返回给客户端响应体中的ackId字段。事件 batch 被投递到下游当下游确认成功时source 在内部登记该 ack id 的状态。客户端随后 POST 到/services/collector/ack请求体携带待查询的 ack id 列表HecAckStatusRequestsource 查询后返回每个 id 的完成状态HecAckStatusResponse。在启用 decoder 的情况下ack id 的注册时机有所调整只有当编解码器成功产出事件、且没有任何帧被丢弃或发生错误时才会注册 ack id——避免对 Vector 已静默丢弃的数据报告“成功”见 event_service / raw_service 中的条件注册逻辑。使用前提使用该协议需要客户端具备 HEC 索引器确认能力如 Splunk Universal Forwarder 或支持该协议的采集器且请求需携带 channel 标识。同时只有确认已写入的 ack id 才会返回成功状态如果下游 sink 不支持确认source 将退化为尽力交付。关键请求行为与错误语义以下行为均可从源码验证gzip 解压请求头Content-Encoding: gzip时source 会对请求体解压且使用CappedDecoder对解压输出做大小上限限制以缓解 gzip-bomb 类型的拒绝服务攻击见 event_service 中的 gzip 处理。Content-Type 校验/services/collector/ack采用宽松的 JSON 类型检查——请求头缺失 Content-Type 时默认按 JSON 处理若显式给出且不含application/json则返回UnsupportedContentType见 lenient_json_content_type_check。健康检查/services/collector/health返回{text:HEC is healthy,code:17}。源码注释指出虽然 Splunk 文档记载该端点对非法 token 返回 400但实际实现忽略 token 校验与 Splunk 8.2.4 行为一致见 health_service。请求体上限所有端点都通过capped_body()对请求体大小做上限限制防止超大请求耗尽内存。认证格式Authorization头需形如Splunk token代码会剥离Splunk前缀后再与配置的令牌比对见 authorization()。运维与监控组件文档的 telemetry 部分声明了该 source 暴露的指标复用 Vector 内部 HTTP 服务指标定义于internal_metrics组件指标含义http_server_handler_duration_secondsHTTP handler 处理耗时直方图http_server_requests_received_total接收到的 HTTP 请求总数http_server_responses_sent_total已发送的 HTTP 响应总数此外源码中还通过内部事件internal_events上报HttpBytesReceived接收字节数、EventsReceived接收事件数、SplunkHecRequestError、SplunkHecRequestBodyInvalidError等可用于构建告警与容量监控。需要注意本组件不支持多行multiline解析多行原始日志需在下游用其他 transform如 VRLparse_regex或 multiline 相关能力处理。小结splunk_hecsource 为 Vector 提供了与 Splunk HEC 生态的无缝对接能力默认0.0.0.0:8088监听、三个核心端点 ack 端点 OPTIONS 路由、可选 token 认证与 TLS、gzip 解压与请求体限流、基于 indexer acknowledgements 的至少一次交付确认以及event/raw两套可选的二次编解码通道。从 组件 CUE 文档 到 核心实现 与 确认协议实现再到 生成的配置示例这一组件链路清晰、行为可预期是迁移或并存 Splunk HEC 工作负载时的首选接入点。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考