跳到主要内容
版本:3.10.x

将 Kubernetes 错误日志发送到 Splunk

API7 网关运行在 Kubernetes 时,错误日志由网关容器输出,并在平台层面收集。这不同于使用 splunk-hec-logging 等日志插件从路由发送访问日志。本指南用于收集 Kubernetes Pod 中的网关错误日志并将其转发到 Splunk。

前置条件

  • API7 网关数据面 Pod 正在 Kubernetes 上运行;
  • 可以访问 Splunk Cloud 或自建 Splunk;
  • 可以在集群中安装 Helm chart;
  • 有权限在 Splunk 中创建或使用 HEC Token。

步骤一:准备 Splunk

如果已有 Splunk 和 HEC Token,可以直接进入步骤二。本地测试可以使用 Docker Compose:

docker-compose.yaml
services:
splunk:
image: splunk/splunk:9.2
container_name: splunk
hostname: splunk
environment:
- SPLUNK_START_ARGS=--accept-license
- SPLUNK_PASSWORD=yourpassword123
- SPLUNK_HEC_TOKEN=your-hec-token
ports:
- "8000:8000"
- "8088:8088"
- "8089:8089"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
docker compose up -d

Collector 在 Kubernetes 中运行,因此 HEC 端点必须能从 Collector Pod 访问。使用本地 Docker Compose 时,请使用集群可解析和访问的主机名或 IP;在基于 kind 的本地环境中可以使用 host.docker.internal

步骤二:创建 Splunk 索引

为网关错误日志创建专用索引,例如 gateway_error_logs,以便单独搜索和管理保留策略。

步骤三:创建 Splunk HEC Token

在 Splunk 中进入 Settings > Data Inputs > HTTP Event Collector,创建 Token 并记录值。典型 HEC 端点为:

https://<SPLUNK_HOST>:8088/services/collector/event

步骤四:安装 Splunk OpenTelemetry Collector

创建 values.yaml。以下配置只启用日志,禁用指标和追踪,并同时过滤非网关容器及不包含错误关键词的日志:

values.yaml
clusterName: "my-cluster"

splunkPlatform:
endpoint: "https://<SPLUNK_HOST>:8088/services/collector/event"
token: "your-hec-token"
index: "gateway_error_logs"
insecureSkipVerify: true
logsEnabled: true
metricsEnabled: false
tracesEnabled: false

logsCollection:
containers:
enabled: true
excludeAgentLogs: true
extraOperators:
- type: "filter"
expr: 'resource["k8s.container.name"] != "gateway"'
- type: "filter"
expr: 'not (body matches "(?i)(error|exception|fail|fatal)")'

agent:
resources:
limits:
cpu: 1
memory: 512Mi
requests:
cpu: 200m
memory: 256Mi

如果网关容器使用其他名称,或需要更宽/更窄的错误日志定义,请调整过滤表达式。生产环境如果 Splunk 使用受信任证书,应以适当的 TLS 配置替换 insecureSkipVerify: true

安装 Collector:

helm repo add splunk-otel-collector https://signalfx.github.io/splunk-otel-collector-chart
helm repo update
helm upgrade --install my-splunk-otel-collector \
-n logging \
--create-namespace \
-f values.yaml \
splunk-otel-collector-chart/splunk-otel-collector

高级配置请参阅 Splunk OpenTelemetry Collector Helm chart values

步骤五:验证日志收集

在 API7 网关 Pod 中生成或等待错误,然后在 Splunk 中搜索:

index="gateway_error_logs" sourcetype="kube:container:gateway"

应能看到符合过滤条件的 API7 网关容器日志。

故障排查

  • 确认 logging 命名空间中的 Collector Pod 正常运行;
  • 确认 HEC 端点 URL 和 Token 正确;
  • 如果 Splunk 位于集群外,确认 Collector Pod 可以访问 HEC 主机;
  • 检查过滤表达式是否排除了过多数据;
  • 确认网关 Pod 将日志写入 Collector 可以读取的容器输出;
  • 生产环境不要长期使用 insecureSkipVerify: true

后续步骤