Skip to content

Instantly share code, notes, and snippets.

@leonsodhi
Last active February 18, 2020 22:06
Show Gist options
  • Save leonsodhi/8eb28e06b2c35c136bf8 to your computer and use it in GitHub Desktop.
Save leonsodhi/8eb28e06b2c35c136bf8 to your computer and use it in GitHub Desktop.
# IMPORTANT: this example is potentially out of date. The latest version can be found here: https://github.com/papertrail/remote_syslog2/blob/master/examples/remote_syslog.ebextensions.config
# See http://help.papertrailapp.com/kb/hosting-services/aws-elastic-beanstalk/
# Usage:
# - replace <VERSION> with the version of remote_syslog2 you want to use. Example: .../download/v0.14/remote_syslog_linux_amd64.tar.gz
# - replace <YOUR-TRACKED-FILES> with the files you want to monitor for new log lines. Example: - /var/log/httpd/access_log
# - replace <YOUR-APP-NAME> with the name of the application
# - replace <YOUR-LOG-DESTINATION> and <YOUR-PORT-NUMBER> with the values shown under log destinations: https://papertrailapp.com/account/destinations
sources:
/home/ec2-user: https://github.com/papertrail/remote_syslog2/releases/download/<VERSION>/remote_syslog_linux_amd64.tar.gz
files:
"/etc/log_files.yml":
mode: "00644"
owner: root
group: root
encoding: plain
content: |
files:
- <YOUR-TRACKED-FILES>
hostname: <YOUR-APP-NAME>
destination:
host: <YOUR-LOG-DESTINATION>
port: <YOUR-PORT-NUMBER>
protocol: tls
"/etc/init.d/remote_syslog":
mode: "00555"
owner: root
group: root
encoding: plain
content: |
#!/bin/bash
#
# remote_syslog This shell script takes care of starting and stopping
# remote_syslog daemon
#
# chkconfig: - 58 74
# description: papertrail/remote_syslog \
# https://github.com/papertrail/remote_syslog2/blob/master/examples/remote_syslog.init.d
### BEGIN INIT INFO
# Provides: remote_syslog
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Should-Start: $syslog $named ntpdate
# Should-Stop: $syslog $named
# Short-Description: start and stop remote_errolog
# Description: papertrail/remote_syslog2
# https://github.com/papertrail/remote_syslog2/blob/master/examples/remote_syslog.init.d
### END INIT INFO
# Source function library.
. /etc/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
prog="/usr/local/bin/remote_syslog"
config="/etc/log_files.yml"
pid_dir="/var/run"
EXTRAOPTIONS=""
pid_file="$pid_dir/remote_syslog.pid"
PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
RETVAL=0
is_running(){
# Do we have PID-file?
if [ -f "$pid_file" ]; then
# Check if proc is running
pid=`cat "$pid_file" 2> /dev/null`
if [[ $pid != "" ]]; then
exepath=`readlink /proc/"$pid"/exe 2> /dev/null`
exe=`basename "$exepath"`
if [[ $exe == "remote_syslog" ]]; then
# Process is running
return 0
fi
fi
fi
return 1
}
start(){
echo -n $"Starting $prog: "
unset HOME MAIL USER USERNAME
$prog -c $config --pid-file=$pid_file $EXTRAOPTIONS
RETVAL=$?
echo
return $RETVAL
}
stop(){
echo -n $"Stopping $prog: "
if (is_running); then
kill `cat $pid_file`
RETVAL=$?
echo
return $RETVAL
else
echo "$pid_file not found"
fi
}
status(){
echo -n $"Checking for $pid_file: "
if (is_running); then
echo "found"
else
echo "not found"
fi
}
reload(){
restart
}
restart(){
stop
start
}
condrestart(){
is_running && restart
return 0
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac
exit $RETVAL
commands:
00_stop_service:
command: "/sbin/service remote_syslog stop"
ignoreErrors: true
01_install_remote_syslog_binary:
command: "cp /home/ec2-user/remote_syslog/remote_syslog /usr/local/bin"
02_enable_service:
command: "/sbin/chkconfig remote_syslog on"
03_start_service:
command: "/sbin/service remote_syslog restart"
ignoreErrors: true
@gbleu
Copy link

gbleu commented Nov 24, 2014

The first time went fine, but then I started receiving errors like :

[ERROR] Command 01_install_remote_syslog_binary (cp /home/ec2-user/remote_syslog/remote_syslog /usr/local/bin) failed
[DEBUG] Command 01_install_remote_syslog_binary output: cp: cannot create regular file ‘/usr/local/bin/remote_syslog’: Text file busy

Adding this command fixed it :

00_stop_service:
command: "/sbin/service remote_syslog stop"
ignoreErrors: true

@leonsodhi
Copy link
Author

Thanks, @gbleu. I've added it into the config.

@chirillc
Copy link

@leonsodhi, Is there a way I could use this config file to cover different environments? For example I'd like to be able to use something like this:

hostname: <YOUR-APP-NAME>-{$ENV}

This way I will be able to distinguish papertrail log entries based on different hostnames.

@xaralis
Copy link

xaralis commented May 5, 2015

@chirillc I need exactly the same thing. Did you figure it out somehow?

@leonsodhi
Copy link
Author

@chirillc, @xaralis, an update is coming that will allow you to set an environment name. If you'd like to get an early release and make a few changes yourself, fire a mail into support@papertrailapp.com and I'll reply with the details. I'd like to avoid making this beta release public so that everyone else only gets a final 100% working copy.

@elbuo8
Copy link

elbuo8 commented Aug 10, 2015

I'm in the same boat 😢

@u2mejc
Copy link

u2mejc commented Oct 8, 2015

This comment chain is really old, but this gist is linked from Papertrail's official docs so I'm sure other's still read this. This is what I did to get app/host specific names in a script:

eval export PAPERTRAIL_HOSTNAME=$PAPERTRAIL_HOSTNAME # can expand $HOSTNAME
sed -i "s/.*hostname:.*/hostname: $PAPERTRAIL_HOSTNAME/" /etc/log_files.yml

I'm using container_commands to retrieve GUI's Environment Properties as env vars. So if I set PAPERTRAIL_HOSTNAME as nextkillerapp-$HOSTNAME, it will expand to nextkillerapp-ip-10-1-2-3 in the papertrail config. I did this for all of the env vars, but here's an an example ebextension for the hostname: https://gist.github.com/u2mejc/f9187e2a15c7e85a5135 If enough people find it useful, I can rework it so that all of the vars are exposed in the gui.

@dsshap
Copy link

dsshap commented Oct 27, 2015

@leonsodhi - any news on the release of env support?

@leonsodhi
Copy link
Author

@dsshap none yet, I'm afraid. If you'd like a copy of what I have ATM, shoot a mail into support@papertrailapp.com and I'll attach it to a reply.

I still haven't had a chance to test it myself so I don't want to replace this gist just yet.

@troy
Copy link

troy commented Dec 2, 2015

For others who want to use environmental variables in this script, check out Referencing env variables from Elastic Beanstalk .ebextensions config files and
Passing custom env vars on Elastic Beanstalk.

While variables are available to the ebextensions script (which, in Ruby, would be the ENV hash), they are only available in container_commands, not commands or other config sections. That's why either preprocessing or a modification to this script is required.

Details: Linux server configuration sections

@aop
Copy link

aop commented Dec 10, 2015

I don't get it. Where am I supposed to know what version I want? The newest? What is it?

@cymen
Copy link

cymen commented Feb 2, 2016

@aop I think it's just abstracting the version out to avoid having this go out of date too quickly. I chose to put in v0.16 for version after taking a look at the releases page here:

https://github.com/papertrail/remote_syslog2/releases

@leonsodhi
Copy link
Author

This config now lives in the remote_syslog2 examples directory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment