You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Logstash时,如何用secrets.properties传递配置变量?

可行方案汇总

针对你在Docker中部署Logstash时,需要从secrets.properties提取变量作为Logstash环境变量(如JDBC密码)的需求,以下是几个实用方案:

方案1:启动脚本预处理,将Properties转为环境变量

在Logstash容器启动前,通过自定义脚本读取secrets.properties的键值对,导出为环境变量后再启动Logstash。

  1. 编写预处理脚本(例如load-secrets.sh):
#!/bin/sh
# 读取secrets.properties并导出为环境变量
while IFS='=' read -r key value; do
  # 跳过注释行和空行
  if [[ ! $key =~ ^# && -n $key ]]; then
    export "$key=$value"
  fi
done < /path/to/secrets.properties

# 执行Logstash启动命令
exec logstash "$@"
  1. 在K8s Chart中配置容器的command或entrypoint,替换默认启动逻辑:
containers:
- name: logstash
  image: docker.elastic.co/logstash/logstash:8.11.0
  command: ["/bin/sh", "-c", "/path/to/load-secrets.sh"]
  volumeMounts:
  - name: secrets-properties
    mountPath: /path/to/secrets.properties
    subPath: secrets.properties

之后在Logstash配置中即可直接用${DB_PASSWORD}这类环境变量引用。

方案2:Logstash配置中直接读取Properties文件

利用Logstash的Ruby插件或内置变量语法,直接在配置里读取secrets.properties的内容。

方式A:使用${file:...}内置语法(需Logstash 7.10+)

如果你的Logstash版本支持,可直接在配置中引用文件内容:

input {
  jdbc {
    jdbc_connection_string => "jdbc:mysql://db-host:3306/mydb"
    jdbc_user => "db_user"
    jdbc_password => "${file:/path/to/secrets.properties:db_password}"
    jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.30.jar"
    # 其他JDBC配置...
  }
}

方式B:Ruby脚本预加载Properties

若版本不支持上述语法,可通过Ruby过滤器提前加载文件内容:

# 在input前添加ruby初始化代码,加载全局变量
input {
  ruby {
    init => '
      require "java"
      props = java.util.Properties.new
      file_stream = java.io.FileInputStream.new("/path/to/secrets.properties")
      props.load(file_stream)
      file_stream.close
      # 存储为全局变量,供后续配置使用
      $db_pwd = props.getProperty("db_password")
    '
    code => 'event.set("jdbc_pwd", $db_pwd)'
  }
  jdbc {
    jdbc_connection_string => "jdbc:mysql://db-host:3306/mydb"
    jdbc_user => "db_user"
    jdbc_password => "${jdbc_pwd}"
    # 其他JDBC配置...
  }
}

方案3:通过JVM系统属性传递

将Properties中的键值对转为JVM启动参数,Logstash配置中通过${sys:...}引用系统属性。

  1. 编写启动脚本(例如jvm-secrets.sh):
#!/bin/sh
JVM_SECRETS=""
while IFS='=' read -r key value; do
  if [[ ! $key =~ ^# && -n $key ]]; then
    JVM_SECRETS="$JVM_SECRETS -D$key=$value"
  fi
done < /path/to/secrets.properties

# 追加JVM参数并启动Logstash
exec logstash "$@" --jvm.options "$JVM_SECRETS"
  1. 在Logstash配置中引用系统属性:
input {
  jdbc {
    jdbc_connection_string => "jdbc:mysql://db-host:3306/mydb"
    jdbc_user => "db_user"
    jdbc_password => "${sys:db_password}"
    # 其他JDBC配置...
  }
}

内容的提问来源于stack exchange,提问作者C.Mahfoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:22:40