Fluentd从tag字段分割提取新字段

这篇博客介绍了如何利用Fluentd处理kubernetes的日志,特别是从tag字段中分割出新的字段,以提高日志管理和分析的效率。内容涉及到pod_name、namespace_name、container_name等关键信息的提取,以及@timestamp的时间戳处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • "_index""logstash-2016.10.19",
  • "_type""fluentd",
  • "_id""AVfcB42cEKo1rP0QdbCf",
  • "_version"1,
  • "_score"1,
  • "_source": {
    • "message""test31",
    • "pod_name""test",
    • "namespace_name""default",
    • "container_name""test",
    • "container_id""286ca6a92d26b46342860b19cbba3406f7e9d3d8df41e3497d7f09d055495424",
    • "logdir""3.log",
    • "tag":"k8s.applog.test_default.test.286ca6a92d26b46342860b19cbba3406f7e9d3d8df41e3497d7f09d055495424.log.3.log",
    • "@timestamp""2016-10-19T16:21:03+08:00"
    }


<source>  type tail
  format none
  path /var/log/containers/applog*/*
  pos_file /var/log/es-containers-app.log.pos
  time_format %Y-%m-%dT%H:%M:%S.%NZ
  tag reform.*
  read_from_head true
</source>


<match reform.**>
  type record_reformer
  renew_record false
  enable_ruby true
  tag k8s.${tag_suffix[4]}
  <record>
    pod_name ${tag_suffix[5].split('_')[0]}
    namespace_name ${tag_suffix[5].split('_')[1].split('.')[0]}
    container_name ${tag_suffix[6].split('.')[0]}
    container_id ${tag_suffix[7].split('.')[0]}
    logdir ${tag_suffix[9]}
  </record>

</match>

    //软链接/var/lib/kubelet/pods 获取容器的pod名,用于Elasticsearch日志搜集服务
    // /var/lib/kubelet/pods/+podUID+/volumes/kubernetes.io~empty-dir/logdir ->/var/log/containers/applog_podName_containerName_id.log
    //glog.Errorf("pod.Spec.Volumes[0] :%s", len(pod.Spec.Volumes))
    for i := 0; i < len(pod.Spec.Volumes); i++ {
        if pod.Spec.Volumes[i].EmptyDir != nil {
            emptydirname := pod.Spec.Volumes[i].Name
            cname := container.Name
            str := "logdir" + cname
            if emptydirname == str && cname != "POD" {
                podUID := kubecontainer.GetPodUID(pod)
                containerLogFile_emptdir := path.Join("/var/lib/kubelet/pods", podUID, "volumes/kubernetes.io~empty-dir", emptydirname)
                symlinkFile_emptdir := LogSymlink_emptdir(dm.containerLogsDir, kubecontainer.GetPodFullName(pod), container.Name, id.ID)
                if err = dm.os.Symlink(containerLogFile_emptdir, symlinkFile_emptdir); err != nil {
                    glog.Errorf("Failed to create symbolic link to the application's log file of pod %q container %q: %v", format.Pod(pod), container.Name, err)
                }
            }
        }
    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值