gpt4 book ai didi

logging - 将 Kubernetes 元数据添加到自定义 FluentD 非 DaemonSet @tail 事件

转载 作者:行者123 更新时间:2023-12-05 07:11:36 25 4
gpt4 key购买 nike

我有一个运行 Fluentd 作为 sidecar 的 pod,它从另一个容器(示例应用程序)收集日志,并且公共(public)卷已安装在两个容器上(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 元数据,例如 namespace_namepod_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 过滤器来实现这一目标?

最佳答案

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

下行API引用: https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/

关于logging - 将 Kubernetes 元数据添加到自定义 FluentD 非 DaemonSet @tail 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60733197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com