Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added modular scripts - Tomcat, Apache2, File Monitorin, S3 File Monitoring and Nginx Server #69

Merged
merged 96 commits into from Oct 21, 2014
Merged
Changes from 1 commit
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
a24007e
Added customer token to configsyslog
Jun 24, 2014
7d10190
Validated Tomcat installation before Linux
Jun 24, 2014
b12a1f1
Added support to check Loggly port reachabilty
Jun 26, 2014
4160bca
Support for Tomcat downloaded as a package
Jun 26, 2014
8e46033
Added Apache2 Configuration Script
Jun 30, 2014
040fcaf
Download Linux script inside it
Jul 1, 2014
3f133cd
Downloads Linux script inside it
Jul 1, 2014
1e00b42
Logging OS name to Loggly if unsupported
Jul 3, 2014
c6b391f
Updated Red Hat to RedHat
Jul 3, 2014
1de793f
Updated RedhHat/ CentOS log file name
Jul 3, 2014
318770b
Stop of the user do not want to restart tomcat
Jul 3, 2014
dc77925
No verification if already configured
Jul 4, 2014
e6d46eb
No verification if already configured
Jul 4, 2014
afb9a36
Updated typos and link
Jul 4, 2014
2868b89
Removed duplicate variables and updated message
Jul 9, 2014
cb88b8f
Removed duplicate variables
Jul 9, 2014
b0115f9
Added file monitoring script
Jul 9, 2014
dee3dc3
Updated Manual link and Logging file name also
Jul 10, 2014
8e21171
Updated warning text
Jul 11, 2014
69324a4
Updated message text
Jul 11, 2014
200fd93
Made token optional
Jul 11, 2014
4bfbbc0
Made token optional
Jul 11, 2014
6f4412f
Made token optional
Jul 11, 2014
a1b6222
Check if the file name/ path contains spaces
Jul 14, 2014
1ae7d6b
Removed Extra characters
Jul 14, 2014
fe0a452
Updated version 1.0 to 1.01
Jul 14, 2014
0cf4b30
Updated message
Jul 15, 2014
1d22a45
Removed extra break
Jul 15, 2014
d63e96d
Updated text message
Jul 15, 2014
c6197df
Configure script if log file size is 0
Jul 16, 2014
9a98ed3
Configure Script if log file size is 0
Jul 16, 2014
8bffdca
Added README.md for the Linux Script
Jul 18, 2014
35323ad
Updated README
Jul 18, 2014
5d6e636
Create README.md
Jul 18, 2014
3752d2c
Create README.md
Jul 18, 2014
c4bf094
Update README.md
Jul 18, 2014
04891f1
Update README.md
Jul 18, 2014
14f566d
Create README.md
Jul 18, 2014
138ef2f
Incorporated Manoj's Feedback
Jul 21, 2014
aac29fa
Incorporated Manoj's Feedback
Jul 21, 2014
b45d7e9
Update README.md
Jul 21, 2014
be5085d
Update README.md
Jul 21, 2014
2364a89
Update README.md
Jul 21, 2014
e96a030
Update README.md
Jul 21, 2014
4c2ffe6
Updated script to support any Linux OS
Jul 23, 2014
302c243
Merge branch 'master' of https://github.com/psquickitjayant/install-s…
Jul 23, 2014
85df450
Added s3 monitoring scripts
Jul 25, 2014
f9c864d
Add support to Amazon AMI OS
Jul 27, 2014
8fee938
Removed extra variable
Jul 28, 2014
2cac672
Updated command
Jul 28, 2014
6c54ab7
Updated version number
Jul 28, 2014
c64f4b3
Updated version number
Jul 28, 2014
e7a7328
Updated version number
Jul 28, 2014
3d44e13
Updated Scripts (Under development)
Jul 28, 2014
beccd2a
Added check for sub domain
Jul 29, 2014
9d522f8
Changed message if Mac OSX found
Jul 30, 2014
151b89e
Revert "Changed message if Mac OSX found"
Jul 30, 2014
cc07795
Changed message if "Darwin OS"
Jul 30, 2014
9787d95
Updated s3 Script. Under Developement
Jul 30, 2014
29d982b
Added comments
Jul 30, 2014
bc505b9
Add support to download bucket/ file using -s3b
Jul 31, 2014
cfb1435
Minor Bug Fix
Jul 31, 2014
dcab550
Updated s3b to s3url and Minor bug fixes
Aug 1, 2014
2f3cf7e
Added more checks for the bucket name validation
Aug 4, 2014
b8abcd0
Removed extra quotes
Aug 5, 2014
7eac676
Updated script to support s3 file monitoring
Aug 5, 2014
a9436f9
Added check for the directory
Aug 5, 2014
991e9fb
Delete Temp Folder after Rollback
Aug 6, 2014
c22bc30
Added dynamic tag to modify from other scripts
Aug 7, 2014
9919125
Fixed a bug
Aug 7, 2014
cda8b4b
Revert "Fixed a bug"
Aug 7, 2014
c7d1e72
S3 Script: Added "s3file" tag
Aug 7, 2014
7dbf18a
Updated script to support multiple Linux machines
Aug 18, 2014
b84686d
File-Monitoring-
Aug 19, 2014
b7f7443
Revert "File-Monitoring-"
Aug 19, 2014
a2d377e
File-monitoring: Added support to set Format name
Aug 19, 2014
408af55
S3 Script: Setting New Format name
Aug 19, 2014
20e0ef3
Updated Path for configure-file-monitoring.sh
Aug 21, 2014
8989253
Updated Path for configure-linux.sh
Aug 21, 2014
8b62c0f
Updated Path for configure-file-monitoring.sh
Aug 21, 2014
c716576
Updated Path for configure-linux.sh
Aug 21, 2014
fd0d765
Merged script-dev changes
Sep 26, 2014
4e38937
Create README.md
Sep 26, 2014
1118c5b
Update README.md
Sep 26, 2014
a05c43a
Update README.md
Sep 26, 2014
b896a25
Update README.md
Sep 26, 2014
d17eca2
Update README.md
Sep 26, 2014
7e7bc4c
Updated ReadMes
Sep 26, 2014
b0d9732
Skipping permissions check on RedHat and CentOS
Sep 26, 2014
b55c680
Minor modifications
Sep 30, 2014
3e0cb26
Nginx Script: Initial Commit
Sep 30, 2014
03c5b2d
Update README.md
Sep 30, 2014
ac442f4
Create README.md
Sep 30, 2014
9cfdb4c
Update README.md
Sep 30, 2014
cf1c248
Nginx Script: Updated manual configuration link
Oct 3, 2014
476a5ef
File Monitoring: Added tag as parameter
Oct 7, 2014
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Nginx Script: Initial Commit

  • Loading branch information
