Fluentd 配置文件里能使用环境变量吗?

可以——Fluentd 配置中用 "#{ENV['VAR_NAME']}" 内嵌 Ruby 表达式引用环境变量。本文给出语法示例、常见用途(密钥、地址、环境区分)与容器部署中的配合方式。

最佳实践
Fluentd 配置文件里能使用环境变量吗?封面

可以。Fluentd 配置文件支持 "#{ENV['变量名']}" 语法内嵌环境变量——配置在加载时会执行这段 Ruby 表达式,把变量值替换进去。

基本语法

<match app.**>
  @type elasticsearch
  host "#{ENV['ES_HOST']}"
  port "#{ENV['ES_PORT']}"
  user "#{ENV['ES_USER']}"
  password "#{ENV['ES_PASSWORD']}"
</match>

启动前确保变量已 export:

export ES_HOST=elasticsearch.internal ES_PORT=9200
fluentd -c fluent.conf

典型用途

  • 密钥外置:密码、Token 不进配置文件,可安全提交 Git;
  • 环境区分:同一套配置在 dev/staging/prod 用不同变量值;
  • 容器化部署:Docker/K8s 中通过 env 注入,镜像一处构建多处运行。

注意事项

  • 变量未设置时替换结果是空字符串,不会报错——启动后用 fluentd --dry-run 或检查输出连接确认;
  • K8s 中配合 Secret 注入:valueFrom: {secretKeyRef: {...}}
  • 想要默认值可以用 Ruby 写法:"#{ENV['ES_PORT'] || '9200'}"

观测云对照

观测云 DataKit 支持在配置中引用环境变量(ENV 函数),K8s 部署时 Token、工作空间地址等敏感项全部通过环境变量注入,配置模板可安全入库。

常见问题(FAQ)

Q:Systemd 部署怎么传变量? 在 unit 文件用 Environment=EnvironmentFile= 声明。

Q:支持默认值吗? 用 Ruby 的 || 表达式即可实现。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台