mirage is an extension of skyline that attempts to handle metrics with
seasonality (inspired by some of Abe's crucible work). mirage attempts to extend skyline from a temporal data pool point of view and surface the relevant timeseries data for the expected seasonality of a metric in realtime from graphite. mirage then analyses this timeseries data set to determine if the timeseries is anomalous at the metric's own "FULL_DURATION" or SECOND_ORDER_RESOLUTION_HOURS.
We have some fairly seasonal metrics and as with anyone who has used
skyline at the "normal" FULL_DURATION of 86400, if we alert on these
metrics we get noise, not signal. Running analyzer with a FULL_DURATION greater than 24 hours is difficult due to the timeseries data getting massive and the analyzer run_time ever increasing. Therefore, skyline analyzer is somewhat limited in it effectiveness on timeseries that do not "fit" with FULL_DURATION.
mirage has been developed so it can coexist with skyline analyzer and various things can be enabled and disabled between analyzer and mirage. The branch also incorporates a number of pull requests that were made to etsy/skyline to improve metadata in alerts, a new alerter in the form of syslog so that anomalies and the metadata can be pipelined in the normal event stream (e.g. elasticsearch. riemann, etc) and some additional graphite metrics related to anomaly breakdowns, etc.
It is not recommended as a drop in replacement for the master etsy/skyline, although the additions do make it a lot better :).
The mirage code itself is mostly just analyzer code with a few modifications, it is not necessarily the best implementation, but it is enough "like" analyzer to be familiar.
This branch has not been pull requested on the etsy master yet as it is
still a proof of concept at the moment, however it is a concept that is
proving to be quite useful. If anyone is interesting in testing - any feedback would be appreciated.
We ran etsy/skyline and this mirage branch on 2 separate servers for a week to compare results - mirage has a negate alerts option as well, so this means analyzer can run as normal and mirage can "test" the analyzer anaomalous metric against the timeseries surfaced from graphite and send negation alerts with embedded graphs for both the analyzer FULL_DURATION and for the specific metric SECOND_ORDER_RESOLUTION_HOURS - this makes for easy comparisons.
https://github.com/earthgecko/skyline/tree/mirageHopefully this goes some way to addressing problems like Or's, "the request time was 50ms, at some point it went up to 150ms and remained high for a while. Is there a way to configure Skyline to set anomaly after multiple data points?"
mirage will probably only suit certain metric types and it is not envisaged to handle all metrics, just certain known metrics which have some seasonality. It must be keep in mind that mirage may be analysing timeseries from a different retention period (aggregation).
Below are some graphs from some mirage negation testing to show comparisons between analyzer (at 24hrs) and mirage (at 168hrs) - in these case analyzer alerted that the metrics were anomalous for the 24hr timeseries and mirage analysed these at metrics as a 168hr timeseries and found the metrics
not to be anomalous.
1.
metric with occasional dataanalyzer flagging as anomalous at 24hrs

mirage surfacing the timeseries at 168hrs, analysing the 168hrs timeseries and finding the metric to not be anomalous

2.
metric with occasional spikesanalyzer flagging as anomalous at 24hrs 

3.
Spiking metric with constant data

Regards
Gary