Created
March 20, 2013 19:26
graphite with nginx and uwsgi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PYTHONPATH=/opt/graphite/webapp/graphite | |
MODULE=graphite_uwsgi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# uwsgi --master --chdir /opt/graphite/webapp/graphite --module graphite_uwsgi ... | |
# | |
# | |
# this module will update a carbon server (used by the graphite tool: http://graphite.wikidot.com/) | |
# with requests count made by a Django app (and can track graphite itself as it is a Django app ;) | |
# | |
# | |
import os | |
import uwsgi | |
import time | |
from django.core.handlers.wsgi import WSGIHandler | |
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' | |
CARBON_SERVER = "127.0.0.1:2003" | |
def update_carbon(signum): | |
# connect to the carbon server | |
carbon_fd = uwsgi.connect(CARBON_SERVER) | |
# send data to the carbon server | |
uwsgi.send(carbon_fd, "uwsgi.%s.requests %d %d\n" % (uwsgi.hostname, uwsgi.total_requests(), int(time.time()))) | |
# close the connection with the carbon server | |
uwsgi.close(carbon_fd) | |
# register a new uwsgi signal (signum: 17) | |
uwsgi.register_signal(17, '', update_carbon) | |
# attach a timer of 10 seconds to signal 17 | |
uwsgi.add_timer(17, 10) | |
# the Django app | |
application = WSGIHandler() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
### BEGIN INIT INFO | |
# Provides: uwsgi | |
# Required-Start: $all | |
# Required-Stop: $all | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: starts the uwsgi app server | |
# Description: starts uwsgi app server using start-stop-daemon | |
### END INIT INFO | |
PATH=/opt/uwsgi:/sbin:/bin:/usr/sbin:/usr/bin | |
DAEMON=/usr/local/bin/uwsgi | |
OWNER=uwsgi | |
NAME=uwsgi | |
DESC=uwsgi | |
test -x $DAEMON || exit 0 | |
# Include uwsgi defaults if available | |
if [ -f /etc/default/uwsgi-graphite ] ; then | |
. /etc/default/uwsgi-graphite | |
fi | |
set -e | |
DAEMON_OPTS="-s 127.0.0.1:9001 -M 4 -t 30 -A 4 -p 4 -d /var/log/uwsgi-graphite.log --pythonpath $PYTHONPATH --module $MODULE" | |
case "$1" in | |
start) | |
echo -n "Starting $DESC: " | |
start-stop-daemon --start --chuid $OWNER:$OWNER --user $OWNER \ | |
--exec $DAEMON -- $DAEMON_OPTS | |
echo "$NAME." | |
;; | |
stop) | |
echo -n "Stopping $DESC: " | |
start-stop-daemon --signal 3 --user $OWNER --quiet --retry 2 --stop \ | |
--exec $DAEMON | |
echo "$NAME." | |
;; | |
reload) | |
killall -1 $DAEMON | |
;; | |
force-reload) | |
killall -15 $DAEMON | |
;; | |
restart) | |
echo -n "Restarting $DESC: " | |
start-stop-daemon --signal 3 --user $OWNER --quiet --retry 2 --stop \ | |
--exec $DAEMON | |
sleep 1 | |
start-stop-daemon --user $OWNER --start --quiet --chuid $OWNER:$OWNER \ | |
--exec $DAEMON -- $DAEMON_OPTS | |
echo "$NAME." | |
;; | |
status) | |
killall -10 $DAEMON | |
;; | |
*) | |
N=/etc/init.d/$NAME | |
echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2 | |
exit 1 | |
;; | |
esac | |
exit 0 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
upstream myapp { | |
server 127.0.0.1:9001; | |
} | |
server { | |
listen 80; | |
server_name graphite.domain.net; | |
access_log /var/log/nginx/graphite-access.log; | |
error_log /var/log/nginx/graphite-error.log; | |
root /opt/graphite/webapp/graphite; | |
location / { | |
add_header Access-Control-Allow-Origin "*"; | |
add_header Access-Control-Allow-Methods "GET, OPTIONS"; | |
add_header Access-Control-Allow-Headers "origin, authorization, accept"; | |
uwsgi_pass myapp; | |
include uwsgi_params; | |
} | |
location /media { | |
# This makes static media available at the /media/ url. The | |
# media will continue to be available during site downtime, | |
# allowing you to use styles and images in your maintenance page. | |
alias /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment