我正在尝试使用 Fluentd 在 Kubernetes 中实现Streaming Sidecar Container日志架构。
在一个吊舱中,我有:
- emptyDir Volume(作为日志存储)
- 应用容器
- Fluent 日志转发器容器
基本上,应用程序容器日志存储在共享的 emptyDir 卷中。Fluentd 日志转发器容器在共享的 emptyDir 卷中跟踪此日志文件,并将其转发到外部日志聚合器。
Fluentd 日志转发器容器使用以下配置td-agent.conf
:
<source>
@type tail
tag "#{ENV['TAG_VALUE']}"
path (path to log file in volume)
pos_file /var/log/td-agent/tmp/access.log.pos
format json
time_key time
time_format %iso8601
keep_time_key true
</source>
<match *.*>
@type forward
@id forward_tail
heartbeat_type tcp
<server>
host (server-host-address)
</server>
</match>
我正在使用环境变量来设置tag
值,因此我可以动态更改它,例如,当我必须将此容器与不同的应用程序容器并排使用时,我不必修改此配置并再次重建此映像.
现在,我在 Kubernetes 中创建 pod 期间设置环境变量值:
.
.
spec:
containers:
- name: application-pod
image: application-image:1.0
ports:
- containerPort: 1234
volumeMounts:
- name: logvolume
mountPath: /var/log/app
- name: log-forwarder
image: log-forwarder-image:1.0
env:
- name: "TAG_VALUE"
value: "app.service01"
volumeMounts:
- name: logvolume
mountPath: /var/log/app
volumes:
- name: logvolume
emptyDir: {}
部署 pod 后,我发现 Fluentd log-forwarder 容器中的 tag 值是空的(预期值:“app.service01”)。我想这是因为 Fluentd 的 td-agent 在TAG_VALUE
分配环境变量之前首先初始化。
所以,主要问题是......
我如何动态设置 td-agent 的标签值?
但实际上,我想知道的是:
是否可以在 Kubernetes 中的容器初始化之前分配环境变量?