Fluentd 配置中环境变量的实战用法

Fluentd 通过 "#{ENV['VAR']}" 语法在配置中引用环境变量,典型用于密钥外置、多环境复用与容器化部署。本文给出完整示例、默认值写法与 Systemd/Docker/K8s 三种注入方式。

最佳实践
Fluentd 配置中环境变量的实战用法封面

核心语法一行:"#{ENV['ES_HOST']}"——Fluentd 加载配置时执行 Ruby 表达式完成替换。掌握它就掌握了配置与密钥分离的关键手段。

完整示例

<source>
  @type forward
  port "#{ENV['FLUENT_PORT'] || '24224'}"
</source>

<match **>
  @type elasticsearch
  host "#{ENV.fetch('ES_HOST', 'localhost')}"
  user "#{ENV['ES_USER']}"
  password "#{ENV['ES_PASSWORD']}"
</match>

注意 ENV.fetch('ES_HOST', 'localhost') 的默认值写法比 || 更严谨(区分未设置与空字符串)。

三种环境的注入方式

Systemd:

[Service]
Environment="ES_HOST=es.internal"
EnvironmentFile=/etc/fluentd/secrets.env

Docker:

docker run -e ES_HOST=es.internal -e ES_PASSWORD=$(cat /run/secrets/es_pw) fluentd

Kubernetes:

env:
  - name: ES_PASSWORD
    valueFrom:
      secretKeyRef: {name: es-secret, key: password}

排错技巧

变量替换失败最常见的是未 export 或进程环境隔离——用 fluentd --dry-run -c fluent.conf 预检,或在配置里临时加一行把变量值输出到日志验证。

观测云对照

观测云 DataKit 在配置中以 $ENV{VAR} 形式引用环境变量,同样的密钥外置思路;K8s 场景官方 datakit.yaml 已预置好 DataWay 地址与 Token 的注入位。

常见问题(FAQ)

Q:数组/列表配置能用变量吗? 可以,Ruby 表达式返回什么就用什么:"#{ENV['HOSTS'].split(',')}"

Q:改环境变量后需要重启吗? 需要——变量在配置加载时替换,热重载(reload)也会重新读取当前环境。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台