- A+
线上环境的服务器是系统是 CentOS6 的,对外提供的服务所使用的JAVA版本是1.7版本的,而我们部署的ELK版本都是使用RPM安装的 6.2.4,而官网说需要的JAVA版本是1.8.0_131以上。由于涉及到线上对外提供的服务,JAVA版本不能随便改动和升级,以免出现不兼容的问题。如果要升级JAVA版本还需要对服务做兼容性测试,感觉很麻烦,还有一定的风险,所以该怎么办呢?
我去看了 Elasticsearch 和 Logstash 的启动脚本,200行代码不到,在 Elasticsearch 启动脚本(/etc/init.d/elasticsearch)里面定义啦 JAVA_HOME 的路径,Logstash 命令(/usr/share/logstash/bin/logstash)里面没有定义 JAVA_HOME 路径,但是看到里面调用的是一个脚本 logstash.lib.sh ,在这个脚本中有使用 JAVA_HOME 变量。那它肯定使用的是系统里面配置的啊,我只需要在里面定义一下 JAVA_HOME 路径就可以啦。所以我在自己服务器上面装啦一套Java-1.8版本的,给ELK环境使用,只需要将他们启动和调用的脚本里面改一改 JAVA_HOME 的路径,那么他们就能正常使用,改过之后启动、使用都是没问题的。所以记录一下。
1. Elasticsearch 启动脚本如下:
- // vim /etc/init.d/elasticsearch
- ......
- ......
- 57
- 58 export ES_JAVA_OPTS
- 59 export JAVA_HOME // 在大概59行,有JAVA_HOME变量,在这里重新定义自己JAVA-1.8版本家目录路径即可。
- 60 export ES_PATH_CONF
- 61 export ES_STARTUP_SLEEP_TIME
- 62
- ......
- ......
2. Logstash 命令文件
- // vim /usr/share/logstash/bin/logstash
- ......
- ......
- 20 if [ -L "$0" ]; then
- 21 # Launched from a symlink
- 22 # --Test for the readlink binary
- 23 RL="$(which readlink)"
- 24 if [ $? -eq 0 ]; then
- 25 # readlink exists
- 26 SOURCEPATH="({RL} $0)"
- 27 else
- 28 # readlink not found, attempt to parse the output of stat
- 29 SOURCEPATH="(stat -c %N 0 | awk '{print $3}' | sed -e 's/\‘//' -e 's/\’//')"
- 30 if [ $? -ne 0 ]; then
- 31 # Failed to execute or parse stat
- 32 echo "Failed to find source library at path (cd `dirname 0`/..; pwd)/bin/logstash.lib.sh" // 调用此脚本,可一看看这个脚本
- 33 echo "You may need to launch Logstash with a full path instead of a symlink."
- ......
- ......
在该脚本的第二行,也就是 ‘unset CDPATH’ 配置下面定义 JAVA_HOME 即可
- // vim /usr/share/logstash/bin/logstash.lib.sh
- unset CDPATH
- export JAVA_HOME=/usr/local/java // 在这里添加上JAVA-1.8版本的路径。
- export PATH=JAVA_HOME/bin:JAVA_HOME/jre/bin:$PATH
- ......
- ......