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 customer token to Linux script #67

Closed
wants to merge 77 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
77 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
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Added file monitoring script

  • Loading branch information
psquickitjayant
psquickitjayant committed Jul 9, 2014
commit b0115f96db75dca9fa42cc3eb3c08edd61ab7623
@@ -0,0 +1,327 @@
#!/bin/bash

#downloads configure-linux.sh
echo "INFO: Downloading dependencies - configure-linux.sh"
curl -s -o configure-linux.sh https://raw.githubusercontent.com/psquickitjayant/install-script/master/Linux%20Script/configure-linux.sh
source configure-linux.sh "being-invoked"

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

#file to monitor (contains complete path and file name) provided by user
LOGGLY_FILE_TO_MONITOR=

#alias name, will be used as tag & state file name etc. provided by user
LOGGLY_FILE_TO_MONITOR_ALIAS=

#file alias provided by the user
APP_TAG="\"file-alias\":\"\""

#name and location of syslog file
FILE_SYSLOG_CONFFILE=

#name and location of syslog backup file
FILE_SYSLOG_CONFFILE_BACKUP=

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

########## Variable Declarations - End ##########

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

#check if the linux environment is compatible for Loggly
checkLinuxLogglyCompatibility

#construct variables using filename and filealias
constructVariables

#check if file to monitor exists
checkIfFileExist

#check if the alias is already taken
checkIfFileAliasExist

#configure loggly for Linux
installLogglyConf

#check for the log file size
checkLogFileSize $LOGGLY_FILE_TO_MONITOR

#create 21<file alias>.conf file
write21ConfFileContents

#verify if the file logs made it to loggly
checkIfFileLogsMadeToLoggly

#log success message
logMsgToConfigSysLog "SUCCESS" "SUCCESS: Successfully configured to send $LOGGLY_FILE_TO_MONITOR logs via Loggly."
}

#executing script to remove loggly configuration for File
removeLogglyConfForFile()
{
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

#construct variables using filename and filealias
constructVariables

#checks if the conf file exists. if not, then exit.
checkIfConfFileExist

#remove 21<file-alias>.conf file
remove21ConfFile

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

constructVariables()
{
#conf file name
FILE_SYSLOG_CONFFILE="$RSYSLOG_ETCDIR_CONF/21-filemonitoring-$LOGGLY_FILE_TO_MONITOR_ALIAS.conf"

#conf file backup name
FILE_SYSLOG_CONFFILE_BACKUP="$FILE_SYSLOG_CONFFILE.loggly.bk"

#application tag
APP_TAG="\"file-alias\":\"$LOGGLY_FILE_TO_MONITOR_ALIAS\""
}

#checks if the file to be monitored exist
checkIfFileExist()
{
if [ -f "$LOGGLY_FILE_TO_MONITOR" ]; then
logMsgToConfigSysLog "INFO" "INFO: File $LOGGLY_FILE_TO_MONITOR exists."
else
logMsgToConfigSysLog "ERROR" "ERROR: File $LOGGLY_FILE_TO_MONITOR does not exist. Kindly recheck."
exit 1
fi
}

#check if the file alias is already taken
checkIfFileAliasExist()
{
if [ -f "$FILE_SYSLOG_CONFFILE" ]; then
logMsgToConfigSysLog "WARN" "WARN: This file alias is already taken. You must choose a unique file alias for each file."
while true; do
read -p "Would you like to overwrite the configuration for this file alias (yes/no)?" yn
case $yn in
[Yy]* )
logMsgToConfigSysLog "INFO" "INFO: Going to back up the conf file: $FILE_SYSLOG_CONFFILE to $FILE_SYSLOG_CONFFILE_BACKUP";
sudo mv -f $FILE_SYSLOG_CONFFILE $FILE_SYSLOG_CONFFILE_BACKUP;
break;;
[Nn]* )
logMsgToConfigSysLog "INFO" "INFO: Not overwriting the existing configuration. Exiting"
exit 1
break;;
* ) echo "Please answer yes or no.";;
esac
done
fi
}

