:title: Statsd reporting

Statsd reporting
================

Zuul comes with support for the statsd protocol, when enabled and configured
(see below), the Zuul scheduler will emit raw metrics to a statsd receiver
which let you in turn generate nice graphics. An example is OpenStack Zuul
status page: http://status.openstack.org/zuul/

Configuration
-------------

Statsd support uses the statsd python module. Note that Zuul will start without
the statsd python module, so an existing Zuul installation may be missing it.

The configuration is done via environment variables STATSD_HOST and
STATSD_PORT. They are interpreted by the statsd module directly and there is no
such parameter in zuul.conf yet. Your init script will have to initialize both
of them before executing Zuul.

Your init script most probably loads a configuration file named
``/etc/default/zuul`` which would contain the environment variables::

  $ cat /etc/default/zuul
  STATSD_HOST=10.0.0.1
  STATSD_PORT=8125

Metrics
-------

The metrics are emitted by the Zuul scheduler (`zuul/scheduler.py`):

**gerrit.event.<type> (counters)**
  Gerrit emits different kind of message over its `stream-events` interface. As
  a convenience, Zuul emits metrics to statsd which save you from having to use
  a different daemon to measure Gerrit events.
  The Gerrit events have different types defined by Gerrit itself, Zuul will
  relay any type of event reusing the name defined by Gerrit. Some of the
  events emitted are:

    * patchset-created
    * draft-published
    * change-abandonned
    * change-restored
    * change-merged
    * merge-failed
    * comment-added
    * ref-updated
    * reviewer-added

  Refer to your Gerrit installation documentation for an exhaustive list of
  Gerrit event types.

**zuul.node_type.**
  Holds metrics specifc to build nodes per label. The hierarchy is:

    #. **<build node label>** each of the labels associated to a build in
           Jenkins. It contains:

      #. **job.<jobname>** subtree detailing per job statistics:

        #. **wait_time** counter and timer of the wait time, with the
                   difference of the job start time and the execute time, in
                   milliseconds.

**zuul.pipeline.**
  Holds metrics specific to jobs. The hierarchy is:

    #. **<pipeline name>** as defined in your `layout.yaml` file (ex: `gate`,
                         `test`, `publish`). It contains:

      #. **all_jobs** counter of jobs triggered by the pipeline.
      #. **current_changes** A gauge for the number of Gerrit changes being
               processed by this pipeline.
      #. **job** subtree detailing per jobs statistics:

        #. **<jobname>** The triggered job name.
        #. **<build result>** Result as defined in your triggering system. For
                 Jenkins that would be SUCCESS, FAILURE, UNSTABLE, LOST.  The
                 metrics holds both an increasing counter and a timing
                 reporting the duration of the build. Whenever the result is a
                 SUCCESS or FAILURE, Zuul will additionally report the duration
                 of the build as a timing event.

      #. **resident_time** timing representing how long the Change has been
               known by Zuul (which includes build time and Zuul overhead).
      #. **total_changes** counter of the number of change proceeding since
               Zuul started.
      #. **wait_time** counter and timer of the wait time, with the difference
               of the job start time and the execute time, in milliseconds.

  Additionally, the `zuul.pipeline.<pipeline name>` hierarchy contains
  `current_changes` (gauge), `resident_time` (timing) and `total_changes`
  (counter) metrics for each projects. The slash separator used in Gerrit name
  being replaced by dots.

  As an example, given a job named `myjob` triggered by the `gate` pipeline
  which took 40 seconds to build, the Zuul scheduler will emit the following
  statsd events:

    * `zuul.pipeline.gate.job.myjob.SUCCESS` +1
    * `zuul.pipeline.gate.job.myjob`  40 seconds
    * `zuul.pipeline.gate.all_jobs` +1
