From d669a8d624ffca243a00873ab7586941debad79a Mon Sep 17 00:00:00 2001 From: psquickitjayant Date: Wed, 23 Apr 2014 20:41:10 +0530 Subject: [PATCH] Compatible to RHEL --- ltomcatsetup.sh | 184 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 125 insertions(+), 59 deletions(-) diff --git a/ltomcatsetup.sh b/ltomcatsetup.sh index 4eda3fa..836e898 100755 --- a/ltomcatsetup.sh +++ b/ltomcatsetup.sh @@ -1,13 +1,24 @@ #!/bin/bash # executing the script for loggly to get the install and configure syslog. -configureLoggly() { + +setVariables(){ +#These are common variables and will be used across various functions SERVICE=tomcat6 -LOGGLY_CATALINA_CONF_HOME=$LOGGLY_CATALINA_HOME/conf -LOGGLY_CATALINA_PROPFILE=$LOGGLY_CATALINA_CONF_HOME/logging.properties -LOGGLY_CATALINA_BACKUP_PROPFILE=$LOGGLY_CATALINA_PROPFILE.bk -SYSLOG_DIR=/var/spool/rsyslog SYSLOG_ETCDIR_CONF=/etc/rsyslog.d LOGGLY_SYSLOG_CONFFILE=$SYSLOG_ETCDIR_CONF/22-loggly.conf +TOMCAT_SYSLOGCONF_FILE=$SYSLOG_ETCDIR_CONF/21-tomcat.conf + +SYSLOG_DIR=/var/spool/rsyslog + +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 +} + +configureLoggly() { +setVariables INITIAL_MSGSEARCH_COUNT=0 FINAL_MSGSEARCH_COUNT=0 @@ -25,6 +36,7 @@ else echo "ERROR: Loggly auth token is required to configure rsyslog. Please pass -a while running script" 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 @@ -32,8 +44,41 @@ cp -f $LOGGLY_CATALINA_PROPFILE $LOGGLY_CATALINA_BACKUP_PROPFILE # This might not be needed. #wget -q -O - https://www.loggly.com/install/configure-syslog.py | sudo python - setup -sed -i -e 's/rotatable\ =\ true/rotatable\ =\ false/g' $LOGGLY_CATALINA_BACKUP_PROPFILE +#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 + +#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 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 +2localhost.org.apache.juli.FileHandler.rotatable = false +3manager.org.apache.juli.FileHandler.rotatable = false +4host-manager.org.apache.juli.FileHandler.rotatable = false +EOIPFW +fi #if [ $(fgrep rotatable "$LOGGLY_CATALINA_PROPFILE" | wc -l) < 4 ]; then #echo "Rotable configuration doesn't exist on the properites file. Adding it..." #cat << ROTATABLE >> "$LOGGLY_CATALINA_PROPFILEA" @@ -50,15 +95,17 @@ restartTomcat if [ -d "$SYSLOG_DIR" ]; then echo "$SYSLOG_DIR exist, Not creating dir" echo "Changing the permission on the rsyslog in /var/spool" - sudo chown -R syslog:adm /var/spool/rsyslog + if [ "$(lsb_release -ds | grep Ubuntu)" != "" ]; then + sudo chown -R syslog:adm $SYSLOG_DIR + fi else echo "creating dir $SYSLOGDIR..." - sudo mkdir -v /var/spool/rsyslog - sudo chown -R syslog:adm /var/spool/rsyslog + sudo mkdir -v $SYSLOG_DIR + if [ "$(lsb_release -ds | grep Ubuntu)" != "" ]; then + sudo chown -R syslog:adm $SYSLOG_DIR + fi fi -TOMCAT_SYSLOGCONF_FILE=/etc/rsyslog.d/21-tomcat.conf - if [ -f "$TOMCAT_SYSLOGCONF_FILE" ]; then echo "$TOMCAT_SYSLOGCONF_FILE exist, Not creating file" else @@ -84,34 +131,45 @@ echo "latest tomcat log count: $tomcatLatestLogCount and before query count: $to while [ "$tomcatLatestLogCount" -le "$tomcatinitialLogCount" ]; do echo "######### waiting for 30 secs......" sleep 30 - echo "######## Done waiting. verfiying again..." + 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 done -if [ "$tomcatLatestLogCount" -gt "$tomcatinitialCount" ]; then -echo "####### Tomcat Log succesfully transferred to Loggly ###########" +if [ "$tomcatLatestLogCount" -gt "$tomcatinitialLogCount" ]; then +echo "####### Tomcat Log successfully transferred to Loggly ###########" fi - } # End of configure rsyslog for tomcat generateTomcat21File() { + +imfileStr="\$ModLoad imfile +\$WorkDirectory $SYSLOG_DIR +" +if [ "$(lsb_release -ds | grep 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 >> /etc/rsyslog.d/21-tomcat.conf -\$ModLoad imfile -\$WorkDirectory /var/spool/rsyslog -\$PrivDropToGroup adm -\$WorkDirectory /var/spool/rsyslog +sudo cat << EOIPFW >> $TOMCAT_SYSLOGCONF_FILE +$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 /var/log/tomcat6/catalina.log +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/catalina.log \$InputFileTag catalina-log \$InputFileStateFile stat-catalina-log \$InputFileSeverity info @@ -121,7 +179,7 @@ if \$programname == 'catalina-log' then @@logs-01.loggly.com:514;LogglyFormatTom if \$programname == 'catalina-log' then ~ # catalina.out -\$InputFileName /var/log/tomcat6/catalina.out +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/catalina.out \$InputFileTag catalina-out \$InputFileStateFile stat-catalina-out \$InputFileSeverity info @@ -131,7 +189,7 @@ if \$programname == 'catalina-out' then @@logs-01.loggly.com:514;LogglyFormatTom if \$programname == 'catalina-out' then ~ # host-manager.log -\$InputFileName /var/log/tomcat6/host-manager.log +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/host-manager.log \$InputFileTag host-manager \$InputFileStateFile stat-host-manager \$InputFileSeverity info @@ -141,7 +199,7 @@ if \$programname == 'host-manager' then @@logs-01.loggly.com:514;LogglyFormatTom if \$programname == 'host-manager' then ~ # initd.log -\$InputFileName /var/log/tomcat6/initd.log +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/initd.log \$InputFileTag initd \$InputFileStateFile stat-initd \$InputFileSeverity info @@ -151,7 +209,7 @@ if \$programname == 'initd' then @@logs-01.loggly.com:514;LogglyFormatTomcat if \$programname == 'initd' then ~ # localhost.log -\$InputFileName /var/log/tomcat6/localhost.log +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/localhost.log \$InputFileTag localhost-log \$InputFileStateFile stat-localhost-log \$InputFileSeverity info @@ -161,7 +219,7 @@ if \$programname == 'localhost-log' then @@logs-01.loggly.com:514;LogglyFormatTo if \$programname == 'localhost-log' then ~ # manager.log -\$InputFileName /var/log/tomcat6/manager.log +\$InputFileName $LOGGLY_CATALINA_LOG_HOME/manager.log \$InputFileTag manager \$InputFileStateFile stat-manager \$InputFileSeverity info @@ -173,28 +231,31 @@ EOIPFW } rollback() { - echo "Reverting the catalina file ...." - if [ -f "$LOGGLY_CATALINA_BACKUP_PROPFILE" ]; then - cp -f $LOGGLY_CATALINA_BACKUP_PROPFILE $LOGGLY_CATALINA_PROPFILE - fi - echo "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" - restartTomcat + setVariables + echo "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 rm -fr $LOGGLY_CATALINA_BACKUP_PROPFILE + fi + echo "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" + restartTomcat } debug() { - + setVariables #if [ -f loggly_tcpdump.log ]; then # sudo rm -rf loggly_tcpdump.log #fi # Get the inital count for the msg. queryParam="syslog.appName:LOGGLYVERIFY&from=-15m&until=now&size=1" -#set -x + #set -x searchAndFetch initialCount "$queryParam" -#set +x + #set +x echo "Count of the msg before logging: $initialCount" #sudo sh -c "tcpdump -i eth0 -A \"tcp and port 514\" -s 0 -w loggly_tcpdump.log" & @@ -208,10 +269,10 @@ debug() { #sleep 1 #sudo killall tcpdump #echo "Reading the capture packets!!" - #TODO not sure why -r doesn't work. - # sudo tcpdump -r loggly_tcpdump.log - #Hack using grep and strings - # result="$(strings loggly_tcpdump.log | grep "LOGGLYDEBUG" | wc -l)" + #TODO not sure why -r doesn't work. + # sudo tcpdump -r loggly_tcpdump.log + #Hack using grep and strings + # result="$(strings loggly_tcpdump.log | grep "LOGGLYDEBUG" | wc -l)" #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" @@ -228,16 +289,19 @@ debug() { echo "initial count $initialCount : final count : $finalCount counter: $counter max counter: $maxCounter" echo "######### waiting for 30 secs......" sleep 30 - echo "######## Done waiting. verfiying again..." + 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 done if [ "$finalCount" -gt "$initialCount" ]; then - echo "####### Log succesfully transferred to Loggly ###########" + echo "####### Log successfully transferred to Loggly ###########" fi - } @@ -245,7 +309,7 @@ debug() { 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" + #url="http://$LOGGLY_ACCOUNT.loggly.com/apiv2/search?q=syslog.appName:LOGGLYVERIFY&from=-5m&until=now&size=1" url="http://$LOGGLY_ACCOUNT.loggly.com/apiv2/search?q=$searchquery" echo "search url: $url" result=$(wget -qO- /dev/stdout --user "$LOGGLY_USERNAME" --password "$LOGGLY_PASSWORD" "$url") @@ -264,7 +328,7 @@ searchAndFetch() { # retrieve the data result=$(wget -qO- /dev/stdout --user "$LOGGLY_USERNAME" --password "$LOGGLY_PASSWORD" "$url") -# echo "actual result based on rsid: $result" + #echo "actual result based on rsid: $result" count=$(echo "$result" | grep total_events | awk '{print $2}') count="${count%\,}" eval $1="'$count'" @@ -279,7 +343,8 @@ searchAndFetch() { usage() { cat << EOF - usage: ltomcat [-ch catalina home] [-d to debug] [-a loggly auth account or subdomain] [-t loggly token] [-u username] [-p password] [-h help] + 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] EOF } @@ -293,7 +358,7 @@ 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/tomcat ]; then + if [ -f /etc/init.d/$SERVICE ]; then echo "$SERVICE is running as service" sudo service $SERVICE restart else @@ -313,6 +378,7 @@ LOGGLY_ACCOUNT="" LOGGLY_CATALINA_HOME="" LOGGLY_AUTH_TOKEN="" LOGGLY_DEBUG="" +LOGGLY_ROLLBACK="" LOGGLY_USERNAME= LOGGLY_PASSWORD= if [ $# -eq 0 ]; then @@ -339,15 +405,13 @@ while [ "$1" != "" ]; do -p | --password ) shift LOGGLY_PASSWORD=$1 ;; - -d | --debug ) + -d | --debug ) LOGGLY_DEBUG="true" - echo "Running debug..." - shift + echo "Running debug..." ;; -r | --rollback ) - echo "Reverting configuration for sending tomcat logs to Logggly" - rollback - exit + LOGGLY_ROLLBACK="true" + echo "Reverting configuration for sending tomcat logs to Loggly" ;; -h | --help) usage @@ -361,10 +425,12 @@ while [ "$1" != "" ]; do done fi -if [ "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" ]; then - configureLoggly -elif [ "$LOGGLY_DEBUG" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" ]; then +if [ "$LOGGLY_DEBUG" != "" -a "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" ]; then debug +elif [ "$LOGGLY_CATALINA_HOME" != "" -a "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" ]; then + configureLoggly +elif [ "$LOGGLY_ROLLBACK" != "" -a "$LOGGLY_CATALINA_HOME" != "" ]; then + rollback else usage fi