# change mirror to ubuntu.osuosl.org first
sudo apt-get update
sudo apt-get install build-essential libreadline-dev libssl-dev zlib1g-dev libxml2-dev libxslt-dev
namespace :log do | |
desc "Downloads application logs to ./log/deploy/<RAILS_ENV>/<TIMESTAMP>/" | |
task :fetch, :roles => :app do | |
source = "#{shared_path}/log/#{rails_env}.log*" | |
files_per_host = {} | |
run "ls #{source}" do |channel, stream, data| | |
files_per_host[channel[:host]] = data.split("\n") | |
end | |
destination = File.join('log', 'deploy') |
My goal was to set up Flume on my web instances, and write all events into s3, so I could easily use other tools like Amazon Elastic Map Reduce, and Amazon Red Shift.
I didn't want to have to deal with log rotation myself, so I setup Flume to read from a syslog UDP source. In this case, Flume NG acts as a syslog server, so as long as Flume is running, my web application can simply write to it in syslog format on the specified port. Most languages have plugins for this.
At the time of this writing, I've been able to get Flume NG up and running on 3 ec2 instances, and all writing to the same bucket.
Install Flume NG on instances
set :application, "appname" | |
set :deploy_to, "/var/www" | |
set :scm, :git | |
set :repository, "[email protected]:user/app.git" | |
default_run_options[:pty] = true | |
set :user, "www-data" | |
set :domain, "foo.tld" | |
set :normalize_asset_timestamps, false |
# config/deploy.rb | |
# probably a lot of ways to improve this... | |
set :application, 'my_app' | |
set :repo_url, '[email protected]:USERNAME/my_app.git' | |
# should set up a deploy user | |
set :user, 'deploy' | |
set :deploy_to, '/var/www/my_app' | |
set :scm, :git |