Mapping Live, Realtime Requests from Heroku Log Drains via WebSockets
Cartologger receives Heroku HTTPS log drains
via POST /logplex and, from the router logs, parse the original client
IP address of each successful request to the target Heroku app.
Each IP is geolocated via Freegeoip.net (the result of which is cached into Redis). The lat/long coordinates are pushed to the web-client using Rails 5's ActionCable.
The web-client uses Mapbox.js and Leaflet.markercluster to display live realtime Heroku app requests on a map.
The only real dependency is Redis. Make sure you have
is installed and that the redis-server is running.
You'll need to make sure you have Redis running before starting...
Clone the repo:
git clone https://github.com/tonyta/cartologger.git
cd cartologger/Install gem dependencies and run tests:
bundle install
bin/rspecEcho your Mapbox Public Key
into your .env file:
# The public key below is just an example. You'll need to get your own.
echo "MAPBOX_PUBLIC_KEY: pk.eyJ1IjoiZm9vIiwiYSI6ImJhciIsImFsZyI6Ik.AkX0xyUS0coZ3t7EZUKW33" >> .envRun the Rails server in a separate tab, or daemonize with the --daemon option:
bin/rails sRun Sidekiq process in a separate tab, or daemonize with the
--daemon --logfile path/to/log options:
bundle exec sidekiqNavigate your browser to http://localhost:3000 and you should see a blank map.
Run the following rake task:
bin/rake mock:logdrainThis task will post into your server at /logplex with a fake log drain.
You should see markers populating the map in your browser.
Make sure the app can accept external requests and add it to your Heroku log drains:
heroku drains:add https://where-you-deployed-cartologger.com/logplex --app your-heroku-app- Tooltip on each marker displaying the city and country of the request.
- Statistics and history per visitor (IP address).
- Sorting and selection based on host, path, and method.
- Reset button to clear map.
- Automatically scroll map to latest activity.
- Color and size tweaks for clusters.
- Presentation mode.
- Configure log parsing via YAML.
- Mountable in existing Rails app.