#check the size of the log file. If the size is greater than 100MB give a warning to the user. If the file size is 0
#then exit
checkLogFileSize()
{
monitorFileSize=$(wc -c "$1" | cut -f 1 -d ' ')
if [ $monitorFileSize -ge 100000000 ]; 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 size is $LOGGLY_FILE_TO_MONITOR is $monitorFileSize. Continuing with File Loggly configuration.";
break;;
[Nn]* )
logMsgToConfigSysLog "INFO" "INFO: Current size is $LOGGLY_FILE_TO_MONITOR is $monitorFileSize. Discontinuing with File Loggly configuration."
exit 1
break;;
* ) echo "Please answer yes or no.";;
esac
done
elif [ $monitorFileSize -eq 0 ]; then
logMsgToConfigSysLog "WARN" "WARN: There are no recent $LOGGLY_FILE_TO_MONITOR log files so verification may not succeed. Exiting."
exit 1
fi
}

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

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

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

#write to 21-<file-alias>.conf file
sudo cat << EOIPFW >> $FILE_SYSLOG_CONFFILE
$imfileStr
EOIPFW

restartRsyslog
}

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

fileInitialLogCount=0
fileLatestLogCount=0
queryParam="syslog.appName%3A$LOGGLY_FILE_TO_MONITOR_ALIAS&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 log count."
#get the initial count of file logs for past 15 minutes
searchAndFetch fileInitialLogCount "$queryUrl"

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

while [ "$fileLatestLogCount" -le "$fileInitialLogCount" ]; 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 fileLatestLogCount "$queryUrl"
let counter=$counter+1
if [ "$counter" -gt "$maxCounter" ]; then
logMsgToConfigSysLog "ERROR" "ERROR: Logs did not make to Loggly in time. Please check your token & network/firewall settings and retry."
exit 1
fi
done

if [ "$fileLatestLogCount" -gt "$fileInitialLogCount" ]; then
logMsgToConfigSysLog "SUCCESS" "SUCCESS: Logs successfully transferred to Loggly! You are now sending $LOGGLY_FILE_TO_MONITOR logs to Loggly."
exit 0
fi
}

#checks if the conf file exist. Name of conf file is constructed using the file alias name provided
checkIfConfFileExist()
{
if [ ! -f "$FILE_SYSLOG_CONFFILE" ]; then
logMsgToConfigSysLog "ERROR" "ERROR: Invalid File Alias provided."
exit 1
fi
}

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

#display usage syntax
usage()
{
cat << EOF
usage: configure-file [-a loggly auth account or subdomain] [-t loggly token] [-u username] [-p password (optional)] [-f filename] [-l filealias]
usage: configure-file [-a loggly auth account or subdomain] [-r to rollback] [-l filealias]
usage: configure-file [-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"
;;
-f | --filename ) shift
LOGGLY_FILE_TO_MONITOR=$1
echo "File to monitor: $LOGGLY_FILE_TO_MONITOR"
;;
-l | --filealias ) shift
LOGGLY_FILE_TO_MONITOR_ALIAS=$1
echo "File alias: $LOGGLY_FILE_TO_MONITOR_ALIAS"
;;
-h | --help)
usage
exit
;;
esac
shift
done
fi

if [ "$LOGGLY_AUTH_TOKEN" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_USERNAME" != "" -a "$LOGGLY_FILE_TO_MONITOR" != "" -a "$LOGGLY_FILE_TO_MONITOR_ALIAS" != "" ]; then
if [ "$LOGGLY_PASSWORD" = "" ]; then
getPassword
fi
installLogglyConfForFile
elif [ "$LOGGLY_ROLLBACK" != "" -a "$LOGGLY_ACCOUNT" != "" -a "$LOGGLY_FILE_TO_MONITOR_ALIAS" != "" ]; then
removeLogglyConfForFile
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.