如何配置LogStash以使用私有GemStash仓库安装插件?
我之前也踩过Logstash搭配GemStash私有仓库安装插件的坑,折腾了好几种方法才搞定,给你分享几个可行的解决方案:
方法1:通过全局Gem配置持久化设置(推荐)
Logstash会遵循Ruby的gem配置规则,我们可以直接给它指定默认的gem源,这样就不用管logstash-plugin命令重写Gemfile的问题了:
- 修改Logstash的JVM配置:找到Logstash安装目录下的
config/jvm.options文件,添加一行:
这样Logstash启动时会自动加载这两个源,所有gem操作都会优先从这里拉取。-Dgem.sources=http://my-domain,http://my-domain/private - 或者配置全局
.gemrc:在运行Logstash的用户目录下创建(或修改).gemrc文件,写入以下内容:
这个配置对所有Ruby工具(包括Logstash调用的gem/bundler)生效,而且不会被sources: - http://my-domain - http://my-domain/privatelogstash-plugin命令覆盖。
方法2:自定义Gemfile并锁定生成逻辑
如果你坚持要使用你理想中的Gemfile结构,可以通过以下步骤避免它被重写:
- 手动在Logstash根目录创建你想要的Gemfile:
source "http://my-domain" # Default LogStash plugins # ... source "http://my-domain/private" do gem "my-logstash-plugin" end - 生成对应的
Gemfile.lock文件,进入Logstash目录运行:bundle install --no-deployment - 禁用Logstash的Gemfile自动更新:找到
bin/logstash-plugin脚本,定位到调用LogStash::PluginManager::GemfileUpdater的代码块,把这部分逻辑注释掉。不过要注意,Logstash版本升级后这个脚本可能会被覆盖,需要重新操作。
方法3:绕过logstash-plugin,直接用Bundler管理插件
完全跳过Logstash自带的插件管理命令,用Bundler直接控制依赖:
- 在Logstash根目录创建自定义Gemfile(和方法2里的结构一致)。
- 运行bundle安装依赖:
cd /path/to/logstash bundle install --path vendor/bundle - 启动Logstash时加上
--bundle参数,让它使用自定义的bundle环境:bin/logstash --bundle -f your-config.conf
额外注意事项
- 确保你的私有插件的gemspec没有依赖无法从GemStash获取的公共gem,或者确认GemStash的镜像功能能正确代理公共RubyGems源。
- 检查网络权限:Logstash进程要有访问
http://my-domain和http://my-domain/private的权限,没有防火墙拦截或者身份认证问题。
内容的提问来源于stack exchange,提问作者egeloen
相关产品推荐
相关产品推荐

