Logstash version 5 Service commands are not working


(Gayathri TR) #1

Hi Team,

I have upgraded the Logstash Version from 2.x to 5.x. But our service script is not working.

The start command which we are using in the script is:

/opt/logstash/bin/logstash agent -f /opt/logstash/conf.d/logstash.conf

Thanks,

Gayathri


(Magnus Bäck) #2

"Not working" isn't a very clear problem description, but I'm guessing you should just remove "agent" from the command.


(Gayathri TR) #3

Hi Magnus,

I have removed "agent", but still logstash start command is not working.....PFB, the script,

#!/bin/sh

Init script for logstash

Maintained by Elasticsearch

Generated by pleaserun.

Implemented based on LSB Core 3.1:

* Sections: 20.2, 20.3

BEGIN INIT INFO

Provides: logstash

Required-Start: $remote_fs $syslog

Required-Stop: $remote_fs $syslog

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-Description:

Description: Starts Logstash as a daemon.

END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

if [ id -u -ne 0 ]; then
echo "You need root privileges to run this script"
exit 1
fi

name=logstash
pidfile="/opt/logstash/$name.pid"
LS_USER=logstash
LS_GROUP=logstash
JAVA_HOME=/usr/java/default
PATH=$PATH:$JAVA_HOME/bin
LS_HOME=/opt/logstash
LS_HEAP_SIZE="1536m"
LS_LOG_DIR=/opt/logstash/log
LS_LOG_FILE="${LS_LOG_DIR}/$name.log"
LS_CONF_DIR=/opt/logstash/conf.d
LS_OPEN_FILES=16384
LS_NICE=19
KILL_ON_STOP_TIMEOUT=0
LS_OPTS=""

[ -r /etc/default/$name ] && . /etc/default/$name
[ -r /etc/sysconfig/$name ] && . /etc/sysconfig/$name

program=/opt/logstash/bin/logstash
** args=" -f '${LS_CONF_DIR} -l ${LS_LOG_FILE} ${LS_OPTS}'"**

quiet() {
"$@" > /dev/null 2>&1
return $?
}

start() {

LS_JAVA_OPTS="${LS_JAVA_OPTS} -Djava.io.tmpdir=${LS_HOME}"
HOME=${LS_HOME}
export PATH HOME LS_HEAP_SIZE LS_JAVA_OPTS LS_USE_GC_LOGGING LS_GC_LOG_FILE

set ulimit as (root, presumably) first, before we drop privileges

ulimit -n ${LS_OPEN_FILES}

Run the program!

nice -n ${LS_NICE} chroot --userspec $LS_USER:$LS_GROUP $EXTRA_GROUPS / sh -c "
cd $LS_HOME
ulimit -n ${LS_OPEN_FILES}
exec "$program" $args " > "${LS_LOG_DIR}/$name.stdout" 2> "${LS_LOG_DIR}/$name.err" &

Generate the pidfile from here. If we instead made the forked process

generate it there will be a race condition between the pidfile writing

and a process possibly asking for status.

echo $! > $pidfile
return 0
}

stop() {

Try a few times to kill TERM the program

if status ; then
pid=cat "$pidfile"
echo "Killing $name (pid $pid) with SIGTERM"
kill -TERM $pid
# Wait for it to exit.
for i in 1 2 3 4 5 6 7 8 9 ; do
echo "Waiting $name (pid $pid) to die..."
status || break
sleep 1
done
if status ; then
if [ "$KILL_ON_STOP_TIMEOUT" == 1 ] ; then
echo "Timeout reached. Killing $name (pid $pid) with SIGKILL. This may result in data loss."
kill -KILL $pid
echo "$name killed with SIGKILL."
else
echo "$name stop failed; still running."
return 1 # stop timed out and not forced
fi
else
echo "$name stopped."
fi
fi
}

status() {
if [ -f "$pidfile" ] ; then
pid=cat "$pidfile"
if kill -0 $pid > /dev/null 2> /dev/null ; then
# process by this pid is running.
# It may not be our pid, but that's what you get with just pidfiles.
# TODO(sissel): Check if this process seems to be the same as the one we
# expect. It'd be nice to use flock here, but flock uses fork, not exec,
# so it makes it quite awkward to use in this case.
return 0
else
return 2 # program is dead but pid file exists
fi
else
return 3 # program is not running
fi
}

reload() {
if status ; then
kill -HUP cat "$pidfile"
fi
}

force_stop() {
if status ; then
stop
status && kill -KILL cat "$pidfile"
fi
}

configtest() {

Check if a config file exists

if [ ! "$(ls -A ${LS_CONF_DIR}/* 2> /dev/null)" ]; then
echo "There aren't any configuration files in ${LS_CONF_DIR}"
return 1
fi

HOME=${LS_HOME}
export PATH HOME

test_args="--configtest -f ${LS_CONF_DIR} ${LS_OPTS}"
$program ${test_args}
[ $? -eq 0 ] && return 0

Program not configured

return 6
}

case "$1" in
start)
status
code=$?
if [ $code -eq 0 ]; then
echo "$name is already running"
else
start
echo "$name started."
code=$?
fi
exit $code
;;
stop) stop ;;
force-stop) force_stop ;;
status)
status
code=$?
if [ $code -eq 0 ] ; then
echo "$name is running"
else
echo "$name is not running"
fi
exit $code
;;
reload) reload ;;
restart)

quiet configtest
RET=$?
if [ ${RET} -ne 0 ]; then
  echo "Configuration error. Not restarting. Re-run with configtest parameter for details"
  exit ${RET}
fi
stop && start
;;

configtest)
configtest
exit $?
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|force-stop|status|reload|restart|configtest}" >&2
exit 3
;;
esac

exit $?


(Magnus Bäck) #4

If you explain what "not working" means someone might be able to help. What happens? Are there any error messages? Which Linux distribution?


(Gayathri TR) #5

Logstash process id is creating...there are no errors coming....but logs are not pushing via

"service logstash start" but, "service logstash stop" is working....means "start" command is not correct. This script was working for previous version

Please help me to start new logstash


(Magnus Bäck) #6

So Logstash is starting up but it's not doing anything, correct? What's in the logs? What does your configuration look like?


(system) #7

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.