【问题标题】:Adding Kubernetes Metadata To Custom FluentD Non DaemonSet @tail Event将 Kubernetes 元数据添加到自定义 FluentD 非 DaemonSet @tail 事件
【发布时间】:2022-04-08 17:03:26
【问题描述】:

我有一个将 Fluentd 作为 sidecar 运行的 pod,它从另一个容器(示例应用程序)收集日志,并且公共卷已安装在两个容器(volumeMounts)上。

示例应用程序代码将 UTC 时间戳写入文件

   containers:
    - name: sampleApplication
      image: ${DOCKER_IMAGE}:${DOCKER_TAG}
      args:
        - /bin/sh
        - -c
        - >
          i=0;
          while true;
          do
            echo "$i: $(date)" >> /var/log/1.log;
            i=$((i+1));
            sleep 1;
          done

/var/log/1.log 的尾部输出,

2849: Wed Mar 18 03:12:01 UTC 2020
2850: Wed Mar 18 03:12:02 UTC 2020
2851: Wed Mar 18 03:12:03 UTC 2020
2852: Wed Mar 18 03:12:04 UTC 2020
2853: Wed Mar 18 03:12:05 UTC 2020
2854: Wed Mar 18 03:12:06 UTC 2020

FluentD 配置:

fluent.conf: |-
  <source>
    @type tail
    path /var/log/1.log
    pos_file /var/log/1.log.pos
    refresh_interval 5
    rotate_wait 5
    time_format %Y-%m-%dT%H:%M:%S.%N%Z
    format json
    keep_time_key true
    tag fluentd_event
  </source>

  <match **>
    @type secure_forward
    self_hostname "#{ENV['HOSTNAME']}"
    shared_key ****12345678****
    secure yes
    ca_cert_path /tmp/fluentd/keys/ca_cert.pem
    ca_private_key_path /tmp/fluentd/keys/external_ca_key.pem
    ca_private_key_passphrase ocpsecureforward

    <server>
       # This server accepts the fluentD events
      host 100.100.100.23
      port 24284
    </server>
  </match>

上面的配置对我很有效,我可以在Kibana 中可视化fluentD @tail 插件的尾部事件,但我还想实现的是将基本的kubernetes 元数据添加到尾部事件中,例如@987654326 @、pod_namecontainer_name。我已将kubernetes_metadata 插件配置为,

<filter **>
 type kubernetes_metadata
 kubernetes_url "#{ENV['K8S_HOST_URL']}"
 cache_size "#{ENV['K8S_METADATA_CACHE_SIZE'] || '1000'}"
 watch "#{ENV['K8S_METADATA_WATCH'] || 'false'}"
 bearer_token_file /var/run/secrets/kubernetes.io/serviceaccount/token
 ca_file /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
 use_journal "#{ENV['USE_JOURNAL'] || 'nil'}"
 container_name_to_kubernetes_regexp '^(?<name_prefix>[^_]+)_(?<container_name>[^\._]+)(\.(? 
 <container_hash>[^_]+))?_(?<pod_name>[^_]+)_(?<namespace>[^_]+)_[^_]+_[^_]+$'

我确实浏览了一些博客并了解到可以从容器日志文件中过滤和添加 kubernetes 元数据,但我没有将 fluentD 作为 DaemonSet 运行。我打算将它作为 sidecar 运行,并使用 @tail 插件收集应用程序日志文件并将基本的 kubernetes 元数据添加到事件中。

可以利用kubernetes_metadata 过滤器来实现此目的吗?

【问题讨论】:

  • 运气好吗?我目前正在尝试面临同样的问题。
  • @PavelP.F.还没有。你有吗?
  • @Jninja 你找到解决方案了吗?

标签: logging kubernetes fluentd fluent-bit kubernetes-metrics


【解决方案1】:

另一种方法是使用“向下 API”并将元数据信息放入环境变量中,然后通过 fluentd 配置中的“#{ENV['POD_NAME']}”使用它们。

向下 API 参考: https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多