Java笔记 ·

ELK实时日志管理-指定JDK

7.附录1-指定JDK

服务器上默认为非1.8的JDK时,使用5.x的ELK需要指定单独的1.8的JDK才可。后期若能写成脚本,能在脚本中指定的话就不必现在这样麻烦地做入侵式修改了。

7.1 Elasticsearch

需要修改elasticsearch启动脚本。
打开 elasticsearchHOME/bin/elasticsearch 编辑:

[root]# vim bin/elasticsearch
export JAVA_HOME=/home/parim/spark/apps/jdk1.8.0_144/    (此处配置的为刚下的1.8的配置目录)
export PATH=$JAVA_HOME/bin:$PATH

if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/home/parim/spark/apps/jdk1.8.0_144//bin/java"
else
        JAVA=`which java`
fi

完整配置文件(部分)

#!/bin/bash

……

# 配置自己的jdk1.8
export JAVA_HOME=/home/parim/spark/apps/jdk1.8.0_144/
export PATH=$JAVA_HOME/bin:$PATH

source "`dirname "$0"`"/elasticsearch-env

ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options
JVM_OPTIONS=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.JvmOptionsParser "$ES_JVM_OPTIONS"`
ES_JAVA_OPTS="${JVM_OPTIONS//\$\{ES_TMPDIR\}/$ES_TMPDIR} $ES_JAVA_OPTS"

# 自己添加的jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/home/parim/spark/apps/jdk1.8.0_144//bin/java"
else
        JAVA=`which java`
fi

cd "$ES_HOME"
# manual parsing to find out, if process should be detached
if ! echo $* | grep -E '(^-d |-d$| -d |--daemonize$|--daemonize )' > /dev/null; then
  exec \
    "$JAVA" \
    $ES_JAVA_OPTS \
    -Des.path.home="$ES_HOME" \
    -Des.path.conf="$ES_PATH_CONF" \
    -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \
    -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \
    -cp "$ES_CLASSPATH" \
    org.elasticsearch.bootstrap.Elasticsearch \
    "$@"
else

……

7.2 Logstash

查看logstash启动脚本,没有关于java_home之类的相关配置,但logstash启动过程会引入lib文件bin/logstash.lib.sh ,经查看logstash.lib.sh中定义了一个setup_java的函数,setup_java被setup函数调用,最终被bin/logstash启动脚本调用。

因此,我们只需要在logstash或logstash.lib.sh的行首位置添加两个环境变量即可:

export JAVA_CMD=/home/parim/spark/apps/jdk1.8.0_144
export JAVA_HOME=/home/parim/spark/apps/jdk1.8.0_144

7.3 JDK版本与软件版本

ES JDK
0.90 1.6
1.3-2.4 1.7
5.0+ 1.8

5.0级以上版本需要至少JDK1.8.

2.4的版本是可在1.7中的最高版本。

这是elasticsearch版本与JDK的对比,其余几个也是类似,5.x及以上的版本均需要至少为JDK1.8。

参与评论