From 13e1ad3c2d61bc53a88dad66b1896f75d054b947 Mon Sep 17 00:00:00 2001 From: psquickitjayant Date: Thu, 24 Apr 2014 18:58:25 +0530 Subject: [PATCH 1/2] Status to configsyslog.loggly.com Added function to send script logs to configsyslog.loggly.com --- ltomcatsetup.sh | 214 +++++++++++++++++++++++++++++------------------- 1 file changed, 131 insertions(+), 83 deletions(-) diff --git a/ltomcatsetup.sh b/ltomcatsetup.sh index 836e898..9737610 100755 --- a/ltomcatsetup.sh +++ b/ltomcatsetup.sh @@ -1,6 +1,9 @@ #!/bin/bash -# executing the script for loggly to get the install and configure syslog. +SCRIPT_NAME="ltomcatsetup.sh" +SCRIPT_VERSION="1.0" +CONFIG_SYSLOG_TOKEN="b886e45a-b2f9-4019-8ffb-accc0a68e114" +# executing the script for loggly to get the install and configure syslog. setVariables(){ #These are common variables and will be used across various functions SERVICE=tomcat6 @@ -15,10 +18,30 @@ LOGGLY_CATALINA_PROPFILE=$LOGGLY_CATALINA_CONF_HOME/logging.properties LOGGLY_CATALINA_BACKUP_PROPFILE=$LOGGLY_CATALINA_PROPFILE.loggly.bk LOGGLY_CATALINA_LOG_HOME=/var/log/$SERVICE + +#Following variables are used for configsys logging +#identify tomcat version +CATALINA_JAR_PATH=$LOGGLY_CATALINA_HOME/lib/catalina.jar +if [ ! -f "$CATALINA_JAR_PATH" ]; then + if [ $(sudo find / -name catalina.jar | grep tomcat6 | wc -l) = 1 ]; then + CATALINA_JAR_PATH=$(sudo find / -name catalina.jar | grep tomcat6) + fi +fi + +if [ -f "$CATALINA_JAR_PATH" ]; then + TOMCAT_VERSION=$(java -cp $CATALINA_JAR_PATH org.apache.catalina.util.ServerInfo | grep "Server number") + TOMCAT_VERSION=${TOMCAT_VERSION#*: } + TOMCAT_VERSION=$TOMCAT_VERSION | tr -d ' ' +fi + +HOST_NAME=$(hostname) +LINUX_DIST=$(lsb_release -ds) +CONFIG_SYSLOG_TOKEN="1ec4e8e1-fbb2-47e7-929b-75a1bff5ffe0" } configureLoggly() { setVariables +logMsgToConfigSysLog "INFO" "Initiating configure Loggly" INITIAL_MSGSEARCH_COUNT=0 FINAL_MSGSEARCH_COUNT=0 @@ -32,44 +55,52 @@ if [ -f "$LOGGLY_SYSLOG_CONFFILE" ]; then else if [ "$LOGGLY_ACCOUNT" != "" ]; then wget -q -O - https://www.loggly.com/install/configure-syslog.py | sudo python - setup --auth $LOGGLY_AUTH_TOKEN --account $LOGGLY_ACCOUNT - else - echo "ERROR: Loggly auth token is required to configure rsyslog. Please pass -a while running script" + else + logMsgToConfigSysLog "ERROR" "ERROR: Loggly auth token is required to configure rsyslog. Please pass -a while running script" + exit 1 fi fi # backup the logging properties file just in case it need to reverted. echo "Backing up the properties file: $LOGGLY_CATALINA_PROPFILE to $LOGGLY_CATALINA_BACKUP_PROPFILE" -cp -f $LOGGLY_CATALINA_PROPFILE $LOGGLY_CATALINA_BACKUP_PROPFILE +if [ ! -f $LOGGLY_CATALINA_PROPFILE ]; then + logMsgToConfigSysLog "ERROR" "ERROR: logging.properties file not found!. Looked at location $LOGGLY_CATALINA_PROPFILE" + exit 1 +else + cp -f $LOGGLY_CATALINA_PROPFILE $LOGGLY_CATALINA_BACKUP_PROPFILE +fi + # This might not be needed. #wget -q -O - https://www.loggly.com/install/configure-syslog.py | sudo python - setup #On RHEL 6.4, 'yum install tomcat' installs tomcat v6.0.24. This version does not support disabling of log rotation if [ "$(lsb_release -ds | grep 'Red Hat Enterprise Linux Server release 6.4')" = "" ]; then -#removing the end . from logging.properties variable 1catalina.org.apache.juli.FileHandler.prefix = catalina. -if grep -Fq "prefix = catalina." $LOGGLY_CATALINA_PROPFILE -then - sudo sed -i "s/prefix = catalina./prefix = catalina/g" $LOGGLY_CATALINA_PROPFILE -fi -if grep -Fq "prefix = localhost." $LOGGLY_CATALINA_PROPFILE -then - sudo sed -i "s/prefix = localhost./prefix = localhost/g" $LOGGLY_CATALINA_PROPFILE -fi -if grep -Fq "prefix = manager." $LOGGLY_CATALINA_PROPFILE -then - sudo sed -i "s/prefix = manager./prefix = manager/g" $LOGGLY_CATALINA_PROPFILE -fi -if grep -Fq "prefix = host-manager." $LOGGLY_CATALINA_PROPFILE -then - sudo sed -i "s/prefix = host-manager./prefix = host-manager/g" $LOGGLY_CATALINA_PROPFILE -fi + #removing the end . from logging.properties variable 1catalina.org.apache.juli.FileHandler.prefix = catalina. + if grep -Fq "prefix = catalina." $LOGGLY_CATALINA_PROPFILE + then + sudo sed -i "s/prefix = catalina./prefix = catalina/g" $LOGGLY_CATALINA_PROPFILE + fi + if grep -Fq "prefix = localhost." $LOGGLY_CATALINA_PROPFILE + then + sudo sed -i "s/prefix = localhost./prefix = localhost/g" $LOGGLY_CATALINA_PROPFILE + fi + if grep -Fq "prefix = manager." $LOGGLY_CATALINA_PROPFILE + then + sudo sed -i "s/prefix = manager./prefix = manager/g" $LOGGLY_CATALINA_PROPFILE + fi + if grep -Fq "prefix = host-manager." $LOGGLY_CATALINA_PROPFILE + then + sudo sed -i "s/prefix = host-manager./prefix = host-manager/g" $LOGGLY_CATALINA_PROPFILE + fi -#Check if the rotatable property is present in logging.properties -if grep -Fq "rotatable" $LOGGLY_CATALINA_PROPFILE -then -#If present, set all the values to false -sed -i -e 's/rotatable = true/rotatable = false/g' $LOGGLY_CATALINA_PROPFILE -fi + #Check if the rotatable property is present in logging.properties + if grep -Fq "rotatable" $LOGGLY_CATALINA_PROPFILE + then + #If present, set all the values to false + sed -i -e 's/rotatable = true/rotatable = false/g' $LOGGLY_CATALINA_PROPFILE + fi + if [ $(fgrep "rotatable = false" "$LOGGLY_CATALINA_PROPFILE" | wc -l) < 4 ]; then #If rotatable property present or not, add the following lines to disable rotation in any case sudo cat << EOIPFW >> $LOGGLY_CATALINA_PROPFILE 1catalina.org.apache.juli.FileHandler.rotatable = false @@ -77,6 +108,7 @@ sudo cat << EOIPFW >> $LOGGLY_CATALINA_PROPFILE 3manager.org.apache.juli.FileHandler.rotatable = false 4host-manager.org.apache.juli.FileHandler.rotatable = false EOIPFW + fi fi #if [ $(fgrep rotatable "$LOGGLY_CATALINA_PROPFILE" | wc -l) < 4 ]; then @@ -129,38 +161,37 @@ counter=1 maxCounter=10 echo "latest tomcat log count: $tomcatLatestLogCount and before query count: $tomcatinitialLogCount" while [ "$tomcatLatestLogCount" -le "$tomcatinitialLogCount" ]; do - echo "######### waiting for 30 secs......" - sleep 30 - echo "######## Done waiting. verifying again..." - echo "Try # $counter of total 10" - searchAndFetch tomcatLatestLogCount "$queryParam" - echo "Again Fetch: initial count $tomcatinitialLogCount : latest count : $tomcatLatestLogCount counter: $counter max counter: $maxCounter" - let counter=$counter+1 - if [ "$counter" -gt "$maxCounter" ]; then - echo "####### Tomcat logs did not make to Loggly in stipulated time. Please retry ###########" - break; - fi + echo "######### waiting for 30 secs......" + sleep 30 + echo "######## Done waiting. verifying again..." + echo "Try # $counter of total 10" + searchAndFetch tomcatLatestLogCount "$queryParam" + echo "Again Fetch: initial count $tomcatinitialLogCount : latest count : $tomcatLatestLogCount counter: $counter max counter: $maxCounter" + let counter=$counter+1 + if [ "$counter" -gt "$maxCounter" ]; then + logMsgToConfigSysLog "ERROR" "ERROR: Tomcat logs did not make to Loggly in stipulated time. Please retry" + exit 1 + fi done if [ "$tomcatLatestLogCount" -gt "$tomcatinitialLogCount" ]; then -echo "####### Tomcat Log successfully transferred to Loggly ###########" + logMsgToConfigSysLog "SUCCESS" "SUCCESS: Tomcat Log successfully transferred to Loggly" + exit 0 fi - } # End of configure rsyslog for tomcat generateTomcat21File() { imfileStr="\$ModLoad imfile -\$WorkDirectory $SYSLOG_DIR -" +\$WorkDirectory $SYSLOG_DIR" if [ "$(lsb_release -ds | grep Ubuntu)" != "" ]; then -imfileStr+="\$PrivDropToGroup adm +imfileStr+=" +\$PrivDropToGroup adm \$WorkDirectory $SYSLOG_DIR" fi - #change the tomcat-21 file to variable from above and also take the directory of the tomcat log file. sudo cat << EOIPFW >> $TOMCAT_SYSLOGCONF_FILE $imfileStr @@ -232,6 +263,7 @@ EOIPFW rollback() { setVariables + logMsgToConfigSysLog "INFO" "Initiating rollback" echo "Reverting the catalina file ...." if [ -f "$LOGGLY_CATALINA_BACKUP_PROPFILE" ]; then sudo rm -fr $LOGGLY_CATALINA_PROPFILE @@ -244,9 +276,12 @@ rollback() { fi echo "Removed all the needed files" restartTomcat + logMsgToConfigSysLog "INFO" "Rollback completed" } + debug() { setVariables + logMsgToConfigSysLog "INFO" "Initiating debug" #if [ -f loggly_tcpdump.log ]; then # sudo rm -rf loggly_tcpdump.log #fi @@ -286,21 +321,22 @@ debug() { maxCounter=10 echo "initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" while [ "$finalCount" -le "$initialCount" ]; do - echo "initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" - echo "######### waiting for 30 secs......" - sleep 30 - echo "######## Done waiting. verifying again..." - echo "Try # $counter of total 10" - searchAndFetch finalCount "$queryParam" - echo "Again Fetch: initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" - let counter=$counter+1 - if [ "$counter" -gt "$maxCounter" ]; then - echo "####### Tomcat logs did not make to Loggly in stipulated time. Please retry ###########" - break; - fi + echo "initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" + echo "######### waiting for 30 secs......" + sleep 30 + echo "######## Done waiting. verifying again..." + echo "Try # $counter of total 10" + searchAndFetch finalCount "$queryParam" + echo "Again Fetch: initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" + let counter=$counter+1 + if [ "$counter" -gt "$maxCounter" ]; then + logMsgToConfigSysLog "ERROR" "ERROR: Tomcat logs did not make to Loggly in stipulated time. Please retry" + exit 1 + fi done if [ "$finalCount" -gt "$initialCount" ]; then - echo "####### Log successfully transferred to Loggly ###########" + logMsgToConfigSysLog "SUCCESS" "SUCCESS: Tomcat Log successfully transferred to Loggly" + exit 0 fi } @@ -315,8 +351,8 @@ searchAndFetch() { result=$(wget -qO- /dev/stdout --user "$LOGGLY_USERNAME" --password "$LOGGLY_PASSWORD" "$url") #echo "Result of wget invoke $result" if [ -z "$result" ]; then - echo "loggly subdomain, username and password need to be specified" - exit 1 + logMsgToConfigSysLog "ERROR" "ERROR: Please check your network connectivity & ensure Loggly subdomain, username and password is specified" + exit 1 fi id=$(echo "$result" | grep -v "{" | grep id | awk '{print $2}') # strip last double quote from id @@ -336,7 +372,7 @@ searchAndFetch() { #$1=$count; if [ "$count" > 0 ]; then timestamp=$(echo "$result" | grep timestamp) -# echo "timestamp: "$timestamp"" + #echo "timestamp: "$timestamp"" echo "Data made successfully to loggly!!!" fi } @@ -350,28 +386,40 @@ EOF restartsyslog() { -echo "Restarting the rsyslog service..." -sudo service rsyslog restart + echo "Restarting the rsyslog service..." + sudo service rsyslog restart } restartTomcat() { -#sudo service tomcat restart or home/bin/start.sh -if [ $(ps -ef | grep -v grep | grep "$SERVICE" | wc -l) > 0 ]; then - echo "$SERVICE is running..." - if [ -f /etc/init.d/$SERVICE ]; then - echo "$SERVICE is running as service" - sudo service $SERVICE restart - else - echo "$SERVICE is not running as service..." - # To be commented only for test - echo "shutting down tomcat..." - $LOGGLY_CATALINA_HOME/bin/shutdown.sh - echo "Done shutting down tomcat!" - echo "starting up tomcat..." - $LOGGLY_CATALINA_HOME/bin/startup.sh - echo "Tomcat is up and running" - fi -fi + #sudo service tomcat restart or home/bin/start.sh + if [ $(ps -ef | grep -v grep | grep "$SERVICE" | wc -l) > 0 ]; then + echo "$SERVICE is running..." + if [ -f /etc/init.d/$SERVICE ]; then + echo "$SERVICE is running as service" + sudo service $SERVICE restart + else + echo "$SERVICE is not running as service..." + # To be commented only for test + echo "shutting down tomcat..." + $LOGGLY_CATALINA_HOME/bin/shutdown.sh + echo "Done shutting down tomcat!" + echo "starting up tomcat..." + $LOGGLY_CATALINA_HOME/bin/startup.sh + echo "Tomcat is up and running" + fi + fi +} + +logMsgToConfigSysLog() { + #$1 variable will be SUCCESS or ERROR or INFO + #$2 variable will be the message + echo "$2" + CURRENT_TIME=$(date) + + var="{\"sub-domain\":\"$LOGGLY_ACCOUNT\", \"host-name\":\"$HOST_NAME\", \"script-name\":\"$SCRIPT_NAME\", \"script-version\":\"$SCRIPT_VERSION\", \"status\":\"$1\", \"time-stamp\":\"$CURRENT_TIME\", \"linux-distribution\":\"$LINUX_DIST\", \"tomcat-version\":\"$TOMCAT_VERSION\", \"messages\":\"$2\"}" + + curl -H "content-type:application/json" -d "$var" https://logs-01.loggly.com/inputs/$CONFIG_SYSLOG_TOKEN + echo } LOGGLY_ACCOUNT="" @@ -407,11 +455,11 @@ while [ "$1" != "" ]; do ;; -d | --debug ) LOGGLY_DEBUG="true" - echo "Running debug..." + echo "Running debug..." ;; -r | --rollback ) LOGGLY_ROLLBACK="true" - echo "Reverting configuration for sending tomcat logs to Loggly" + echo "Reverting configuration for sending tomcat logs to Loggly" ;; -h | --help) usage @@ -425,9 +473,9 @@ while [ "$1" != "" ]; do done fi -if [ "$LOGGLY_DEBUG" != "" -a "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" ]; then +if [ "$LOGGLY_DEBUG" != "" -a "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" -a "$LOGGLY_PASSWORD" != "" ]; then debug -elif [ "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" ]; then +elif [ "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" -a "$LOGGLY_PASSWORD" != "" ]; then configureLoggly elif [ "$LOGGLY_ROLLBACK" != "" -a "$LOGGLY_CATALINA_HOME" != "" ]; then rollback From 2ed0a54877dc2da2758d67d55083ae28f5b3f0a5 Mon Sep 17 00:00:00 2001 From: psquickitjayant Date: Wed, 30 Apr 2014 21:02:47 +0530 Subject: [PATCH 2/2] Update ltomcatsetup.sh --- ltomcatsetup.sh | 384 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 266 insertions(+), 118 deletions(-) diff --git a/ltomcatsetup.sh b/ltomcatsetup.sh index 9737610..21074e9 100755 --- a/ltomcatsetup.sh +++ b/ltomcatsetup.sh @@ -1,10 +1,20 @@ -#!/bin/bash +#!/bin/bash + +#This script needs to be run as a sudo user +if [[ $EUID -ne 0 ]]; then + echo "ERROR: This script must be run as root" + exit 1 +fi + SCRIPT_NAME="ltomcatsetup.sh" SCRIPT_VERSION="1.0" CONFIG_SYSLOG_TOKEN="b886e45a-b2f9-4019-8ffb-accc0a68e114" +MIN_TOMCAT_VERSION="6.0.33.0" +MIN_SYSLOG_VERSION="5.8.0" # executing the script for loggly to get the install and configure syslog. -setVariables(){ +setVariables() +{ #These are common variables and will be used across various functions SERVICE=tomcat6 SYSLOG_ETCDIR_CONF=/etc/rsyslog.d @@ -13,69 +23,170 @@ TOMCAT_SYSLOGCONF_FILE=$SYSLOG_ETCDIR_CONF/21-tomcat.conf SYSLOG_DIR=/var/spool/rsyslog +LINUX_DIST=$(lsb_release -ds) +if [ $? -ne 0 ]; then + logMsgToConfigSysLog "ERROR" "ERROR: This operating system is not supported by the script" + exit 1 +else + #remove double quotes (if any) from the linux distribution name + LINUX_DIST="${LINUX_DIST%\"}" + LINUX_DIST="${LINUX_DIST#\"}" + case "$LINUX_DIST" in + *"Ubuntu"* ) + echo "INFO: Operating system is Ubuntu" + ;; + *"Red Hat"* ) + echo "INFO: Operating system is Red Hat" + ;; + *"CentOS"* ) + echo "INFO: Operating system is CentOS" + ;; + * ) + logMsgToConfigSysLog "ERROR" "ERROR: This operating system is not supported by the script" + exit 1 + ;; + esac +fi + +#get CATALINA_HOME +getCatalinaHome $SERVICE + LOGGLY_CATALINA_CONF_HOME=$LOGGLY_CATALINA_HOME/conf LOGGLY_CATALINA_PROPFILE=$LOGGLY_CATALINA_CONF_HOME/logging.properties LOGGLY_CATALINA_BACKUP_PROPFILE=$LOGGLY_CATALINA_PROPFILE.loggly.bk LOGGLY_CATALINA_LOG_HOME=/var/log/$SERVICE -#Following variables are used for configsys logging #identify tomcat version CATALINA_JAR_PATH=$LOGGLY_CATALINA_HOME/lib/catalina.jar +#check if the identified CATALINA_HOME has the catalina.jar if [ ! -f "$CATALINA_JAR_PATH" ]; then + #if not, search it throughout the system. If we find no entries or more than + #1 entry, then we cannot determine the version of the tomcat if [ $(sudo find / -name catalina.jar | grep tomcat6 | wc -l) = 1 ]; then CATALINA_JAR_PATH=$(sudo find / -name catalina.jar | grep tomcat6) + else + logMsgToConfigSysLog "WARNING" "WARNING: Unable to determine the correct version of tomcat. Assuming its >= to 6.0.33" fi fi if [ -f "$CATALINA_JAR_PATH" ]; then - TOMCAT_VERSION=$(java -cp $CATALINA_JAR_PATH org.apache.catalina.util.ServerInfo | grep "Server number") + TOMCAT_VERSION=$(sudo java -cp $CATALINA_JAR_PATH org.apache.catalina.util.ServerInfo | grep "Server number") TOMCAT_VERSION=${TOMCAT_VERSION#*: } TOMCAT_VERSION=$TOMCAT_VERSION | tr -d ' ' fi HOST_NAME=$(hostname) -LINUX_DIST=$(lsb_release -ds) CONFIG_SYSLOG_TOKEN="1ec4e8e1-fbb2-47e7-929b-75a1bff5ffe0" } -configureLoggly() { + +#try to deduce tomcat home if user has not provided one +getCatalinaHome() +{ + #if user has not provided the catalina home + if [ "$LOGGLY_CATALINA_HOME" = "" ]; then + case "$LINUX_DIST" in + *"Ubuntu"* ) + checkIfValidCatalinaHome "/var/lib/$1" + ;; + *"Red Hat"* ) + checkIfValidCatalinaHome "/usr/share/$1" + ;; + *"CentOS"* ) + checkIfValidCatalinaHome "/usr/share/$1" + ;; + esac + else + checkIfValidCatalinaHome "$LOGGLY_CATALINA_HOME" + fi +} + +checkIfValidCatalinaHome() +{ + LOGGLY_CATALINA_HOME=$1 + #check if logging.properties files is present + if [ ! -f "$LOGGLY_CATALINA_HOME/conf/logging.properties" ]; then + logMsgToConfigSysLog "ERROR" "ERROR: Unable to find conf/logging.properties file within $LOGGLY_CATALINA_HOME. Please provide correct one using -ch option" + exit 1 + #check if tomcat is configured as a service. If no, then check if we have access to catalina.sh file + elif [ ! -f /etc/init.d/$SERVICE ]; then + logMsgToConfigSysLog "INFO" "INFO: Tomcat is not configured as a service" + if [ ! -f "$LOGGLY_CATALINA_HOME/bin/catalina.sh" ]; then + logMsgToConfigSysLog "ERROR" "ERROR: Unable to find bin/catalina.sh files within $LOGGLY_CATALINA_HOME. Please provide correct one using -ch option" + exit 1 + fi + fi +} + +compareVersions () +{ + typeset IFS='.' + typeset -a v1=( $1 ) + typeset -a v2=( $2 ) + typeset n diff + + for (( n=0; n<$3; n+=1 )); do + diff=$((v1[n]-v2[n])) + if [ $diff -ne 0 ] ; then + [ $diff -le 0 ] && echo '-1' || echo '1' + return + fi + done + echo '0' +} + +configureLoggly() +{ setVariables -logMsgToConfigSysLog "INFO" "Initiating configure Loggly" +logMsgToConfigSysLog "INFO" "INFO: Initiating Configure Loggly" INITIAL_MSGSEARCH_COUNT=0 FINAL_MSGSEARCH_COUNT=0 -echo "Tomcat HOME: $LOGGLY_CATALINA_HOME" -echo "Tomcat logging properties file: $LOGGLY_CATALINA_PROPFILE" +echo "INFO: Tomcat HOME: $LOGGLY_CATALINA_HOME" +echo "INFO: Tomcat logging properties file: $LOGGLY_CATALINA_PROPFILE" + +sudo service rsyslog start +SYSLOG_VERSION=$(sudo rsyslogd -version | grep "rsyslogd") +SYSLOG_VERSION=${SYSLOG_VERSION#* } +SYSLOG_VERSION=${SYSLOG_VERSION%,*} +SYSLOG_VERSION=$SYSLOG_VERSION | tr -d " " +if [ $(compareVersions $SYSLOG_VERSION $MIN_SYSLOG_VERSION 3) -lt 0 ]; then + logMsgToConfigSysLog "ERROR" "ERROR: Min syslog version required is 5.8.0" + exit 1 +fi # if the loggly configuration file exist, then don't create it. -echo "checking if loggly sysconf file $LOGGLY_SYSLOG_CONFFILE exist" +echo "INFO: Checking if loggly sysconf file $LOGGLY_SYSLOG_CONFFILE exist" if [ -f "$LOGGLY_SYSLOG_CONFFILE" ]; then - echo "Loggly syslog file $LOGGLY_SYSLOG_CONFILE exist, not creating file" -else + echo "Loggly syslog file $LOGGLY_SYSLOG_CONFILE exist, not creating file" +else if [ "$LOGGLY_ACCOUNT" != "" ]; then - wget -q -O - https://www.loggly.com/install/configure-syslog.py | sudo python - setup --auth $LOGGLY_AUTH_TOKEN --account $LOGGLY_ACCOUNT + wget -q -O - https://www.loggly.com/install/configure-syslog.py | sudo python - setup --auth $LOGGLY_AUTH_TOKEN --account $LOGGLY_ACCOUNT else logMsgToConfigSysLog "ERROR" "ERROR: Loggly auth token is required to configure rsyslog. Please pass -a while running script" exit 1 - fi -fi - + fi +fi + # backup the logging properties file just in case it need to reverted. -echo "Backing up the properties file: $LOGGLY_CATALINA_PROPFILE to $LOGGLY_CATALINA_BACKUP_PROPFILE" +echo "INFO: Going to back up the properties file: $LOGGLY_CATALINA_PROPFILE to $LOGGLY_CATALINA_BACKUP_PROPFILE" if [ ! -f $LOGGLY_CATALINA_PROPFILE ]; then - logMsgToConfigSysLog "ERROR" "ERROR: logging.properties file not found!. Looked at location $LOGGLY_CATALINA_PROPFILE" + logMsgToConfigSysLog "ERROR" "ERROR: logging.properties file not found!. Looked at location $LOGGLY_CATALINA_PROPFILE" exit 1 else - cp -f $LOGGLY_CATALINA_PROPFILE $LOGGLY_CATALINA_BACKUP_PROPFILE + # dont take a backup of logging properties file if it is already there + if [ ! -f $LOGGLY_CATALINA_BACKUP_PROPFILE ]; then + sudo cp -f $LOGGLY_CATALINA_PROPFILE $LOGGLY_CATALINA_BACKUP_PROPFILE + fi fi # This might not be needed. #wget -q -O - https://www.loggly.com/install/configure-syslog.py | sudo python - setup -#On RHEL 6.4, 'yum install tomcat' installs tomcat v6.0.24. This version does not support disabling of log rotation -if [ "$(lsb_release -ds | grep 'Red Hat Enterprise Linux Server release 6.4')" = "" ]; then +#Log rotation is not supported on version below 6.0.33.0 +if [ $(compareVersions $TOMCAT_VERSION $MIN_TOMCAT_VERSION 4) -ge 0 ]; then #removing the end . from logging.properties variable 1catalina.org.apache.juli.FileHandler.prefix = catalina. if grep -Fq "prefix = catalina." $LOGGLY_CATALINA_PROPFILE then @@ -94,15 +205,16 @@ if [ "$(lsb_release -ds | grep 'Red Hat Enterprise Linux Server release 6.4')" sudo sed -i "s/prefix = host-manager./prefix = host-manager/g" $LOGGLY_CATALINA_PROPFILE fi - #Check if the rotatable property is present in logging.properties + #Check if the rotatable property is present in logging.properties if grep -Fq "rotatable" $LOGGLY_CATALINA_PROPFILE then - #If present, set all the values to false - sed -i -e 's/rotatable = true/rotatable = false/g' $LOGGLY_CATALINA_PROPFILE + #If present, set all the values to false + sed -i -e 's/rotatable = true/rotatable = false/g' $LOGGLY_CATALINA_PROPFILE fi - if [ $(fgrep "rotatable = false" "$LOGGLY_CATALINA_PROPFILE" | wc -l) < 4 ]; then + + if [ $(fgrep "rotatable = false" "$LOGGLY_CATALINA_PROPFILE" | wc -l) -lt 4 ]; then #If rotatable property present or not, add the following lines to disable rotation in any case -sudo cat << EOIPFW >> $LOGGLY_CATALINA_PROPFILE +sudo cat << EOIPFW >> $LOGGLY_CATALINA_PROPFILE 1catalina.org.apache.juli.FileHandler.rotatable = false 2localhost.org.apache.juli.FileHandler.rotatable = false 3manager.org.apache.juli.FileHandler.rotatable = false @@ -125,15 +237,15 @@ restartTomcat # Create rsyslog dir if doesn't exist, Modify the rsyslog directory if exsit if [ -d "$SYSLOG_DIR" ]; then - echo "$SYSLOG_DIR exist, Not creating dir" - echo "Changing the permission on the rsyslog in /var/spool" - if [ "$(lsb_release -ds | grep Ubuntu)" != "" ]; then + echo "$SYSLOG_DIR exist, not creating dir" + if [[ "$LINUX_DIST" == *"Ubuntu"* ]]; then + echo "INFO: Changing the permission on the rsyslog in /var/spool" sudo chown -R syslog:adm $SYSLOG_DIR fi -else - echo "creating dir $SYSLOGDIR..." +else + echo "INFO: Creating dir $SYSLOGDIR..." sudo mkdir -v $SYSLOG_DIR - if [ "$(lsb_release -ds | grep Ubuntu)" != "" ]; then + if [[ "$LINUX_DIST" == *"Ubuntu"* ]]; then sudo chown -R syslog:adm $SYSLOG_DIR fi fi @@ -141,7 +253,7 @@ fi if [ -f "$TOMCAT_SYSLOGCONF_FILE" ]; then echo "$TOMCAT_SYSLOGCONF_FILE exist, Not creating file" else - echo " Creating file $TOMCAT_SYSLOGCONF_FILE" + echo " Creating file $TOMCAT_SYSLOGCONF_FILE" sudo touch $TOMCAT_SYSLOGCONF_FILE sudo chmod o+w $TOMCAT_SYSLOGCONF_FILE generateTomcat21File @@ -153,19 +265,19 @@ queryParam="&from=-15m&until=now&size=1" searchAndFetch tomcatinitialLogCount "$queryParam" # restart the syslog service. restartsyslog -echo "restarting tomcat one more time..." +echo "INFO: Restarting tomcat one more time..." restartTomcat searchAndFetch tomcatLatestLogCount "$queryParam" counter=1 maxCounter=10 echo "latest tomcat log count: $tomcatLatestLogCount and before query count: $tomcatinitialLogCount" -while [ "$tomcatLatestLogCount" -le "$tomcatinitialLogCount" ]; do +while [ "$tomcatLatestLogCount" -le "$tomcatinitialLogCount" ]; do echo "######### waiting for 30 secs......" sleep 30 echo "######## Done waiting. verifying again..." echo "Try # $counter of total 10" - searchAndFetch tomcatLatestLogCount "$queryParam" + searchAndFetch tomcatLatestLogCount "$queryParam" echo "Again Fetch: initial count $tomcatinitialLogCount : latest count : $tomcatLatestLogCount counter: $counter max counter: $maxCounter" let counter=$counter+1 if [ "$counter" -gt "$maxCounter" ]; then @@ -181,33 +293,22 @@ fi } # End of configure rsyslog for tomcat -generateTomcat21File() { +generateTomcat21File() +{ imfileStr="\$ModLoad imfile -\$WorkDirectory $SYSLOG_DIR" -if [ "$(lsb_release -ds | grep Ubuntu)" != "" ]; then -imfileStr+=" -\$PrivDropToGroup adm -\$WorkDirectory $SYSLOG_DIR" +\$WorkDirectory $SYSLOG_DIR +" + if [[ "$LINUX_DIST" == *"Ubuntu"* ]]; then +imfileStr+="\$PrivDropToGroup adm +\$WorkDirectory $SYSLOG_DIR +" fi - -#change the tomcat-21 file to variable from above and also take the directory of the tomcat log file. -sudo cat << EOIPFW >> $TOMCAT_SYSLOGCONF_FILE -$imfileStr - +imfileStr+=" #parameterized token here....... #Add a tag for tomcat events -\$template LogglyFormatTomcat,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [$LOGGLY_AUTH_TOKEN@41058 tag=\"tomcat\"] %msg%\n" -# catalina.log -\$InputFileName $LOGGLY_CATALINA_LOG_HOME/catalina.log -\$InputFileTag catalina-log -\$InputFileStateFile stat-catalina-log -\$InputFileSeverity info -\$InputFilePersistStateInterval 20000 -\$InputRunFileMonitor -if \$programname == 'catalina-log' then @@logs-01.loggly.com:514;LogglyFormatTomcat - if \$programname == 'catalina-log' then ~ +\$template LogglyFormatTomcat,\"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [$LOGGLY_AUTH_TOKEN@41058 tag=\\\"tomcat\\\"] %msg%\n\" # catalina.out \$InputFileName $LOGGLY_CATALINA_LOG_HOME/catalina.out @@ -217,17 +318,7 @@ if \$programname == 'catalina-log' then @@logs-01.loggly.com:514;LogglyFormatTom \$InputFilePersistStateInterval 20000 \$InputRunFileMonitor if \$programname == 'catalina-out' then @@logs-01.loggly.com:514;LogglyFormatTomcat - if \$programname == 'catalina-out' then ~ - -# host-manager.log -\$InputFileName $LOGGLY_CATALINA_LOG_HOME/host-manager.log -\$InputFileTag host-manager -\$InputFileStateFile stat-host-manager -\$InputFileSeverity info -\$InputFilePersistStateInterval 20000 -\$InputRunFileMonitor -if \$programname == 'host-manager' then @@logs-01.loggly.com:514;LogglyFormatTomcat - if \$programname == 'host-manager' then ~ +if \$programname == 'catalina-out' then ~ # initd.log \$InputFileName $LOGGLY_CATALINA_LOG_HOME/initd.log @@ -237,7 +328,30 @@ if \$programname == 'host-manager' then @@logs-01.loggly.com:514;LogglyFormatTom \$InputFilePersistStateInterval 20000 \$InputRunFileMonitor if \$programname == 'initd' then @@logs-01.loggly.com:514;LogglyFormatTomcat - if \$programname == 'initd' then ~ +if \$programname == 'initd' then ~ +" + +if [ $(compareVersions $TOMCAT_VERSION $MIN_TOMCAT_VERSION 4) -ge 0 ]; then +imfileStr+=" +# catalina.log +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/catalina.log +\$InputFileTag catalina-log +\$InputFileStateFile stat-catalina-log +\$InputFileSeverity info +\$InputFilePersistStateInterval 20000 +\$InputRunFileMonitor +if \$programname == 'catalina-log' then @@logs-01.loggly.com:514;LogglyFormatTomcat +if \$programname == 'catalina-log' then ~ + +# host-manager.log +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/host-manager.log +\$InputFileTag host-manager +\$InputFileStateFile stat-host-manager +\$InputFileSeverity info +\$InputFilePersistStateInterval 20000 +\$InputRunFileMonitor +if \$programname == 'host-manager' then @@logs-01.loggly.com:514;LogglyFormatTomcat +if \$programname == 'host-manager' then ~ # localhost.log \$InputFileName $LOGGLY_CATALINA_LOG_HOME/localhost.log @@ -247,7 +361,7 @@ if \$programname == 'initd' then @@logs-01.loggly.com:514;LogglyFormatTomcat \$InputFilePersistStateInterval 20000 \$InputRunFileMonitor if \$programname == 'localhost-log' then @@logs-01.loggly.com:514;LogglyFormatTomcat - if \$programname == 'localhost-log' then ~ +if \$programname == 'localhost-log' then ~ # manager.log \$InputFileName $LOGGLY_CATALINA_LOG_HOME/manager.log @@ -257,31 +371,41 @@ if \$programname == 'localhost-log' then @@logs-01.loggly.com:514;LogglyFormatTo \$InputFilePersistStateInterval 20000 \$InputRunFileMonitor if \$programname == 'manager' then @@logs-01.loggly.com:514;LogglyFormatTomcat - if \$programname == 'manager' then ~ +if \$programname == 'manager' then ~ +" +else +logMsgToConfigSysLog "INFO" "INFO: Tomcat version is less than 6.0.33. Log rotation cannot be disabled for version <6.0.33; only catalina.out log will be monitored" +fi + +#change the tomcat-21 file to variable from above and also take the directory of the tomcat log file. +sudo cat << EOIPFW >> $TOMCAT_SYSLOGCONF_FILE +$imfileStr EOIPFW } -rollback() { +rollback() +{ setVariables - logMsgToConfigSysLog "INFO" "Initiating rollback" - echo "Reverting the catalina file ...." + logMsgToConfigSysLog "INFO" "INFO: Initiating rollback" + echo "INFO: Reverting the catalina file ...." if [ -f "$LOGGLY_CATALINA_BACKUP_PROPFILE" ]; then sudo rm -fr $LOGGLY_CATALINA_PROPFILE - cp -f $LOGGLY_CATALINA_BACKUP_PROPFILE $LOGGLY_CATALINA_PROPFILE + sudo cp -f $LOGGLY_CATALINA_BACKUP_PROPFILE $LOGGLY_CATALINA_PROPFILE sudo rm -fr $LOGGLY_CATALINA_BACKUP_PROPFILE fi - echo "Deleting the loggly tomcat syslog conf file ...." + echo "INFO: Deleting the loggly tomcat syslog conf file ...." if [ -f "$TOMCAT_SYSLOGCONF_FILE" ]; then sudo rm -rf "$TOMCAT_SYSLOGCONF_FILE" fi - echo "Removed all the needed files" + echo "INFO: Removed all the modified files" restartTomcat - logMsgToConfigSysLog "INFO" "Rollback completed" + logMsgToConfigSysLog "INFO" "INFO: Rollback completed" } -debug() { +debug() +{ setVariables - logMsgToConfigSysLog "INFO" "Initiating debug" + logMsgToConfigSysLog "INFO" "INFO: Initiating debug" #if [ -f loggly_tcpdump.log ]; then # sudo rm -rf loggly_tcpdump.log #fi @@ -298,10 +422,10 @@ debug() { logger -t "LOGGLYVERIFY" "LOGGLYDEBUG- Test msg for verification from script" #msg="<14>0 test test [$LOGGLY_AUTH_TOKEN@41058 tag=\"Test\"] test from Loggly verify script" - #echo "test msg: $msg" + #echo "test msg: $msg" #echo "$msg" | nc -vv -q2 logs-01.loggly.com 514 - #sleep 1 + #sleep 1 #sudo killall tcpdump #echo "Reading the capture packets!!" #TODO not sure why -r doesn't work. @@ -311,16 +435,16 @@ debug() { #echo "result is $result" #if [ "$result" -eq 0 ]; then # echo "Failed to send data to logs-01.loggly.com on 514. Please check your rsyslog config or tomcat config file" - # else + # else # echo "Succefully send data to loggly!!!" - #fi + #fi # schedule the search searchAndFetch finalCount $queryParam counter=1 maxCounter=10 echo "initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" - while [ "$finalCount" -le "$initialCount" ]; do + while [ "$finalCount" -le "$initialCount" ]; do echo "initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" echo "######### waiting for 30 secs......" sleep 30 @@ -342,7 +466,8 @@ debug() { #$1 return the count of records in loggly, $2 is the query param to search in loggly -searchAndFetch() { +searchAndFetch() +{ searchquery="$2" echo "Search query is $searchquery" #url="http://$LOGGLY_ACCOUNT.loggly.com/apiv2/search?q=syslog.appName:LOGGLYVERIFY&from=-5m&until=now&size=1" @@ -351,7 +476,7 @@ searchAndFetch() { result=$(wget -qO- /dev/stdout --user "$LOGGLY_USERNAME" --password "$LOGGLY_PASSWORD" "$url") #echo "Result of wget invoke $result" if [ -z "$result" ]; then - logMsgToConfigSysLog "ERROR" "ERROR: Please check your network connectivity & ensure Loggly subdomain, username and password is specified" + logMsgToConfigSysLog "ERROR" "ERROR: Please check your network connectivity & ensure Loggly subdomain, username and password is specified/correct" exit 1 fi id=$(echo "$result" | grep -v "{" | grep id | awk '{print $2}') @@ -370,58 +495,79 @@ searchAndFetch() { eval $1="'$count'" echo "count of event from loggly: "$count"" #$1=$count; - if [ "$count" > 0 ]; then + if [ "$count" > 0 ]; then timestamp=$(echo "$result" | grep timestamp) #echo "timestamp: "$timestamp"" echo "Data made successfully to loggly!!!" fi } -usage() { +usage() +{ cat << EOF - usage: ltomcatsetup [-ch catalina home] [-a loggly auth account or subdomain] [-t loggly token] [-u username] [-p password] [-d to debug] [-h help] - usage: ltomcatsetup [-ch catalina home] [-r to rollback] [-h help] + usage: ltomcatsetup [-a loggly auth account or subdomain] [-t loggly token] [-u username] [-p password (optional)] [-d to debug (optional)] [-ch catalina home (optional)] + usage: ltomcatsetup [-r to rollback] [-ch catalina home (optional)] + usage: ltomcatsetup [-h for help] EOF } -restartsyslog() { +restartsyslog() +{ echo "Restarting the rsyslog service..." sudo service rsyslog restart } -restartTomcat() { +restartTomcat() +{ #sudo service tomcat restart or home/bin/start.sh if [ $(ps -ef | grep -v grep | grep "$SERVICE" | wc -l) > 0 ]; then echo "$SERVICE is running..." if [ -f /etc/init.d/$SERVICE ]; then - echo "$SERVICE is running as service" + echo "INFO: $SERVICE is running as service" sudo service $SERVICE restart - else - echo "$SERVICE is not running as service..." + else + echo "INFO: $SERVICE is not running as service..." # To be commented only for test - echo "shutting down tomcat..." - $LOGGLY_CATALINA_HOME/bin/shutdown.sh - echo "Done shutting down tomcat!" - echo "starting up tomcat..." - $LOGGLY_CATALINA_HOME/bin/startup.sh - echo "Tomcat is up and running" + echo "INFO: Shutting down tomcat..." + $LOGGLY_CATALINA_HOME/bin/shutdown.sh + echo "INFO: Done shutting down tomcat!" + echo "INFO: Starting up tomcat..." + $LOGGLY_CATALINA_HOME/bin/startup.sh + echo "INFO: Tomcat is up and running" fi fi } -logMsgToConfigSysLog() { +logMsgToConfigSysLog() +{ #$1 variable will be SUCCESS or ERROR or INFO #$2 variable will be the message echo "$2" CURRENT_TIME=$(date) - + var="{\"sub-domain\":\"$LOGGLY_ACCOUNT\", \"host-name\":\"$HOST_NAME\", \"script-name\":\"$SCRIPT_NAME\", \"script-version\":\"$SCRIPT_VERSION\", \"status\":\"$1\", \"time-stamp\":\"$CURRENT_TIME\", \"linux-distribution\":\"$LINUX_DIST\", \"tomcat-version\":\"$TOMCAT_VERSION\", \"messages\":\"$2\"}" curl -H "content-type:application/json" -d "$var" https://logs-01.loggly.com/inputs/$CONFIG_SYSLOG_TOKEN echo } +getPassword() +{ +unset LOGGLY_PASSWORD +prompt="Please enter Loggly Password:" +while IFS= read -p "$prompt" -r -s -n 1 char +do + if [[ $char == $'\0' ]] + then + break + fi + prompt='*' + LOGGLY_PASSWORD+="$char" +done +echo +} + LOGGLY_ACCOUNT="" LOGGLY_CATALINA_HOME="" LOGGLY_AUTH_TOKEN="" @@ -429,9 +575,10 @@ LOGGLY_DEBUG="" LOGGLY_ROLLBACK="" LOGGLY_USERNAME= LOGGLY_PASSWORD= -if [ $# -eq 0 ]; then +if [ $# -eq 0 ]; then usage -else + exit +else while [ "$1" != "" ]; do case $1 in -ch | --catalinahome ) shift @@ -450,35 +597,36 @@ while [ "$1" != "" ]; do LOGGLY_USERNAME=$1 echo "Username is set" ;; - -p | --password ) shift + -p | --password ) shift LOGGLY_PASSWORD=$1 ;; -d | --debug ) LOGGLY_DEBUG="true" - echo "Running debug..." ;; -r | --rollback ) LOGGLY_ROLLBACK="true" - echo "Reverting configuration for sending tomcat logs to Loggly" ;; - -h | --help) + -h | --help) usage exit ;; - *) usage - exit - ;; esac shift done fi -if [ "$LOGGLY_DEBUG" != "" -a "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" -a "$LOGGLY_PASSWORD" != "" ]; then +if [ "$LOGGLY_DEBUG" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" ]; then + if [ "$LOGGLY_PASSWORD" = "" ]; then + getPassword + fi debug -elif [ "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" -a "$LOGGLY_PASSWORD" != "" ]; then +elif [ "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" ]; then + if [ "$LOGGLY_PASSWORD" = "" ]; then + getPassword + fi configureLoggly -elif [ "$LOGGLY_ROLLBACK" != "" -a "$LOGGLY_CATALINA_HOME" != "" ]; then +elif [ "$LOGGLY_ROLLBACK" != "" ]; then rollback -else - usage +else + usage fi