Logging uWSGI errors and alarms to Sentry
February 02, 2022Albéric Trancart2 min read
If you already use Sentry to manage your application errors and uWSGI as a WSGI server for your Python project (such as Flask or Django), you are one step away to improve your monitoring setup in a matter of minutes.
It is important to do so: even if you have Sentry configured for your app, if the WSGI layer that is running it fails you won't get any Sentry issue about it.
With uWSGI there are some events that you want to watch for, and triggering a Sentry issue is one easy way of fitting this into your existing error management flow.
Such events include:
- when a uWSGI worker is killed because it is serving a request for an excessive long time (the "harakiri" behavior)
- when the listen queue of the uWSGI socket is full
- when a segfault happens
- or any non-applicative log line that you want to monitor
How to integrate uWSGI with Sentry
Unbit (the company behind uWSGI) wrote a plugin exactly for this use case!
Make sure that a libcurl package is installed on the machine that runs uWSGI, for instance:
apt-get install libcurl4-openssl-dev
Install the plugin before running uWSGI:
uwsgi --build-plugin https://github.com/theodo/uwsgi-sentry
NB: this is a fork of the original plugin that makes it work for current versions of uWSGI and Sentry, I will update this article if it is merged into the main repo.
Configure the plugin in your uWSGI INI file:
[uwsgi] plugin = sentry ; Defines what to do when the "logsentry" alarm is triggered alarm = logsentry sentry:dsn=https://email@example.com/dsn,logger=uwsgi.sentry ; Alarm for listen queue full alarm-backlog = logsentry ; Alarm for segfault alarm-segfault = logsentry ; Alarm for harakiri (alarm-log uses regexp to match log lines) alarm-log = logsentry HARAKIRI ON WORKER
You can find more customization options in the Alarm subystem docs.
Deploy this change to your server and bam, you're done!
After this, you could reflect back on what other component of your architecture you are missing alerts on.
Bonus: if you are loving Sentry as we do, here are some tips on how to use Sentry effectively.
CSS fan, space enthousiast, dungeon master and more!