From 388bb42ba067a1464c1393208c3d6eea7eff0315 Mon Sep 17 00:00:00 2001 From: Eric Rasche Date: Mon, 24 Apr 2017 21:14:33 +0000 Subject: [PATCH] Stats docs --- doc/source/admin/special_topics/grafana.png | Bin 0 -> 40161 bytes doc/source/admin/special_topics/index.rst | 3 +- .../special_topics/performance_tracking.rst | 52 ++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 doc/source/admin/special_topics/grafana.png create mode 100644 doc/source/admin/special_topics/performance_tracking.rst diff --git a/doc/source/admin/special_topics/grafana.png b/doc/source/admin/special_topics/grafana.png new file mode 100644 index 0000000000000000000000000000000000000000..19259aaf0491b92ef48ef3fe221b1c14613b6a73 GIT binary patch literal 40161 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 or `StatsD `__. This document assumes you have already deployed a metrics server. + +uWSGI +----- + +As you have certainly switched to uWSGI from the default paste server, there is some built-in uWSGI support for performance logging. You can send uWSGI's internal metrics to a carbon (Graphite) server by setting the carbon option in your galaxy.ini: + +.. code-block:: ini + + [uwsgi] + socket = ... + carbon = 127.0.0.1:2003 + +Or a StatsD server via: + +.. code-block:: ini + + [uwsgi] + socket = ... + statsd-push = 127.0.0.1:8125 + +The `official documentation `__ contains further information on uWSGI and stats servers. In the `uWSGI Stats Server ` documentation, you can see an example of the sort of information that you will be able to collect. + +API / Route Timing Statistics +----------------------------- + +Galaxy provides middleware to automatically log the amount of time controllers take to execute and to send that data to a stats server. Using the stats server of your choice, you can calculate the relevant statistics to ensure that your Galaxy server is performing as expected. + +The statsD configuration requires setting the following: + +.. code-block:: ini + + statsd_host=127.0.0.1 + statsd_port=8125 + statsd_prefix=galaxy + +And the graphite configuration is very similar: + +.. code-block:: ini + + graphite_host=127.0.0.1 + graphite_port=2003 + graphite_prefix=galaxy + +Most people visualize the statistics using something like `Grafana `__: + +.. image:: grafana.png