psquickitjayant
psquickitjayant committed Sep 30, 2014
commit 3e0cb26c990e71fd76157281acb8bba59c62dae1
@@ -0,0 +1,342 @@
#!/bin/bash

#downloads configure-linux.sh
echo "INFO: Downloading dependencies - configure-linux.sh"
curl -s -o configure-linux.sh https://www.loggly.com/install/configure-linux.sh
source configure-linux.sh "being-invoked"

########## Variable Declarations - Start ##########
#name of the current script
SCRIPT_NAME=configure-nginx.sh
#version of the current script
SCRIPT_VERSION=1.0

#we have not found the nginx version yet at this point in the script
APP_TAG="\"nginx-version\":\"\""

#name of the service, in this case nginx
SERVICE="nginx"
#name of nginx access log file
NGINX_ACCESS_LOG_FILE="access.log"
#name of nginx error log file
NGINX_ERROR_LOG_FILE="error.log"
#name and location of nginx syslog file
NGINX_SYSLOG_CONFFILE=$RSYSLOG_ETCDIR_CONF/21-nginx.conf
#name and location of nginx syslog backup file
NGINX_SYSLOG_CONFFILE_BACKUP=$RSYSLOG_ETCDIR_CONF/21-nginx.conf.loggly.bk

#this variable will hold the path to the nginx home
LOGGLY_NGINX_HOME=
#this variable will hold the value of the nginx log folder
LOGGLY_NGINX_LOG_HOME=
#this variable will hold the users nginx version
NGINX_VERSION=

MANUAL_CONFIG_INSTRUCTION="Manual instructions to configure nginx is available at https://www.loggly.com/docs/sending-nginx-logs/"

#this variable will hold if the check env function for linux is invoked
NGINX_ENV_VALIDATED="false"
########## Variable Declarations - End ##########

#check if nginx environment is compatible for Loggly
checkNginxLogglyCompatibility()
{
#check if the linux environment is compatible for Loggly
checkLinuxLogglyCompatibility

#check if nginx is installed on unix system
checkNginxDetails

NGINX_ENV_VALIDATED="true"
}


# executing the script for loggly to install and configure syslog.
installLogglyConfForNginx()
{
#log message indicating starting of Loggly configuration
logMsgToConfigSysLog "INFO" "INFO: Initiating Configure Loggly for Nginx."

#check if nginx environment is compatible with Loggly
if [ "$NGINX_ENV_VALIDATED" = "false" ]; then
checkNginxLogglyCompatibility
fi

#configure loggly for Linux
installLogglyConf

#create 21nginx.conf file
write21NginxConfFile

#check for the nginx log file size
checkLogFileSize $LOGGLY_NGINX_LOG_HOME/$NGINX_ACCESS_LOG_FILE $LOGGLY_NGINX_LOG_HOME/$NGINX_ERROR_LOG_FILE

#verify if the nginx logs made it to loggly
checkIfNginxLogsMadeToLoggly

#log success message
logMsgToConfigSysLog "SUCCESS" "SUCCESS: Nginx successfully configured to send logs via Loggly."
}

