Logstash 7.7 x+匯出官網 java 外掛為離線包,重安裝失敗bug:ERROR: Something went wrong when installing file:///xxx, message: Illformed requirement ["=java_xxx"]
阿新 • • 發佈:2020-12-21
標題中bug:在最後按照離線包處說明,給出解決方式
公司需要使用最新版logstash來開發,我們自己開放性框架
- github下載對應原始碼:Logstash 7.10.1 github 地址
- 解壓windows 直接解壓/linux unzip xxxx.zip
- 生成java外掛所需api 核心 jar 包檔案:進入專案根目錄執行-windows:gradlew.bat assemble linux:./gradlew assemble
- java 示列外掛git地址:logstash-input-java_input_example
- plugin demo 根目錄,增加java.properties 配置檔案gradle.properties,新增值:LOGSTASH_CORE_PATH=/data/logstashcpl/logstash-7.10.1/logstash-core 該核心路徑指向上一步中核心jar包路徑
- 打包外掛:./gradlew gem
- 解壓即可使用,進入logstash根目錄
- 安裝上面打包的外掛:bin/logstash-plugin install --no-verify --local 你打包出來的外掛
bin/logstash-plugin install --no-verify --local /data/plugins/logstash-input-java_input_example-master/logstash-input-java_input_example-1.0.1.gem
- 執行該外掛:
bin/logstash -e "input {java_input_example {}} output {stdout { codec => rubydebug }}"
- 檢視該外掛在logstash中的名稱
[root@VM_centos logstash-7.10.1]# bin/logstash-plugin list Using JAVA_HOME defined java: /data/shiqi/java/jdk1.8.0_271/ WARNING, using JAVA_HOME while Logstash distribution comes with a bundled JDK .... logstash-input-imap logstash-input-java_input_example logstash-input-jm ..... #logstash-input-java_input_example 即為外掛名
- 匯出該外掛用於離線環境安裝(我司內網,沒辦法在內網編譯安裝)bin/logstash-plugin prepare-offline-pack --overwrite --output [包名] 外掛名,上一步獲取的外掛名即可
#打離線包 [root@VM_centos logstash-7.10.1]# bin/logstash-plugin prepare-offline-pack --overwrite --output /data/java_input.zip logstash-input-java_input_example Using JAVA_HOME defined java: /data/shiqi/java/jdk1.8.0_271/ WARNING, using JAVA_HOME while Logstash distribution comes with a bundled JDK Offline package created at: /data/java_input.zip You can install it with this command `bin/logstash-plugin install file:///data/java_input.zip`
- 安裝該離線包:bin/logstash-plugin install file:///data/java_input.zip
我在執行上述步驟是遇到問題如下:
- demo 外掛問題:該錯誤來源:
No signature of method: org.gradle.api.internal.tasks.DefaultTaskDependency $TaskDependencySet.getAt() is applicable for argument types: (ArrayList) values:
dependsOn [downloadAndInstallJRuby, removeObsoleteJars, vendor, generateRubySupportFiles] 修改如下
dependsOn([downloadAndInstallJRuby, removeObsoleteJars, vendor, generateRubySupportFiles])
- demo外掛問題:
/data/plugins/logstash-input-java_input_example-master/src/main/java/org/logstashplugins/JavaInputExample.java:3: error: package co.elastic.logstash.api does not exist import co.elastic.logstash.api.Configuration;
該錯誤原因為build.gradle 去匹配核心jar包時未匹配到,因為demo中
implementation fileTree(dir: LOGSTASH_CORE_PATH, include: "**/logstash-core-?.?.?.jar") #logstash-core-?.?.?.jar 中 ? 匹配一個字元,一旦 x.y.z.jar包中版本超過9,達到兩個字元就會匹配不到 #修改為: implementation fileTree(dir: LOGSTASH_CORE_PATH, include: "**/logstash-core-?.??.?.jar") #或指定你生成的jar包版本
- 安裝離線包:
ERROR: Something went wrong when installing file:///data//plugins/java-input.zip, message: Illformed requirement ["=java_input_example"]
該錯誤是由於預設命名外掛時以 java開頭導致:build.gradle 檔案中
pluginInfo.pluginType = "input" pluginInfo.pluginClass = "JavaInputExample" pluginInfo.pluginName = "java_input_example" //此處命名java開頭導致
分析安裝離線包導致的該問題:
根目錄搜尋該報錯資訊:
[root@VM_centos logstash-7.10.1]# grep Illformed -nr ./* ./vendor/jruby/lib/ruby/stdlib/rubygems/requirement.rb:110: raise BadRequirementError, "Illformed requirement [#{obj.inspect}]" [root@VM_63_147_centos logstash-7.10.1]# vim ./vendor/jruby/lib/ruby/stdlib/rubygems/requirement.rb +110