Splunk
概述
GreptimeDB 实现了 Splunk HTTP Event Collector (HEC) 协议的一个子集。已经在用 HEC 的采集器——比如 Vector 和 OpenTelemetry Collector——只需要改一下地址和 token 就能写入 GreptimeDB。
提供两个写入端点:
/services/collector/event接收结构化的 JSON 事件。/services/collector/raw接收纯文本,原样存储。
Splunk 的 index 对应 GreptimeDB 的表。host、source、sourcetype 以及 fields 下的各个 key 会成为 Tag 列,GreptimeDB 会把它们加进表的主键。
不支持 indexer acknowledgment(/services/collector/ack)。channel 参数会被接收但忽略。
Fluent Bit 自带的 splunk output 用不了这个端点。它把请求路径写死成 /services/collector/event,也没有提供配置路径的选项,所以在没有反向代理的情况下访问不到 GreptimeDB 的 /v1/splunk。要从 Fluent Bit 写入,请改用它的 HTTP output。
HTTP API
基础路径是 /v1/splunk,采集路径由客户端自己拼接。把采集器指向 http://${db_host}:${db_http_port}/v1/splunk 即可,例如 http://localhost:4000/v1/splunk。
| 端点 | 方法 | 用途 |
|---|---|---|
/v1/splunk/services/collector/event | POST | 写入 JSON 事件。别名:/services/collector、/services/collector/event/1.0 |
/v1/splunk/services/collector/raw | POST | 写入纯文本。别名:/services/collector/raw/1.0 |
/v1/splunk/services/collector/health | GET | 健康检查。别名:/services/collector/health/1.0 |
请求体支持 gzip 压缩(Content-Encoding: gzip)。
鉴权
只有在服务端配置了 user provider 时才会校验鉴权。没有配置时请求直接放行。
HEC 客户端发送的是 Authorization: Splunk <token>,GreptimeDB 把这个 token 按 username:password 解析:
Authorization: Splunk greptime_user:greptime_pwd
Authorization: Basic <base64> 同样接受。
大多数 Splunk 客户端默认用一个不含冒号的 opaque token,这种 token 会被 GreptimeDB 拒绝并返回 HEC code 4。请把客户端的 token 配置成 <username>:<password> 的形式。
健康检查端点是公开的,任何情况下都不需要 token。
写入 JSON 事件
POST /v1/splunk/services/collector/event
请求体是一个或多个 HEC 事件对象。它们可以直接拼接、用换行或空格这类 JSON 空白字符分隔,也可以放在一个顶层 JSON 数组里。其他分隔符(比如逗号、分号)会导致解析失败,请求返回 HEC code 6。