#executing script to remove loggly configuration for Nginx
removeLogglyConfForNginx()
{
logMsgToConfigSysLog "INFO" "INFO: Initiating rollback."

#check if the user has root permission to run this script
checkIfUserHasRootPrivileges

#check if the OS is supported by the script. If no, then exit
checkIfSupportedOS

#check if nginx is installed on unix system
checkNginxDetails

#remove 21nginx.conf file
remove21NginxConfFile

logMsgToConfigSysLog "INFO" "INFO: Rollback completed."
}

#identify if nginx is installed on your system and is available as a service
checkNginxDetails()
{
#verify if nginx is installed as service
if [ ! -f /etc/init.d/$SERVICE ]; then
logMsgToConfigSysLog "ERROR" "ERROR: Nginx is not configured as a service"
exit 1
fi

#get the version of nginx installed
getNginxVersion

#set all the required nginx variables by this script
setNginxVariables
}


#sets nginx variables which will be used across various functions
setNginxVariables()
{
LOGGLY_NGINX_LOG_HOME=/var/log/$SERVICE
}

#gets the version of nginx installed on the unix box
getNginxVersion()
{
NGINX_VERSION=$(nginx -v 2>&1)
NGINX_VERSION=${NGINX_VERSION#*/}
APP_TAG="\"nginx-version\":\"$NGINX_VERSION\""
logMsgToConfigSysLog "INFO" "INFO: nginx version: $NGINX_VERSION"
}

checkLogFileSize()
{
accessFileSize=$(wc -c "$1" | cut -f 1 -d ' ')
errorFileSize=$(wc -c "$2" | cut -f 1 -d ' ')
fileSize=$((accessFileSize+errorFileSize))
if [ $fileSize -ge 102400000 ]; then
logMsgToConfigSysLog "INFO" "INFO: "
while true; do
read -p "WARN: There are currently large log files which may use up your allowed volume. Please rotate your logs before continuing. Would you like to continue now anyway? (yes/no)" yn
case $yn in
[Yy]* )
logMsgToConfigSysLog "INFO" "INFO: Current nginx logs size is $fileSize bytes. Continuing with nginx Loggly configuration.";
break;;
[Nn]* )
logMsgToConfigSysLog "INFO" "INFO: Current nginx logs size is $fileSize bytes. Discontinuing with nginx Loggly configuration."
exit 1
break;;
* ) echo "Please answer yes or no.";;
esac
done
elif [ $fileSize -eq 0 ]; then
logMsgToConfigSysLog "WARN" "WARN: There are no recent logs from nginx there so won't be any sent to Loggly. You can generate some logs by visiting a page on your web server."
exit 1
fi
}

write21NginxConfFile()
{
#Create nginx syslog config file if it doesn't exist
echo "INFO: Checking if nginx sysconf file $NGINX_SYSLOG_CONFFILE exist."
if [ -f "$NGINX_SYSLOG_CONFFILE" ]; then
logMsgToConfigSysLog "WARN" "WARN: nginx syslog file $NGINX_SYSLOG_CONFFILE already exist."
while true; do
read -p "Do you wish to override $NGINX_SYSLOG_CONFFILE? (yes/no)" yn
case $yn in
[Yy]* )
logMsgToConfigSysLog "INFO" "INFO: Going to back up the conf file: $NGINX_SYSLOG_CONFFILE to $NGINX_SYSLOG_CONFFILE_BACKUP";
sudo mv -f $NGINX_SYSLOG_CONFFILE $NGINX_SYSLOG_CONFFILE_BACKUP;
write21NginxFileContents;
break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
else
write21NginxFileContents
fi
}

