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

如何从Kubernetes侧直接转发应用原始日志至Splunk?

Kubernetes侧直接转发应用原始日志到Splunk的解决方案

Absolutely, there are Kubernetes-side ways to make sure your app's raw JSON logs reach Splunk without that annoying extra wrapping. Since you're new to K8s, I'll break down the most accessible and practical solutions below:

方法1:直接让容器将日志发送到Splunk(绕过kubelet包装)

这个方法让你的应用容器跳过kubelet的日志捕获,直接把stdout的原始JSON日志发送到Splunk的HTTP Event Collector (HEC)。你需要在Pod的配置中指定splunk日志驱动:

apiVersion: v1
kind: Pod
metadata:
  name: your-app-pod
spec:
  containers:
  - name: your-app-container
    image: your-app-image:latest
    logging:
      driver: splunk
      options:
        splunk-url: "https://your-splunk-hec-endpoint:8088"
        splunk-token: "your-splunk-hec-token"
        splunk-format: "json"
        splunk-verify-connection: "false" # 根据你的Splunk TLS配置调整
        splunk-sourcetype: "app-log" # 自定义Splunk sourcetype,方便后续查询

优缺点:

  • ✅ 完全避免kubelet的日志包装,直接发送原始JSON
  • ❌ 需要为每个应用Pod配置日志驱动,规模化管理时可能需要结合ConfigMap/Secret来复用配置

方法2:调整Splunk Forwarder DaemonSet的日志采集规则

如果你的团队已经在用DaemonSet部署Splunk Forwarder来采集节点上的容器日志,默认采集的/var/log/containers/*.log文件里的日志是kubelet包装后的结构。你可以修改Forwarder的配置,让它自动提取并转发log字段里的原始JSON:

  1. 在Splunk Forwarder的inputs.conf中添加监控规则:
[monitor:///var/log/containers/*.log]
sourcetype = kubernetes:container
TRANSFORMS-extract_raw_log = extract_raw_json_log
  1. 在transforms.conf中定义提取规则:
[extract_raw_json_log]
REGEX = "log":\s*"([^"]+)"
FORMAT = $1
DEST_KEY = _raw
  1. 在props.conf中启用这个转换:
[kubernetes:container]
TRANSFORMS-extract_raw_log = extract_raw_json_log

优缺点:

  • ✅ 无需修改应用Pod配置,只需要调整Forwarder的全局配置
  • ❌ 需要熟悉Splunk的配置文件,对K8s新手有一点学习成本

方法3:使用Splunk Connect for Kubernetes(规模化管理推荐)

Splunk官方提供的Splunk Connect for Kubernetes是专门为K8s日志采集设计的工具,它基于Fluentd,可以轻松配置提取原始日志内容。如果你用Helm部署,只需要修改values.yaml中的Fluentd配置:

fluentd:
  config:
    filters:
      - name: parser
        parameters:
          key_name: log
          reserve_data: false # 丢弃kubelet添加的额外字段,只保留原始日志
          parse:
            type: json

这个配置会让Fluentd解析kubelet包装的外层JSON,提取log字段里的原始JSON作为最终发送到Splunk的日志内容。

优缺点:

  • ✅ 标准化的K8s日志采集方案,适合团队规模化使用
  • ✅ 内置了K8s元数据关联(比如Pod名称、命名空间),后续查询更灵活
  • ❌ 需要安装Helm和Splunk Connect,初始化步骤稍多一点

Pick the approach that fits your team's current setup best. If you're just starting with K8s, Splunk Connect for Kubernetes is a great starting point—it abstracts away a lot of manual config work and plays nicely with Kubernetes best practices.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:59:35