#function to write the contents of nginx syslog config file
write21NginxFileContents()
{
logMsgToConfigSysLog "INFO" "INFO: Creating file $NGINX_SYSLOG_CONFFILE"
sudo touch $NGINX_SYSLOG_CONFFILE
sudo chmod o+w $NGINX_SYSLOG_CONFFILE

imfileStr="\$ModLoad imfile
\$InputFilePollInterval 10
\$WorkDirectory $RSYSLOG_DIR
"
if [[ "$LINUX_DIST" == *"Ubuntu"* ]]; then
imfileStr+="\$PrivDropToGroup adm
"
fi

imfileStr+="
# nginx access file:
\$InputFileName $LOGGLY_NGINX_LOG_HOME/$NGINX_ACCESS_LOG_FILE
\$InputFileTag nginx-access:
\$InputFileStateFile stat-nginx-access
\$InputFileSeverity info
\$InputFilePersistStateInterval 20000
\$InputRunFileMonitor
#nginx Error file:
\$InputFileName $LOGGLY_NGINX_LOG_HOME/$NGINX_ERROR_LOG_FILE
\$InputFileTag nginx-error:
\$InputFileStateFile stat-nginx-error
\$InputFileSeverity error
\$InputFilePersistStateInterval 20000
\$InputRunFileMonitor
#Add a tag for nginx events
\$template LogglyFormatNginx,\"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [$LOGGLY_AUTH_TOKEN@41058 tag=\\\"nginx\\\"] %msg%\n\"
if \$programname == 'nginx-access' then @@logs-01.loggly.com:514;LogglyFormatNginx
if \$programname == 'nginx-access' then ~
if \$programname == 'nginx-error' then @@logs-01.loggly.com:514;LogglyFormatNginx
if \$programname == 'nginx-error' then ~
"

#change the nginx-21 file to variable from above and also take the directory of the nginx log file.
sudo cat << EOIPFW >> $NGINX_SYSLOG_CONFFILE
$imfileStr
EOIPFW

restartRsyslog
}


#checks if the nginx logs made to loggly
checkIfNginxLogsMadeToLoggly()
{
counter=1
maxCounter=10

nginxInitialLogCount=0
nginxLatestLogCount=0
queryParam="tag%3Anginx&from=-15m&until=now&size=1"

queryUrl="$LOGGLY_ACCOUNT_URL/apiv2/search?q=$queryParam"
logMsgToConfigSysLog "INFO" "INFO: Search URL: $queryUrl"

logMsgToConfigSysLog "INFO" "INFO: Getting initial nginx log count."
#get the initial count of nginx logs for past 15 minutes
searchAndFetch nginxInitialLogCount "$queryUrl"

logMsgToConfigSysLog "INFO" "INFO: Verifying if the nginx logs made it to Loggly."
logMsgToConfigSysLog "INFO" "INFO: Verification # $counter of total $maxCounter."
#get the final count of nginx logs for past 15 minutes
searchAndFetch nginxLatestLogCount "$queryUrl"
let counter=$counter+1

while [ "$nginxLatestLogCount" -le "$nginxInitialLogCount" ]; do
echo "INFO: Did not find the test log message in Loggly's search yet. Waiting for 30 secs."
sleep 30
echo "INFO: Done waiting. Verifying again."
logMsgToConfigSysLog "INFO" "INFO: Verification # $counter of total $maxCounter."
searchAndFetch nginxLatestLogCount "$queryUrl"
let counter=$counter+1
if [ "$counter" -gt "$maxCounter" ]; then
logMsgToConfigSysLog "ERROR" "ERROR: Nginx logs did not make to Loggly in time. Please check network and firewall settings and retry."
exit 1
fi
done

if [ "$nginxLatestLogCount" -gt "$nginxInitialLogCount" ]; then
logMsgToConfigSysLog "SUCCESS" "SUCCESS: nginx logs successfully transferred to Loggly! You are now sending nginx logs to Loggly."
exit 0
fi
}

#remove 21nginx.conf file
remove21NginxConfFile()
{
echo "INFO: Deleting the loggly nginx syslog conf file."
if [ -f "$NGINX_SYSLOG_CONFFILE" ]; then
sudo rm -rf "$NGINX_SYSLOG_CONFFILE"
fi
echo "INFO: Removed all the modified files."
restartRsyslog
}

#display usage syntax
usage()
{
cat << EOF
usage: configure-nginx [-a loggly auth account or subdomain] [-t loggly token (optional)] [-u username] [-p password (optional)]
usage: configure-nginx [-a loggly auth account or subdomain] [-r to rollback]
usage: configure-nginx [-h for help]
EOF
}

########## Get Inputs from User - Start ##########

if [ $# -eq 0 ]; then
usage
exit
else
while [ "$1" != "" ]; do
case $1 in
-t | --token ) shift
LOGGLY_AUTH_TOKEN=$1
echo "AUTH TOKEN $LOGGLY_AUTH_TOKEN"
;;
-a | --account ) shift
LOGGLY_ACCOUNT=$1
echo "Loggly account or subdomain: $LOGGLY_ACCOUNT"
;;
-u | --username ) shift
LOGGLY_USERNAME=$1
echo "Username is set"
;;
-p | --password ) shift
LOGGLY_PASSWORD=$1
;;
-r | --rollback )
LOGGLY_ROLLBACK="true"
;;
-h | --help)
usage
exit
;;
esac
shift
done
fi

if [ "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" ]; then
if [ "$LOGGLY_PASSWORD" = "" ]; then
getPassword
fi
installLogglyConfForNginx
elif [ "$LOGGLY_ROLLBACK" != "" -a "$LOGGLY_ACCOUNT" != "" ]; then
removeLogglyConfForNginx
else
usage
fi

########## Get Inputs from User - End ##########
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.