From b522a076563217569abfc4b747fcd74e394f4313 Mon Sep 17 00:00:00 2001 From: earthgecko Date: Mon, 1 Aug 2016 12:21:10 +0100 Subject: [PATCH] Various - Webapp js - first element in the list does not load timeseries data as per https://github.com/earthgecko/skyline/issues/17 added a Known bugs seciton Modified: skyline/webapp/templates/panorama.html - Apply time zone fix to skyline.js -added a Known bugs section as per https://github.com/earthgecko/skyline/issues/18 Modified: skyline/webapp/templates/now.html - Added an overview image for Mirage - Added Order Matters section to Mirage explaining Analyzer routing of ALERT tuples - Atempted to make the Mirage doc page it flow better and clearer Added: docs/images/crucible/webapp/skyline.webapp.basic.overview.png docs/skyline.mirage.overview.uml Modified: docs/mirage.rst - Various other minor docs changes Modified: docs/installation.rst docs/overview.rst docs/webapp.rst --- .../html/_images/skyline.mirage.overview.png | Bin 0 -> 64821 bytes docs/_build/html/_sources/installation.txt | 6 - docs/_build/html/_sources/mirage.txt | 197 ++++++++++----- docs/_build/html/_sources/overview.txt | 2 +- docs/_build/html/_sources/webapp.txt | 2 +- docs/_build/html/installation.html | 5 - docs/_build/html/mirage-1.pdf | Bin 21874 -> 21874 bytes docs/_build/html/mirage.html | 229 ++++++++++++------ docs/_build/html/overview.html | 2 +- docs/_build/html/searchindex.js | 2 +- docs/_build/html/webapp.html | 2 +- docs/_build/plot_directive/mirage-1.pdf | Bin 21874 -> 21874 bytes .../mirage/skyline.mirage.overview.png | Bin 0 -> 64821 bytes docs/installation.rst | 6 - docs/mirage.rst | 197 ++++++++++----- docs/overview.rst | 2 +- docs/skyline.mirage.overview.uml | 41 ++++ docs/webapp.rst | 2 +- skyline/webapp/templates/now.html | 12 + skyline/webapp/templates/panorama.html | 12 + 20 files changed, 492 insertions(+), 227 deletions(-) create mode 100644 docs/_build/html/_images/skyline.mirage.overview.png create mode 100644 docs/images/crucible/mirage/skyline.mirage.overview.png create mode 100644 docs/skyline.mirage.overview.uml diff --git a/docs/_build/html/_images/skyline.mirage.overview.png b/docs/_build/html/_images/skyline.mirage.overview.png new file mode 100644 index 0000000000000000000000000000000000000000..079c20821e36cc59077b17e6d668502792d89b82 GIT binary patch literal 64821 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�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 for a clearer picture. -:blak3r2: Our app logs phone calls for businesses and I want to be able to - detect when VIP phone systems go down or act funny and begin flooding us with - events. Our work load is very noisy from 9-5pm... where 9-5 is different for - each customer depending on their workload so thresholding and modeling isn't - good. +Why Mirage? +----------- -:earthgecko: Yes, Mirage is great at user defined seasonality, in your case - weekday 9-5 peaks, evening drop offs, early morning and weekend lows - multi - seasonal, Mirage is the ticket. - Your best bet would be to try 7days (168) as your SECOND_ORDER_RESOLUTION_HOURS - value for those app log metrics, however, you may get away with a 3 day - window, it depends on the metrics really, but it may not be noisy at 3 days - resolution, even at the weekends. - Also bear in mind, Mirage does some "normalizing" if your have aggregations - in Graphite (e.g retentions), due to Mirage probably pulling aggregated data, - however it is analyzing the timeseries at the aggregated resolution so it is - "normalised" as the data point that Analyzer triggered on is ALSO aggregated - in that timeseries resolution. So intuitively on may think it may miss it in - the aggregation then. True, but Analyzer will likely trigger on the next run - again if it IS anomalous, anomalous metrics normally trigger multiple, - multiple times (hence the EXPIRATION_TIME settings), so when Analyzer pushes - to Mirage again, each aggregation is more likely to trigger anomalous, IF it - is anomalous at the user defined full duration. A little flattened maybe, a - little lag maybe, but less noise, more signal. +Analyzer's :mod:`settings.FULL_DURATION` somewhat limits Analyzer's usefulness +for metrics that have a seasonality / periodicity that is greater than +:mod:`settings.FULL_DURATION`. This means Analyzer is not great in terms of +"seeing the bigger picture" when it comes to metrics that have a weekly pattern +as well as a daily patterns for example. +Increasing :mod:`settings.FULL_DURATION` to anything above 24 hours (86400) is +not necessarily realistic or useful, because the greater the +:mod:`settings.FULL_DURATION`, the greater memory required for Redis and the +longer Analyzer will take to run. What Mirage can and cannot do ============================= @@ -85,6 +64,9 @@ consumption in an office building is a good example of a multi-seasonal data set For now let us just consider the daily and weekly seasonality. +The difference between the Analyzer and Mirage views of a timeseries +-------------------------------------------------------------------- + .. plot:: # A bit of a contrived example... @@ -224,25 +206,55 @@ For now let us just consider the daily and weekly seasonality. As we can see above, on a Saturday morning the energy consumption does not increase as it normally does during the week days. Analyzer would probably find -the metric to be anomalous if :mod:`settings.ANALYZER_CRUCIBLE_ENABLED` was set -to 86400 (24 hours), Saturday morning would seem anomalous. +the metric to be anomalous if :mod:`settings.FULL_DURATION` was set to 86400 (24 +hours), Saturday morning would seem anomalous. However, if the metric's alert tuple was set up with a ``SECOND_ORDER_RESOLUTION_HOURS`` of 168, Mirage would analyze the data point against a week's worth of data points and the Saturday and Sunday daytime data points would have less probability of triggering as anomalous. *The above -image is plotted as if the Mirage ``SECOND_ORDER_RESOLUTION_HOURS`` was set to +image is plotted as if the Mirage* ``SECOND_ORDER_RESOLUTION_HOURS`` *was set to 172 hours just so that the trailing edges can be seen.* +A real world example with tenfold.com +------------------------------------- + +:blak3r2: Our app logs phone calls for businesses and I want to be able to + detect when VIP phone systems go down or act funny and begin flooding us with + events. Our work load is very noisy from 9-5pm... where 9-5 is different for + each customer depending on their workload so thresholding and modeling isn't + good. + +:earthgecko: Yes, Mirage is great at user defined seasonality, in your case + weekday 9-5 peaks, evening drop offs, early morning and weekend lows - multi + seasonal, Mirage is the ticket. + Your best bet would be to try 7days (168) as your SECOND_ORDER_RESOLUTION_HOURS + value for those app log metrics, however, you may get away with a 3 day + window, it depends on the metrics really, but it may not be noisy at 3 days + resolution, even at the weekends. + +Mirage "normalizes" +------------------- + Mirage is a "tuning" tool for seasonal metrics and it is important to understand that Mirage is probably using aggregated data (unless your Graphite is not using retentions and aggregating) and due to this Mirage will lose some resolution resulting in it being less sensitive to anomalies than Analyzer is. +So Mirage does some "normalizing" if your have aggregations in Graphite (e.g +retentions), however it is analyzing the timeseries at the aggregated resolution +so it is "normalised" as the data point that Analyzer triggered on is ALSO +aggregated in the timeseries resolution that Mirage is analyzing. +Intuitively one may think it may miss it in the aggregation then. This is true +to an extent, but Analyzer will likely trigger multiple times if the metric +**IS** anomalous, so when Analyzer pushes to Mirage again, each aggregation is +more likely to trigger as anomalous, **IF** the metric anomalous at the user +defined full duration. A little flattened maybe, a little lag maybe, but less +noise, more signal. + Setting up and enabling Mirage ============================== - By default Mirage is disabled, various Mirage options can be configured in the ``settings.py`` file and Analyzer and Mirage can be configured as appropriate for your environment. @@ -252,20 +264,76 @@ absolute path): .. code-block:: bash - sudo mkdir -p $MIRAGE_CHECK_PATH - sudo mkdir -p $MIRAGE_DATA_FOLDER + mkdir -p $MIRAGE_CHECK_PATH + mkdir -p $MIRAGE_DATA_FOLDER + + +Configure ``settings.py`` with some :mod:`settings.ALERTS` alert tuples that +have the ``SECOND_ORDER_RESOLUTION_HOURS`` defined. For example below is an +Analyzer only :mod:`settings.ALERTS` tuple that does not have Mirage enabled as +it has no ``SECOND_ORDER_RESOLUTION_HOURS`` defined: + +.. code-block:: python + + ALERTS = ( + ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> Analyzer sends to alerter + ) + +To enable Analyzer to send the metric to Mirage we append the metric alert tuple +in :mod:`settings.ALERTS` with the ``SECOND_ORDER_RESOLUTION_HOURS`` value. +Below we have used 168 hours to get Mirage to analyze **any** anomalous metric +in the "stats_counts.http.rpm.publishers.*" namespace using using 7 days worth +of timeseries data from Graphite: + +.. code-block:: python + + ALERTS = ( + # ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> Analyzer sends to alerter + ("stats_counts.http.rpm.publishers.*", "smtp", 300, 168), # --> Analyzer sends to Mirage + ) + +Order Matters +------------- + +.. warning:: It is important to note that Mirage enabled metric namespaces must + be defined before non Mirage enabled metric namespace tuples as Analyzer uses + the first alert tuple that matches. + +So for example, with some annotation + +.. code-block:: python + + ALERTS = ( + ("skyline", "smtp", 1800), + ("stats_counts.http.rpm.publishers.seasonal_pub1", "smtp", 300, 168), # --> To Mirage + ("stats_counts.http.rpm.publishers.seasonal_pub_freddy", "smtp", 300, 168), # --> To Mirage + ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> To alerter + ) +The above would ensure if Analyzer found seasonal_pub1 or seasonal_pub_freddy +anomalous, instead of firing an alert as it does for all other +``stats_counts.http.rpm.publishers.*``, because they have 168 defined, Analyzer +sends the metric to Mirage. -Configure ``settings.py`` with some alert tuples that have the -``SECOND_ORDER_RESOLUTION_HOURS`` defined, e.g.: +The below would NOT have the desired effect of analysing the metrics +seasonal_pub1 and seasonal_pub_freddy with Mirage .. code-block:: python ALERTS = ( ("skyline", "smtp", 1800), - ("stats_counts.http.rpm.publishers.*", "smtp", 300, 168), + ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> To alerter + ("stats_counts.http.rpm.publishers.seasonal_pub1", "smtp", 300, 168), # --> NEVER gets reached + ("stats_counts.http.rpm.publishers.seasonal_pub_freddy", "smtp", 300, 168), # --> NEVER gets reached ) +Hopefully it is clear that the first ``stats_counts.http.rpm.publishers.*`` +alert tuple would route ALL to alerter and seasonal_pub1 and seasonal_pub_freddy +would never get sent to be analyzed by Mirage. + +Enabling +-------- + And ensure that ``settings.py`` has Mirage options enabled, specifically the basic ones: @@ -275,19 +343,16 @@ basic ones: ENABLE_FULL_DURATION_ALERTS = False MIRAGE_ENABLE_ALERTS = True -Start Mirage: +Start Mirage and restart Analyzer: .. code-block:: bash cd skyline/bin - sudo ./mirage.d start - + ./mirage.d start + ./analyzer.d restart -Mirage allows for testing of real time data and algorithms in parallel to -Analyzer allowing for comparisons of different timeseries and/or algorithms. -Mirage was inspired by Crucible and the desire to extend the temporal data pools -available to Analyzer in an attempt to handle seasonality better, reduce noise -and increase signal, specifically on seasonal metrics. +Rate limited +------------ Mirage is rate limited to analyze 30 metrics per minute, this is by design and desired. Surfacing data from Graphite and analyzing ~1000 data points in a @@ -300,6 +365,10 @@ signals would still be sent. What Mirage does ================ +- If Analyzer finds a metric to be anomalous at :mod:`settings.FULL_DURATION` + and the metric alert tuple has ``SECOND_ORDER_RESOLUTION_HOURS`` and + :mod:`settings.ENABLE_MIRAGE` is ``True``, Analyzer will push the metric + variables to the Mirage check file. - Mirage watches for added check files. - When a check is found, Mirage determines what the configured ``SECOND_ORDER_RESOLUTION_HOURS`` is for the metric from the tuple in diff --git a/docs/_build/html/_sources/overview.txt b/docs/_build/html/_sources/overview.txt index 9d59df18..d6703bec 100644 --- a/docs/_build/html/_sources/overview.txt +++ b/docs/_build/html/_sources/overview.txt @@ -96,7 +96,7 @@ Skyline uses to following technologies and libraries at its core: 4. **scipy** - `SciPy`_ Library - Fundamental library for scientific computing 5. **pandas** - `pandas`_ - Python Data Analysis Library 6. **mysql/mariadb** - a database - `MySQL`_ or `MariaDB`_ -7. **:red:`re`:brow:`brow`** - Skyline uses a modified port of Marian +7. :red:`re`:brow:`brow` - Skyline uses a modified port of Marian Steinbach's excellent `rebrow`_ .. _Etsy: https://www.etsy.com/ diff --git a/docs/_build/html/_sources/webapp.txt b/docs/_build/html/_sources/webapp.txt index abeee4ab..dcdb309a 100644 --- a/docs/_build/html/_sources/webapp.txt +++ b/docs/_build/html/_sources/webapp.txt @@ -29,7 +29,7 @@ A basic overview of the Webapp ============================== .. figure:: images/crucible/webapp/skyline.webapp.basic.overview.png - :alt: A simplified workflow of Skyline + :alt: A basic overview of the Webapp Deploying the Webapp diff --git a/docs/_build/html/installation.html b/docs/_build/html/installation.html index 6e60ca7a..9aad8693 100644 --- a/docs/_build/html/installation.html +++ b/docs/_build/html/installation.html @@ -254,11 +254,6 @@

Steps git clone https://github.com/earthgecko/skyline.git -
mkdir -p /opt/skyline/github
-cd /opt/skyline/github
-git clone https://github.com/earthgecko/skyline.git
-
-
  • Once again using the Python-2.7.12 virtualenv, install the requirements using the virtualenv pip, this can take a long time, the pandas install takes quite diff --git a/docs/_build/html/mirage-1.pdf b/docs/_build/html/mirage-1.pdf index 95f986550548f358e415a7fb3cf3e6aade17d07b..932c982a0c4e587dc0638ac7d5c223a9981bc10b 100644 GIT binary patch delta 37 tcmeygit*Db#trv;CbRmgPrm1)zFEij2_vV4fuW(1k%5uXW=a1@HUKW14O;*J delta 37 tcmeygit*Db#trv;CbRmgPrm1)zFEij2_vVuv4Nqbv4x@eW=a1@HUKYA4R8Pe diff --git a/docs/_build/html/mirage.html b/docs/_build/html/mirage.html index 7c22ea6b..3bda6272 100644 --- a/docs/_build/html/mirage.html +++ b/docs/_build/html/mirage.html @@ -96,12 +96,23 @@
  • Analyzer
  • Analyzer Optimizations
  • Mirage
      -
    • A real world example with tenfold.com
    • Boundary
    • @@ -170,62 +181,39 @@

      Mirage¶

      The Mirage service is responsible for analyzing selected timeseries at custom time ranges when a timeseries seasonality does not fit within -settings.FULL_DURATION.

      -

      The Mirage app allows for second order resolution analysis of metrics that -have a SECOND_ORDER_RESOLUTION_HOURS defined in their Analyzer alert tuple -settings.ALERTS setting.

      -

      Mirage is fed by Analyzer. -Mirage gets timeseries data from Graphite.

      +settings.FULL_DURATION. Mirage allows for testing of real time data +and algorithms in parallel to Analyzer. Mirage was inspired by Abe Stanway’s +Crucible and the desire to extend the temporal data pools available to Skyline +in an attempt to handle seasonality better, reduce noise and increase signal, +specifically on seasonal metrics.

      +
      +

      An overview of Mirage¶

      +
        +
      • Mirage is fed specific user defined metrics by Analyzer.
      • +
      • Mirage gets timeseries data for metrics from Graphite.
      • +
      • Mirage does not have its own ALERT settings it uses settings.ALERTS +just like Analyzer does.
      • +
      • Mirage also sends anomaly details to Panorama, like Analyzer does.
      • +
      +
      +An overview of Mirage +
      +

      Fullsize overview image for a clearer picture.

      +
      +

      Why Mirage?¶

      Analyzer’s settings.FULL_DURATION somewhat limits Analyzer’s usefulness for metrics that have a seasonality / periodicity that is greater than -settings.FULL_DURATION. Increasing settings.FULL_DURATION to -anything above 24 hours (86400) is not necessarily realistic or useful, because -the greater the settings.FULL_DURATION, the greater memory required for -Redis and the longer Skyline analyzer will take to run.

      -

      Mirage uses the user-defined seasonality for a metric -(SECOND_ORDER_RESOLUTION_HOURS) and if Analyzer finds a metric to be -anomalous at settings.FULL_DURATION and the metric alert tuple has -SECOND_ORDER_RESOLUTION_HOURS and settings.ENABLE_MIRAGE is True, -Analyzer will push the metric variables to the Mirage check file for Mirage to -surface the metric’s timeseries at its defined seasonality, in real time from -Graphite in json format and then analyze the timeseries to determine if the -datapoint that triggered analyzer, is anomalous at the metric’s true -seasonality.

      -
      -

      A real world example with tenfold.com¶

      - --- - - - - - -
      blak3r2:Our app logs phone calls for businesses and I want to be able to -detect when VIP phone systems go down or act funny and begin flooding us with -events. Our work load is very noisy from 9-5pm... where 9-5 is different for -each customer depending on their workload so thresholding and modeling isn’t -good.
      earthgecko:Yes, Mirage is great at user defined seasonality, in your case -weekday 9-5 peaks, evening drop offs, early morning and weekend lows - multi -seasonal, Mirage is the ticket. -Your best bet would be to try 7days (168) as your SECOND_ORDER_RESOLUTION_HOURS -value for those app log metrics, however, you may get away with a 3 day -window, it depends on the metrics really, but it may not be noisy at 3 days -resolution, even at the weekends. -Also bear in mind, Mirage does some “normalizing” if your have aggregations -in Graphite (e.g retentions), due to Mirage probably pulling aggregated data, -however it is analyzing the timeseries at the aggregated resolution so it is -“normalised” as the data point that Analyzer triggered on is ALSO aggregated -in that timeseries resolution. So intuitively on may think it may miss it in -the aggregation then. True, but Analyzer will likely trigger on the next run -again if it IS anomalous, anomalous metrics normally trigger multiple, -multiple times (hence the EXPIRATION_TIME settings), so when Analyzer pushes -to Mirage again, each aggregation is more likely to trigger anomalous, IF it -is anomalous at the user defined full duration. A little flattened maybe, a -little lag maybe, but less noise, more signal.
      +settings.FULL_DURATION. This means Analyzer is not great in terms of +“seeing the bigger picture” when it comes to metrics that have a weekly pattern +as well as a daily patterns for example.

      +

      Increasing settings.FULL_DURATION to anything above 24 hours (86400) is +not necessarily realistic or useful, because the greater the +settings.FULL_DURATION, the greater memory required for Redis and the +longer Analyzer will take to run.

      +
      +
      -

      What Mirage can and cannot do¶

      +

      What Mirage can and cannot do¶

      It is important to know that Mirage is not necessarily suited to making highly variable metrics less noisy e.g. spikey metrics.

      Mirage is more useful on fairly constant rate metrics which contain known @@ -244,6 +232,8 @@

      What Mirage can and cannot do +

      The difference between the Analyzer and Mirage views of a timeseries¶

      (Source code, png, hires.png, pdf)

      _images/mirage-1.png @@ -251,38 +241,124 @@

      What Mirage can and cannot doFullsize image for a clearer picture.

      As we can see above, on a Saturday morning the energy consumption does not increase as it normally does during the week days. Analyzer would probably find -the metric to be anomalous if settings.ANALYZER_CRUCIBLE_ENABLED was set -to 86400 (24 hours), Saturday morning would seem anomalous.

      +the metric to be anomalous if settings.FULL_DURATION was set to 86400 (24 +hours), Saturday morning would seem anomalous.

      However, if the metric’s alert tuple was set up with a SECOND_ORDER_RESOLUTION_HOURS of 168, Mirage would analyze the data point against a week’s worth of data points and the Saturday and Sunday daytime data points would have less probability of triggering as anomalous. The above -image is plotted as if the Mirage ``SECOND_ORDER_RESOLUTION_HOURS`` was set to +image is plotted as if the Mirage SECOND_ORDER_RESOLUTION_HOURS was set to 172 hours just so that the trailing edges can be seen.

      +

      +
      +

      A real world example with tenfold.com¶

      + +++ + + + + + +
      blak3r2:Our app logs phone calls for businesses and I want to be able to +detect when VIP phone systems go down or act funny and begin flooding us with +events. Our work load is very noisy from 9-5pm... where 9-5 is different for +each customer depending on their workload so thresholding and modeling isn’t +good.
      earthgecko:Yes, Mirage is great at user defined seasonality, in your case +weekday 9-5 peaks, evening drop offs, early morning and weekend lows - multi +seasonal, Mirage is the ticket. +Your best bet would be to try 7days (168) as your SECOND_ORDER_RESOLUTION_HOURS +value for those app log metrics, however, you may get away with a 3 day +window, it depends on the metrics really, but it may not be noisy at 3 days +resolution, even at the weekends.
      +
      +
      +

      Mirage “normalizes”¶

      Mirage is a “tuning” tool for seasonal metrics and it is important to understand that Mirage is probably using aggregated data (unless your Graphite is not using retentions and aggregating) and due to this Mirage will lose some resolution resulting in it being less sensitive to anomalies than Analyzer is.

      +

      So Mirage does some “normalizing” if your have aggregations in Graphite (e.g +retentions), however it is analyzing the timeseries at the aggregated resolution +so it is “normalised” as the data point that Analyzer triggered on is ALSO +aggregated in the timeseries resolution that Mirage is analyzing. +Intuitively one may think it may miss it in the aggregation then. This is true +to an extent, but Analyzer will likely trigger multiple times if the metric +IS anomalous, so when Analyzer pushes to Mirage again, each aggregation is +more likely to trigger as anomalous, IF the metric anomalous at the user +defined full duration. A little flattened maybe, a little lag maybe, but less +noise, more signal.

      +

      -

      Setting up and enabling Mirage¶

      +

      Setting up and enabling Mirage¶

      By default Mirage is disabled, various Mirage options can be configured in the settings.py file and Analyzer and Mirage can be configured as appropriate for your environment.

      Mirage requires some directories as per settings.py defines (these require absolute path):

      -
      sudo mkdir -p $MIRAGE_CHECK_PATH
      -sudo mkdir -p $MIRAGE_DATA_FOLDER
      +
      mkdir -p $MIRAGE_CHECK_PATH
      +mkdir -p $MIRAGE_DATA_FOLDER
       
      -

      Configure settings.py with some alert tuples that have the -SECOND_ORDER_RESOLUTION_HOURS defined, e.g.:

      +

      Configure settings.py with some settings.ALERTS alert tuples that +have the SECOND_ORDER_RESOLUTION_HOURS defined. For example below is an +Analyzer only settings.ALERTS tuple that does not have Mirage enabled as +it has no SECOND_ORDER_RESOLUTION_HOURS defined:

      +
      ALERTS = (
      +           ("stats_counts.http.rpm.publishers.*", "smtp", 300),  # --> Analyzer sends to alerter
      +)
      +
      +
      +

      To enable Analyzer to send the metric to Mirage we append the metric alert tuple +in settings.ALERTS with the SECOND_ORDER_RESOLUTION_HOURS value. +Below we have used 168 hours to get Mirage to analyze any anomalous metric +in the “stats_counts.http.rpm.publishers.*” namespace using using 7 days worth +of timeseries data from Graphite:

      +
      ALERTS = (
      +#          ("stats_counts.http.rpm.publishers.*", "smtp", 300),  # --> Analyzer sends to alerter
      +           ("stats_counts.http.rpm.publishers.*", "smtp", 300, 168),  # --> Analyzer sends to Mirage
      +)
      +
      +
      +
      +

      Order Matters¶

      +
      +

      Warning

      +

      It is important to note that Mirage enabled metric namespaces must +be defined before non Mirage enabled metric namespace tuples as Analyzer uses +the first alert tuple that matches.

      +
      +

      So for example, with some annotation

      ALERTS = (
                  ("skyline", "smtp", 1800),
      -           ("stats_counts.http.rpm.publishers.*", "smtp", 300, 168),
      +           ("stats_counts.http.rpm.publishers.seasonal_pub1", "smtp", 300, 168),    # --> To Mirage
      +           ("stats_counts.http.rpm.publishers.seasonal_pub_freddy", "smtp", 300, 168),    # --> To Mirage
      +           ("stats_counts.http.rpm.publishers.*", "smtp", 300),    # --> To alerter
       )
       
      +

      The above would ensure if Analyzer found seasonal_pub1 or seasonal_pub_freddy +anomalous, instead of firing an alert as it does for all other +stats_counts.http.rpm.publishers.*, because they have 168 defined, Analyzer +sends the metric to Mirage.

      +

      The below would NOT have the desired effect of analysing the metrics +seasonal_pub1 and seasonal_pub_freddy with Mirage

      +
      ALERTS = (
      +           ("skyline", "smtp", 1800),
      +           ("stats_counts.http.rpm.publishers.*", "smtp", 300),    # --> To alerter
      +           ("stats_counts.http.rpm.publishers.seasonal_pub1", "smtp", 300, 168),    # --> NEVER gets reached
      +           ("stats_counts.http.rpm.publishers.seasonal_pub_freddy", "smtp", 300, 168),    # --> NEVER gets reached
      +)
      +
      +
      +

      Hopefully it is clear that the first stats_counts.http.rpm.publishers.* +alert tuple would route ALL to alerter and seasonal_pub1 and seasonal_pub_freddy +would never get sent to be analyzed by Mirage.

      +
      + +
      +

      Rate limited¶

      Mirage is rate limited to analyze 30 metrics per minute, this is by design and desired. Surfacing data from Graphite and analyzing ~1000 data points in a timeseries takes less than 1 second and is much less CPU intensive than @@ -308,9 +383,14 @@

      Setting up and enabling Miragesettings.MIRAGE_STALE_SECONDS checks due to processing limit, signals would still be sent.

      +
      -

      What Mirage does¶

      +

      What Mirage does¶

        +
      • If Analyzer finds a metric to be anomalous at settings.FULL_DURATION +and the metric alert tuple has SECOND_ORDER_RESOLUTION_HOURS and +settings.ENABLE_MIRAGE is True, Analyzer will push the metric +variables to the Mirage check file.
      • Mirage watches for added check files.
      • When a check is found, Mirage determines what the configured SECOND_ORDER_RESOLUTION_HOURS is for the metric from the tuple in @@ -324,7 +404,6 @@

        What Mirage doesEXPIRATION_TIME seconds.

      -
      diff --git a/docs/_build/html/overview.html b/docs/_build/html/overview.html index 5d9a1261..cbf2f095 100644 --- a/docs/_build/html/overview.html +++ b/docs/_build/html/overview.html @@ -250,7 +250,7 @@

      The architecture in a nutshellSciPy Library - Fundamental library for scientific computing
    • pandas - pandas - Python Data Analysis Library
    • mysql/mariadb - a database - MySQL or MariaDB
    • -
    • :red:`re`:brow:`brow` - Skyline uses a modified port of Marian +
    • rebrow - Skyline uses a modified port of Marian Steinbach’s excellent rebrow
    • diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index c66f4cba..6ac663b1 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["alert-testing","analyzer","analyzer-optimizations","boundary","building-documentation","crucible","debian-and-vagrant-installation-tips","development/index","development/webapp","getting-data-into-skyline","getting-started","horizon","index","installation","logging","mirage","modules","monitoring-skyline","overview","panorama","redis-integration","releases","releases/1_0_0","releases/1_0_1","releases/1_0_2","releases/1_0_3","requirements","roadmap","running-in-python-virtualenv","skyline","skyline-and-friends","skyline.analyzer","skyline.analyzer_dev","skyline.boundary","skyline.crucible","skyline.horizon","skyline.mirage","skyline.panorama","skyline.webapp","tuning-tips","upgrading","webapp","whats-new"],objects:{"":{algorithm_exceptions:[29,0,0,"-"],analyzer:[31,0,0,"-"],analyzer_dev:[32,0,0,"-"],boundary:[33,0,0,"-"],crucible:[34,0,0,"-"],horizon:[35,0,0,"-"],mirage:[36,0,0,"-"],panorama:[37,0,0,"-"],settings:[29,0,0,"-"],skyline:[29,0,0,"-"],skyline_functions:[29,0,0,"-"],skyline_version:[29,0,0,"-"],webapp:[38,0,0,"-"]},"analyzer.agent":{AnalyzerAgent:[31,2,1,""],run:[31,4,1,""]},"analyzer.agent.AnalyzerAgent":{run:[31,3,1,""]},"analyzer.alerters":{alert_hipchat:[31,4,1,""],alert_pagerduty:[31,4,1,""],alert_smtp:[31,4,1,""],alert_syslog:[31,4,1,""],skyline_version:[31,5,1,""],trigger_alert:[31,4,1,""]},"analyzer.algorithms":{determine_median:[31,4,1,""],first_hour_average:[31,4,1,""],get_function_name:[31,4,1,""],grubbs:[31,4,1,""],histogram_bins:[31,4,1,""],is_anomalously_anomalous:[31,4,1,""],ks_test:[31,4,1,""],least_squares:[31,4,1,""],mean_subtraction_cumulation:[31,4,1,""],median_absolute_deviation:[31,4,1,""],record_algorithm_error:[31,4,1,""],run_selected_algorithm:[31,4,1,""],stddev_from_average:[31,4,1,""],stddev_from_moving_average:[31,4,1,""],tail_avg:[31,4,1,""]},"analyzer.analyzer":{Analyzer:[31,2,1,""]},"analyzer.analyzer.Analyzer":{check_if_parent_is_alive:[31,3,1,""],run:[31,3,1,""],spin_process:[31,3,1,""]},"analyzer_dev.agent":{AnalyzerAgent:[32,2,1,""],run:[32,4,1,""]},"analyzer_dev.agent.AnalyzerAgent":{run:[32,3,1,""]},"analyzer_dev.alerters":{alert_hipchat:[32,4,1,""],alert_pagerduty:[32,4,1,""],alert_smtp:[32,4,1,""],alert_syslog:[32,4,1,""],trigger_alert:[32,4,1,""]},"analyzer_dev.algorithms_dev":{determine_median:[32,4,1,""],first_hour_average:[32,4,1,""],get_function_name:[32,4,1,""],grubbs:[32,4,1,""],histogram_bins:[32,4,1,""],is_anomalously_anomalous:[32,4,1,""],ks_test:[32,4,1,""],least_squares:[32,4,1,""],mean_subtraction_cumulation:[32,4,1,""],median_absolute_deviation:[32,4,1,""],run_selected_algorithm:[32,4,1,""],stddev_from_average:[32,4,1,""],stddev_from_moving_average:[32,4,1,""],tail_avg:[32,4,1,""]},"analyzer_dev.analyzer_dev":{Analyzer:[32,2,1,""]},"analyzer_dev.analyzer_dev.Analyzer":{check_if_parent_is_alive:[32,3,1,""],run:[32,3,1,""],send_graphite_metric:[32,3,1,""],spin_process:[32,3,1,""]},"boundary.agent":{BoundaryAgent:[33,2,1,""],run:[33,4,1,""]},"boundary.agent.BoundaryAgent":{run:[33,3,1,""]},"boundary.boundary":{Boundary:[33,2,1,""]},"boundary.boundary.Boundary":{check_if_parent_is_alive:[33,3,1,""],mkdir_p:[33,3,1,""],run:[33,3,1,""],spin_process:[33,3,1,""],unique_noHash:[33,3,1,""]},"boundary.boundary_alerters":{alert_hipchat:[33,4,1,""],alert_pagerduty:[33,4,1,""],alert_smtp:[33,4,1,""],alert_syslog:[33,4,1,""],trigger_alert:[33,4,1,""]},"boundary.boundary_algorithms":{autoaggregate_ts:[33,4,1,""],boundary_no_mans_land:[33,4,1,""],detect_drop_off_cliff:[33,4,1,""],greater_than:[33,4,1,""],less_than:[33,4,1,""],run_selected_algorithm:[33,4,1,""]},"crucible.agent":{CrucibleAgent:[34,2,1,""],run:[34,4,1,""]},"crucible.agent.CrucibleAgent":{run:[34,3,1,""]},"crucible.crucible":{Crucible:[34,2,1,""]},"crucible.crucible.Crucible":{check_if_parent_is_alive:[34,3,1,""],run:[34,3,1,""],spin_process:[34,3,1,""]},"crucible.crucible_algorithms":{detect_drop_off_cliff:[34,4,1,""],first_hour_average:[34,4,1,""],grubbs:[34,4,1,""],histogram_bins:[34,4,1,""],ks_test:[34,4,1,""],least_squares:[34,4,1,""],mean_subtraction_cumulation:[34,4,1,""],median_absolute_deviation:[34,4,1,""],python_version:[34,5,1,""],run_algorithms:[34,4,1,""],stddev_from_average:[34,4,1,""],stddev_from_moving_average:[34,4,1,""],tail_avg:[34,4,1,""]},"horizon.agent":{Horizon:[35,2,1,""],run:[35,4,1,""]},"horizon.agent.Horizon":{run:[35,3,1,""]},"horizon.listen":{Listen:[35,2,1,""],SafeUnpickler:[35,2,1,""]},"horizon.listen.Listen":{check_if_parent_is_alive:[35,3,1,""],gen_unpickle:[35,3,1,""],listen_pickle:[35,3,1,""],listen_udp:[35,3,1,""],read_all:[35,3,1,""],run:[35,3,1,""]},"horizon.listen.SafeUnpickler":{PICKLE_SAFE:[35,6,1,""],find_class:[35,7,1,""],loads:[35,7,1,""]},"horizon.roomba":{Roomba:[35,2,1,""]},"horizon.roomba.Roomba":{check_if_parent_is_alive:[35,3,1,""],run:[35,3,1,""],vacuum:[35,3,1,""]},"horizon.worker":{Worker:[35,2,1,""]},"horizon.worker.Worker":{check_if_parent_is_alive:[35,3,1,""],in_skip_list:[35,3,1,""],run:[35,3,1,""]},"mirage.agent":{MirageAgent:[36,2,1,""],run:[36,4,1,""]},"mirage.agent.MirageAgent":{run:[36,3,1,""]},"mirage.mirage":{Mirage:[36,2,1,""]},"mirage.mirage.Mirage":{check_if_parent_is_alive:[36,3,1,""],load_metric_vars:[36,3,1,""],mkdir_p:[36,3,1,""],run:[36,3,1,""],spin_process:[36,3,1,""],surface_graphite_metric_data:[36,3,1,""]},"mirage.mirage_alerters":{alert_hipchat:[36,4,1,""],alert_pagerduty:[36,4,1,""],alert_smtp:[36,4,1,""],alert_syslog:[36,4,1,""],trigger_alert:[36,4,1,""]},"mirage.mirage_algorithms":{determine_median:[36,4,1,""],first_hour_average:[36,4,1,""],get_function_name:[36,4,1,""],grubbs:[36,4,1,""],histogram_bins:[36,4,1,""],is_anomalously_anomalous:[36,4,1,""],ks_test:[36,4,1,""],least_squares:[36,4,1,""],logger:[36,5,1,""],mean_subtraction_cumulation:[36,4,1,""],median_absolute_deviation:[36,4,1,""],record_algorithm_error:[36,4,1,""],run_selected_algorithm:[36,4,1,""],stddev_from_average:[36,4,1,""],stddev_from_moving_average:[36,4,1,""],tail_avg:[36,4,1,""]},"mirage.negaters":{negate_analyzer_alert:[36,4,1,""],negate_hipchat:[36,4,1,""],negate_syslog:[36,4,1,""],trigger_negater:[36,4,1,""]},"panorama.agent":{PanoramaAgent:[37,2,1,""]},"panorama.agent.PanoramaAgent":{run:[37,3,1,""]},"panorama.panorama":{Panorama:[37,2,1,""]},"panorama.panorama.Panorama":{check_if_parent_is_alive:[37,3,1,""],mysql_insert:[37,3,1,""],mysql_select:[37,3,1,""],run:[37,3,1,""],spin_process:[37,3,1,""]},"webapp.backend":{get_list:[38,4,1,""],panorama_request:[38,4,1,""]},"webapp.webapp":{App:[38,2,1,""],anomalies:[38,4,1,""],app_settings:[38,4,1,""],authenticate:[38,4,1,""],check_auth:[38,4,1,""],crucible:[38,4,1,""],data:[38,4,1,""],docs:[38,4,1,""],index:[38,4,1,""],limit_remote_addr:[38,4,1,""],now:[38,4,1,""],panorama:[38,4,1,""],panorama_anomalies:[38,4,1,""],rebrow:[38,4,1,""],rebrow_key:[38,4,1,""],rebrow_keys:[38,4,1,""],rebrow_server_db:[38,4,1,""],requires_auth:[38,4,1,""],run:[38,4,1,""],urlsafe_base64_encode:[38,4,1,""],version:[38,4,1,""]},"webapp.webapp.App":{run:[38,3,1,""]},algorithm_exceptions:{Boring:[29,1,1,""],Stale:[29,1,1,""],TooShort:[29,1,1,""]},analyzer:{agent:[31,0,0,"-"],alerters:[31,0,0,"-"],algorithms:[31,0,0,"-"],analyzer:[31,0,0,"-"]},analyzer_dev:{agent:[32,0,0,"-"],alerters:[32,0,0,"-"],algorithms_dev:[32,0,0,"-"],analyzer_dev:[32,0,0,"-"]},boundary:{agent:[33,0,0,"-"],boundary:[33,0,0,"-"],boundary_alerters:[33,0,0,"-"],boundary_algorithms:[33,0,0,"-"]},crucible:{agent:[34,0,0,"-"],crucible:[34,0,0,"-"],crucible_algorithms:[34,0,0,"-"]},horizon:{agent:[35,0,0,"-"],listen:[35,0,0,"-"],roomba:[35,0,0,"-"],worker:[35,0,0,"-"]},mirage:{agent:[36,0,0,"-"],mirage:[36,0,0,"-"],mirage_alerters:[36,0,0,"-"],mirage_algorithms:[36,0,0,"-"],negaters:[36,0,0,"-"]},panorama:{agent:[37,0,0,"-"],panorama:[37,0,0,"-"]},settings:{ALERTERS_SETTINGS:[29,5,1,""],ALERTS:[29,5,1,""],ALGORITHMS:[29,5,1,""],ANALYZER_CRUCIBLE_ENABLED:[29,5,1,""],ANALYZER_OPTIMUM_RUN_DURATION:[29,5,1,""],ANALYZER_PROCESSES:[29,5,1,""],ANOMALY_DUMP:[29,5,1,""],BOREDOM_SET_SIZE:[29,5,1,""],BOUNDARY_ALERTER_OPTS:[29,5,1,""],BOUNDARY_ALGORITHMS:[29,5,1,""],BOUNDARY_AUTOAGGRERATION:[29,5,1,""],BOUNDARY_AUTOAGGRERATION_METRICS:[29,5,1,""],BOUNDARY_CRUCIBLE_ENABLED:[29,5,1,""],BOUNDARY_ENABLE_ALERTS:[29,5,1,""],BOUNDARY_HIPCHAT_OPTS:[29,5,1,""],BOUNDARY_METRICS:[29,5,1,""],BOUNDARY_OPTIMUM_RUN_DURATION:[29,5,1,""],BOUNDARY_PAGERDUTY_OPTS:[29,5,1,""],BOUNDARY_PROCESSES:[29,5,1,""],BOUNDARY_SMTP_OPTS:[29,5,1,""],CANARY_METRIC:[29,5,1,""],CARBON_PORT:[29,5,1,""],CHUNK_SIZE:[29,5,1,""],CONSENSUS:[29,5,1,""],CRUCIBLE_CHECK_PATH:[29,5,1,""],CRUCIBLE_DATA_FOLDER:[29,5,1,""],CRUCIBLE_PROCESSES:[29,5,1,""],CRUCIBLE_TESTS_TIMEOUT:[29,5,1,""],ENABLE_ALERTS:[29,5,1,""],ENABLE_ALGORITHM_RUN_METRICS:[29,5,1,""],ENABLE_ALL_ALGORITHMS_RUN_METRICS:[29,5,1,""],ENABLE_BOUNDARY_DEBUG:[29,5,1,""],ENABLE_CRUCIBLE:[29,5,1,""],ENABLE_CRUCIBLE_DEBUG:[29,5,1,""],ENABLE_DEBUG:[29,5,1,""],ENABLE_FULL_DURATION_ALERTS:[29,5,1,""],ENABLE_MIRAGE:[29,5,1,""],ENABLE_PANORAMA_DEBUG:[29,5,1,""],ENABLE_SECOND_ORDER:[29,5,1,""],FULL_DURATION:[29,5,1,""],FULL_NAMESPACE:[29,5,1,""],GRAPHITE_CONNECT_TIMEOUT:[29,5,1,""],GRAPHITE_GRAPH_SETTINGS:[29,5,1,""],GRAPHITE_HOST:[29,5,1,""],GRAPHITE_PORT:[29,5,1,""],GRAPHITE_PROTOCOL:[29,5,1,""],GRAPHITE_READ_TIMEOUT:[29,5,1,""],GRAPHITE_SOURCE:[29,5,1,""],GRAPH_URL:[29,5,1,""],HIPCHAT_ENABLED:[29,5,1,""],HIPCHAT_OPTS:[29,5,1,""],HORIZON_IP:[29,5,1,""],LOG_PATH:[29,5,1,""],MAX_ANALYZER_PROCESS_RUNTIME:[29,5,1,""],MAX_QUEUE_SIZE:[29,5,1,""],MAX_RESOLUTION:[29,5,1,""],MAX_TOLERABLE_BOREDOM:[29,5,1,""],MINI_DURATION:[29,5,1,""],MINI_NAMESPACE:[29,5,1,""],MIN_TOLERABLE_LENGTH:[29,5,1,""],MIRAGE_ALGORITHMS:[29,5,1,""],MIRAGE_CHECK_PATH:[29,5,1,""],MIRAGE_CONSENSUS:[29,5,1,""],MIRAGE_CRUCIBLE_ENABLED:[29,5,1,""],MIRAGE_DATA_FOLDER:[29,5,1,""],MIRAGE_ENABLE_ALERTS:[29,5,1,""],MIRAGE_ENABLE_SECOND_ORDER:[29,5,1,""],MIRAGE_STALE_SECONDS:[29,5,1,""],NEGATE_ANALYZER_ALERTS:[29,5,1,""],NUMBER_OF_ANOMALIES_TO_STORE_IN_PANORAMA:[29,5,1,""],OCULUS_HOST:[29,5,1,""],PAGERDUTY_ENABLED:[29,5,1,""],PAGERDUTY_OPTS:[29,5,1,""],PANDAS_VERSION:[29,5,1,""],PANORAMA_CHECK_PATH:[29,5,1,""],PANORAMA_DATABASE:[29,5,1,""],PANORAMA_DBHOST:[29,5,1,""],PANORAMA_DBPORT:[29,5,1,""],PANORAMA_DBUSER:[29,5,1,""],PANORAMA_DBUSERPASS:[29,5,1,""],PANORAMA_ENABLED:[29,5,1,""],PANORAMA_EXPIRY_TIME:[29,5,1,""],PANORAMA_PROCESSES:[29,5,1,""],PICKLE_PORT:[29,5,1,""],PID_PATH:[29,5,1,""],PLOT_REDIS_DATA:[29,5,1,""],REDIS_SOCKET_PATH:[29,5,1,""],ROOMBA_GRACE_TIME:[29,5,1,""],ROOMBA_PROCESSES:[29,5,1,""],ROOMBA_TIMEOUT:[29,5,1,""],RUN_OPTIMIZED_WORKFLOW:[29,5,1,""],SERVER_METRICS_NAME:[29,5,1,""],SKIP_LIST:[29,5,1,""],SKYLINE_TMP_DIR:[29,5,1,""],SLACK_ENABLED:[29,5,1,""],SMTP_OPTS:[29,5,1,""],STALE_PERIOD:[29,5,1,""],SYSLOG_ENABLED:[29,5,1,""],SYSLOG_OPTS:[29,5,1,""],TARGET_HOURS:[29,5,1,""],UDP_PORT:[29,5,1,""],WEBAPP_ALLOWED_IPS:[29,5,1,""],WEBAPP_AUTH_ENABLED:[29,5,1,""],WEBAPP_AUTH_USER:[29,5,1,""],WEBAPP_AUTH_USER_PASSWORD:[29,5,1,""],WEBAPP_FIXED_TIMEZONE:[29,5,1,""],WEBAPP_IP:[29,5,1,""],WEBAPP_IP_RESTRICTED:[29,5,1,""],WEBAPP_JAVASCRIPT_DEBUG:[29,5,1,""],WEBAPP_PORT:[29,5,1,""],WEBAPP_SERVER:[29,5,1,""],WEBAPP_USER_TIMEZONE:[29,5,1,""],WORKER_PROCESSES:[29,5,1,""]},skyline_functions:{alert_expiry_check:[29,4,1,""],fail_check:[29,4,1,""],get_graphite_metric:[29,4,1,""],load_metric_vars:[29,4,1,""],mkdir_p:[29,4,1,""],mysql_select:[29,4,1,""],send_graphite_metric:[29,4,1,""],write_data_to_file:[29,4,1,""]},webapp:{backend:[38,0,0,"-"],gunicorn:[38,0,0,"-"],webapp:[38,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","exception","Python exception"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","function","Python function"],"5":["py","data","Python data"],"6":["py","attribute","Python attribute"],"7":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:exception","2":"py:class","3":"py:method","4":"py:function","5":"py:data","6":"py:attribute","7":"py:classmethod"},terms:{"123_234_213_123":17,"22m":14,"250k":[1,39],"2nd":27,"38m":14,"3rd":29,"3sigma":[23,29],"40g":14,"4gb":[1,2,13,39],"52m":14,"5pm":15,"6d42998cfec6e85b902d4ffa5a35ce86":13,"70k":[1,39],"7dai":15,"7hour":29,"96g":14,"__builtin__":35,"__pycache__":4,"_build":[4,22],"_markerlib":28,"_reconstructor":35,"boolean":[1,29,31,33,34,36,37,38],"break":[3,40],"byte":35,"case":[2,10,15,25,29,42],"class":[13,31,32,33,34,35,36,37,38],"default":[0,1,2,5,6,9,10,13,14,15,19,29,40],"float":2,"function":[4,7,8,9,26,27,28,29,31,32,33,34,36,38,40],"import":[4,9,14,15,19,22,29,30,42],"int":[29,37],"long":[1,8,9,11,13,14,17,20,28,29,30,33,34,36,39],"new":[1,2,8,9,12,13,14],"public":[15,41],"return":[1,3,4,13,24,26,29,31,32,33,34,36,37,38,40,41],"short":[1,9,31,32,34,36],"static":[18,22,29,42],"super":[31,36],"switch":[9,20],"transient":5,"true":[0,1,2,3,9,13,14,15,26,29,31,34,36,37],"try":[10,14,15,18,26,29,39],"var":[13,14,29,40],"while":[3,5,13],abe:[5,18],abil:[2,3,5,27,29],abl:[1,2,6,9,10,13,15,19,20,22,26,27,29,30],about:[1,2,3,9,10,14,23,27,31,32,39],abov:[2,10,15,27,28,29,40],abovement:14,absolut:[15,29,31,32,34,36],abspath:4,accept:[9,10],access:[9,13,19,29],accid:41,accommod:[1,22,40],accord:[6,24],accrur:42,accumul:29,accur:[3,29],accuraci:[9,27],achiev:[2,4,14,22,29],across:3,act:15,activ:[0,13,18],actual:[1,18],ad_request:27,add:[1,2,3,5,6,9],added:[23,24,25],added_bi:29,addit:[1,2,3,5,8,18,20,22,23,27,29,40,41],address:[13,29,38,41,42],adhoc:5,adjust:26,admin:[13,29],adopt:[26,28],adtech:27,advantag:17,advertis:[27,39],advis:[1,10,29],aec9ffb075f9443c8e8f23c4f2d06faa:29,affect:40,after:[2,6,9,10,13,29,31,32,34,36,40],again:[0,2,9,13,14,15,28,29,40],against:[1,2,3,15,29,31,32,39,41],agent:[9,16,29],aggreg:[1,3,5,15,29,33,41],aggregation_value:29,ago:[29,31,32,34,36],agre:1,aid:27,aim:[5,29],alert_expiry_check:29,alert_hipchat:[31,32,33,36],alert_pagerduti:[31,32,33,36],alert_smtp:[31,32,33,36],alert_syslog:[31,32,33,36],alert_threshold:[3,29,33],alert_vias:[3,29],alerter:29,alerter_expiration_tim:29,alerter_limit:29,alerters_settings:29,alerts:0,algorithm1:29,algorithm2:29,algorithm_breakdown:2,algorithm_error_fil:[31,36],algorithm_except:16,algorithm_nam:[29,31,36],algorithma:5,algorithms:[1,2,29,31,32,34],algorithms_dev:[16,29],algoritm:[29,31,36],aliv:34,all:[1,2,3,4,6,9,10,11,13,18,19,20,28,29,31,32,34,36,38,39,40,41,42],allow:[3,4,5,10,15,19,22,27,28,29,39,41,42],almost:[2,3],alogrithm:[3,5],along:2,alot:29,alphabet:27,alreadi:[23,28],also:[1,2,3,5,9,11,15,20,23,29,30,31,32,34,36,41],alter:18,altern:20,although:[3,4,5,9,10,13,14,22,23,27,29,30,40,41,42],altinstal:28,amaz:27,america:29,amount:[5,11,22,29],an_important_th:29,analys:[1,3,5,15,27,29,31,32],analysi:[2,3,5,10,15,18,19,22,27,29,31,32,36,40],analyzer_crucible_enabled:[5,15,29],analyzer_dev:[2,16,29],analyzer_optimum_run_duration:[1,2,29,39],analyzer_processes:[1,2,29,31,32,39,40],analyzerag:[31,32],ani:[1,2,3,5,8,9,10,13,14,18,19,26,27,28,29,31,32,36,40,41,42],annot:23,anomal:[1,2,3,10,13,14,15,18,19,22,29,31,32,33,34,36,41],anomali:[5,9],anomalous_metr:[1,3,31,32],anomaly_breakdown_q:[31,32],anomaly_dump:29,anoth:[5,9,13,27,29,31,32,39,41],antirez:20,any:[14,29],anyon:[4,30],anyth:[9,15,29,31,33,34,36],anywai:[2,13,14],apach:13,api:41,apidoc:[4,22],apologi:40,app:5,app_dir:4,app_set:38,appdir:4,append:[4,11,20,22,29,35],appli:[2,27,31,32,34,36,42],applic:[2,5,6,13,14,17,18,23,24,26,27,29],approach:18,appropri:[1,8,10,13,15,19,20,28,40,42],approri:[31,32],apt:[6,13,28],arbitrari:[3,33,34],archiv:[5,27],arg:38,argpars:26,arguabl:8,argument:[4,5,31,32,38],aris:[9,29],around:[18,27,29,41],arrai:[23,27,29,38],aspect:30,asperc:27,assess:[9,27,40],assign:[1,2,3,29,31,32,33,34,36,37],assigned_metr:[1,29,31,32],associ:2,assum:[13,42],attempt:[3,9,15,41],augment:[31,32,34,36],auth:[29,38],auth_token:29,authent:[13,38,41],autoaggreg:[29,33],autoaggregate_t:[29,33],autoaggregate_valu:33,autoconf:28,autodoc:40,autodoc_mock_import:29,autogener:4,autom:10,automat:18,automodul:4,autonom:5,avail:[6,15,22,25,26,31],avenu:27,averag:[1,2,26,27,29,31,32,33,34,36,39],avg:2,awai:[2,10,13,15],awesom:4,axi:27,back:[6,19,27],backend:[16,29],backport:[6,26],backupcount:14,backward:[2,3,22,26,40,42],balanc:14,base64:38,base:[1,2,3,5,10,13,22,27,29,31,32,33,34,35,36,37,41],basehttpserv:41,baselin:9,bash:[14,17,26],basi:[5,18],basic:[1,15,22,25,29,38],batteri:1,battl:18,bear:[1,14,15,29],becaus:[1,3,4,8,15,26,29],becom:[3,9,10,29,33,34,42],been:[1,2,3,4,5,6,8,9,13,17,18,22,23,29,39,40,41,42],befor:[1,2,9,13,29,30,40],begin:[9,15,29],behavior:[9,41],behind:[5,41],believ:14,below:[2,4,10,14,22,28,40],benefit:40,best:[8,15,41,42],bet:15,beta:31,better:[10,15,18,31,32,34,36,42],between:[1,3,5,14,29,30,31,32],beyond:[3,27],bgcolor:29,big:29,bigger:39,bin:[0,3,11,13,14,15,19,28,31,32,34,36,40],binari:20,bind:[6,29],bit:[3,7,8,18,26,29,41],blah:37,blak3r2:[15,23,25],blob:[2,29],block:[3,5,9,18,29],blown:8,bolt:3,bore:[1,9,29],boredom_set_size:29,both:[1,4,29,31,32,38,41],bothersom:41,bound:[6,23,27,29],boundari:[1,2],boundary_alert:[16,29],boundary_alerter_opts:29,boundary_algorithm:[16,29],boundary_algorithms:[29,33],boundary_autoaggreration:29,boundary_autoaggreration_metrics:29,boundary_crucible_enabled:[5,29],boundary_enable_alerts:29,boundary_hipchat_opts:29,boundary_metr:33,boundary_metrics:[3,10,29],boundary_no_mans_land:33,boundary_optimum_run_duration:29,boundary_pagerduty_opts:29,boundary_processes:[3,29],boundary_smtp_opts:29,boundaryag:33,box:1,brain:1,branch:[2,5,21],breach:3,breakdown:42,bridg:[1,39],briefli:18,bring:[10,27,40],broken:14,brow:[13,18,41],brows:[18,41],browser:[22,24,29,38,41],buckl:39,bug:[23,24,42],build_doc:4,built:18,bump:[23,24,25],bunch:[31,32,33],burst:[1,39],busi:15,bzip2:28,c0c0c0:29,cach:[9,17],cache_kei:29,calcuat:[31,32,34,36],calcul:[1,27,29,31,32,34,36],call:[14,15,20,29,31,32,33,34,35,36,37,38,42],can:[1,2,3,4,5,6,8,9,10,11,13,14],canari:[29,35],canary_metric:[13,29],cannot:13,capabl:[5,27],capac:29,carbon:[9,17,29],carbon_port:29,carri:5,cat:[4,13],caus:[26,27,29,36,42],caveat:[2,26,42],cdn:13,cdnj:24,certain:[9,13,17,29,40],certainti:[10,22],cfg:25,chang:[1,2,3,4,5,6,13,22,23,24,25],channel:[3,10,29],cheap:14,check:[1,2,3],check_auth:38,check_file_to_fail:29,check_if_parent_is_al:[31,32,33,34,35,36,37],choic:[8,27],choos:[13,20,28],chunk:[29,35,39],chunk_size:[29,39],circumst:29,classifi:[1,29],classmethod:35,clean:[4,11,29,31,36],clear:1,clearer:[1,15,18],clearli:2,client:[29,38,41],cliff:[3,29,33,34],clock:41,clone:[6,13,19],cloud:[1,2,13,39,41],cloudflar:24,cluster:[10,23],code:[1,2,4,9,15,22,27],coexist:3,collat:[31,32],collect:[1,11,27,29],color:29,colourblind:29,column:27,com:[2,4,6,13],combin:38,come:[1,3,9,20,29,39],comment:[13,29,40],commit:[22,40,42],common:[13,15,41],commun:[18,26,28],compani:29,comparison:[15,29],compat:[2,22,26,28,42],compil:41,complain:26,complet:[13,29,31,36,40,42],complex:[2,10,41],complic:14,compon:13,comprehens:18,comput:[2,18],computation:[2,10],concept:[3,42],conceptu:[14,18],condit:[18,25,29],conf:[4,9,13,28,41],config:[6,29],configur:[0,1,2],configuration:6,connect:29,connector:13,connet:29,conquer:1,consensu:1,consensus:[1,2,3,18,29],consid:[10,13,15,24,29,41],consist:[11,29],consol:29,consolid:7,constant:[15,18],constantli:[2,18],consum:[10,15,29,39],consumpt:15,contain:[1,15,18,20,22,27,29,31,32,34,36,40],conten:14,content:[12,16],context:[1,5,14,28,29,41,42],continu:[14,18,19,27,29,42],control:[1,31,32,37],convent:5,convert:[27,41],cool:8,copi:[6,13,40],copy_reg:35,core:[1,18,39],correct:[1,4,13,22,23],correctli:[0,9],correl:27,cortic:27,cosin:27,cost:2,could:[3,4,5,14,15,22,27,29],coull:27,cours:[1,9],courtesi:27,cover:[40,41,42],coverag:40,cprofilev:2,cpu:[1,2,3,15,29],crash:9,crazi:29,creat:[4,5,10,13,14],creation:[19,41],crept:23,criteria:[2,41],critic:10,crond:17,crucibl:[1,2,3],crucible_algorithm:[16,29],crucible_check_path:29,crucible_data_folder:29,crucible_enabled:29,crucible_processes:29,crucible_tests_timeout:29,crucibleag:34,cube:27,cumul:[31,32,34,36],current:[1,2,3,4,7,8,9,11,18,20,22,23,24,29,40,41],current_skyline_app:29,curv:10,custom:[15,18,42],cut:11,cycl:[2,11],cycler:26,cython:27,d3j:24,daemon:[2,5,10,26],dai:[11,15,20,41],daili:15,danc:10,dashboard:13,data:[0,1,2,3,5],data_typ:29,databas:[3,5,13,18],datapoint:[2,3,9,15,20,27,29,31,32,33,34,35,36,39,41],dataset:29,date:[18,29,40,41],dateaccessorsutc:24,datetim:41,dateutil:26,daytim:15,deactiv:[0,13],deal:30,deb:6,debat:40,debug:[25,29],declar:[1,3,29],decod:1,decoupl:5,decreas:[2,9,29,39],dedic:2,dedup:11,deem:3,def:[31,32],defens:41,defin:[1,3,5,10,15,29,31,32,33,34,35,36],definit:[2,29],degre:[10,30],delai:[31,32,34,36],delet:35,demand:41,demonstr:15,depart:15,depend:[3,5],depict:1,deploi:[3,13,22,26],deploy:[2,12],deprec:26,depth:[10,41],deriv:1,describ:[14,30,40],descript:[13,18,27],design:[1,5,9,15,17,18,20,27],desir:[15,18,29,30,41],destin:[9,17],destinations:9,detail:[3,6,14,23,28,29,31,32,38,41],detect:3,determin:[1,2,3,4,15,17,27,29,31,32,33,34,35,36,37,38],determine_median:[23,31,32,36],dev:[6,25,28],devel:[25,28],develop:[2,4],development:29,deviat:[31,32,34,36],diagram:[4,23],dickei:[31,32,34,36],dictionari:29,did:[2,3,9,18,27],diff:40,differ:[1,2,3,7,10,13,15,18,22,29,31,32,34,36,41,42],difficult:[10,17,18,27,42],diffseri:27,dimens:[3,27],dimension:27,dir:[4,29],direct:[13,30],directli:[10,13],directori:[4,5,13,15,22,29,34],disabl:[1,5,15,29,39],discard:[15,29],discov:[31,32],disk:[5,10,14,29],displai:[6,20,29,41],distant:10,distinct:[1,39],distribut:[26,28,29,31,32,34,36],divid:[1,3,31,32],django:8,doc:[4,9,22,23,25,38,41,42],docstr:[3,13,40],document:[0,1],domain:27,don:[6,9,29],done:[2,3,4,29],down:[9,11,15,29,30],download:13,downsid:20,dramat:[2,39],drift:9,drop:[3,8,15,17,27,29,33,34],dropbox:6,due:[2,7,13,14,15,26,27,28,29,40,41],dump:[13,29],duplic:29,durat:[2,15,29,35,42],duration:35,dure:[13,15],dygraph:[24,41,42],dynam:[3,29,42],each:[0,1,2,3,5,7,10,11,13,14,15,17,18,19,27,29,30,31,32,34,36,39],earli:15,earthgecko:[4,13,15,23],easi:[1,6,9,10,14],easier:[10,20],easili:[3,11,20,41],eat:14,echo:4,ecosystem:14,eddifi:24,edg:[15,29,42],edit:[4,6,13],educat:15,effect:[1,2,3,9,29],effici:[1,2,29],effort:[10,28,42],either:[1,3,10,29,40,41,42],el6:26,elasticsearch:[10,14,27],eleg:[18,24],element:[18,27,29,41],els:26,email:[0,1],emb:29,embed:29,emploi:17,empti:29,enabl:[0,1,2,3,5],enable_alerts:29,enable_algorithm_run_metrics:29,enable_all_algorithms_run_metrics:29,enable_boundary_debug:29,enable_crucible:[1,29,31],enable_crucible_debug:29,enable_debug:[25,29],enable_full_duration_alerts:[15,29],enable_mirage:[15,29],enable_panorama_debug:29,enable_second_order:29,enadpoint:22,encod:[9,11,20,29,38,41],encount:[3,14],encourag:1,end:[1,2,13,29],end_timestamp:34,endpoint:[22,41],energi:15,engin:42,enilyk:3,enough:[1,8,9,17,29,39,41,42],ensembl:[1,2,31,32,36,39],ensur:[2,5,13,14,15,27,29,31,34,36,40,41],ensure:13,enter:13,entir:[9,27,29,31,32,34,36],environ:[2,13,15],envisag:3,epel:[25,28],epoch:34,equal:[1,10,33],equat:8,error:[1,4,13,14,23,24],especi:[5,14],essenti:[25,28],etc:[2,5,6,7,9,10,13,14,27,28,29,30,39,40,41],etsi:[2,6,18,22,40,42],etsy:[2,18,22,30,39],europ:29,evalu:[2,27,29,40],evaluat:27,even:[1,2,3,14,15,25,27,29,34],event:[3,5,9,10,15,27,41],eventu:1,ever:[2,29,30],everi:[1,2,3,14,20,29,33,39],evertyh:29,everyon:29,everyth:[27,29,39],evid:[4,22],ewm:26,ewma:26,exact:[1,9],exactli:[27,29],exampl:0,excel:[18,41],except:[9,13,24,29,31,36],exceptions_q:[31,32],exclud:27,excpet:36,exec:13,exist:[0,1,2,3,13,19,20,22,26,34,40],exit:14,exitcode:14,expaverag:26,expect:[9,10,15,17,22,23,29,38],expens:[2,20,29],experi:[1,3,39],experienc:33,experiment:29,experimental:29,expiration_tim:33,expiration_time:[1,3,15,29,31,32,33],expiri:29,explain:14,explanatori:[31,32,33,35,36,37],exponenti:[26,31,32,34,36],expos:41,extend:[1,9,11,15,18,27],extens:[3,5],extern:[39,41],extract:27,extrem:10,face:40,facilit:[31,36],fact:[1,2,10,18,27,29,41],factor:2,fail:[13,29,31,36,37],fail_check:29,failed_check_dir:29,failur:29,fair:[7,8,22],fairli:[3,15,18,27,40],fall:[31,32,34,36],fals:[1,3,9,14,15,26,27,29,31,32,34,35,36,37],famili:25,familiar:[13,40],farther:[31,32,34,36],fast:[2,31,36],faster:39,fault:10,favour:26,featur:[3,9,29,40,42],fed:[5,15,18],feed:[10,18,27,30,31,32],feedback:29,feel:41,fetch:29,few:[1,2,13,14,23,24,27,30,39],fewer:39,fgcolor:29,figur:[4,22],file:[1,4],filenam:[29,36],filesystem:5,fill:[9,29,40],filter:[3,27,29,31,32,33,41],find:[1,2,3,4,13,15,27,31,32,34,36,40],find_class:35,fine:29,fingerprint:27,finicki:4,finish:[31,32],finit:11,fire:[1,5,29],firehos:20,firewal:13,first:[1,13,25,29,35,40],first_hour_averag:[2,29,31,32,34,36],fit:[15,18,27,41],fix:[4,17,22,23,24,29,39,41],flag:[3,19,27],flask:7,flatten:15,flawlessli:2,flexibl:27,flood:15,flow:[1,3,9,39],flush:9,flux:26,fly:[18,22,27],focu:[8,27],focus:29,folder:[6,29],follow:[0,2,4,5,13,14,18,26,28,29,31,40,41],fontbold:29,footprint:3,forc:[4,26],forewarn:5,forget:6,fork:2,form:9,format:[4,9,11,15,22,27,29,40],forth:13,fortun:30,forward:[6,9,41],forwarded_port:6,found:[4,15,18,41],fpm:26,fqdn:29,frame:18,framework:[8,10,40],free:41,freetyp:28,frequent:[2,27,33],friend:12,friendli:[29,40],from:[1,2,3,4,5,6,9,10,11,13,14,15,17,18,20,22,23,24,27,28,29,31,32,34,35,36,37,38,40,41,42],from_timestamp:[29,41],frontend:[8,10,13,18,19,41],ftp:28,fulfil:13,full:[4,5,8,13,15,22,29,31,32,34,37,40,42],full_dur:[34,42],full_duration:1,full_duration_in_hour:42,full_duration_second:42,full_namespace:29,fuller:[31,32,34,36],fulli:14,fullqueuedrop:17,fullsiz:[15,18],fundament:18,funni:15,further:[2,3,4,17,22],futur:[4,5,10,22,26,27],gaug:29,gcc:[25,28],gdbm:28,gen_unpickl:35,gener:[3,4,5,10,15,25,29,35,41,42],get:[0,1,4],get_function_nam:[31,32,36],get_graphite_metr:29,get_list:38,gethostnam:29,gif:27,git:[6,13,28],github:[0,2,3,4,6,13,18,19,20,23,27,29,30,40,41,42],give:13,given:[1,13,27],global:[2,29],gmt:29,goal:22,goe:[1,9,14],good:[4,8,15,18],got:[10,39],grace:29,gracefulli:29,grade:9,gradient:27,graph:0,graph_url:29,graphit:[1,2,5,6,9,13,15],graphite_connect_timeout:29,graphite_from:36,graphite_graph_line_color:29,graphite_graph_settings:29,graphite_host:[13,29,31,32],graphite_metr:41,graphite_port:[13,29],graphite_previous_hour:29,graphite_protocol:[13,29],graphite_read_timeout:29,graphite_source:29,graphite_until:36,great:[10,15,18,30],greater:[1,2,10,15,17,29,31,32,33,34,36],greater_than:[3,29,33],grep:13,groke:14,grow:8,grown:8,grubb:[2,29,31,32,34,36],guest:6,gunicorn:[8,13,16,22,29],gzip:5,hack:[4,22,24,41],had:[14,23,30,39,40,42],halt:36,hand:1,handi:[4,30],handl:[1,2,5,14,15],handler:14,hang:[17,29,39,42],happen:[29,41],hard:[2,18],hardcod:42,hardcord:29,haul:30,have:[0,1,2,3,4,5,6,9,10,11,13,14,15,17,19,22,25,26,27,28,29,30],header:27,heavi:2,height:[3,29],help:[10,20,26,27,29,39],henc:15,here:[9,26,28,29,31,33,34,36,39,40,41],high:[2,3,8,10,18,29,30,33,34],higher:29,highest:9,highli:[15,41],highlight:13,hipchat:[0,3,26,29,31,32],hipchat_auth_token:29,hipchat_enabled:[13,29],hipchat_opts:[13,29],hire:15,hiredi:26,histogram:[31,32,34,36],histogram_bin:[2,29,31,32,34,36],histor:[13,18,19,41],histori:5,histroic:18,hoc:[5,10,18,22],hold:[29,37,41],holidai:15,hoop:26,hopefulli:[10,18,30,41],horizon:[1,3,9],horizon_ip:29,horizont:41,host:[6,9,14,17,29,32,37,38,39,40,42],hostnam:[2,26,29,40,41],hour:[9,15,29,31,32,34,36],how:[3,9,13,15,18],howev:[1,2,3,4,7,9,10,13,14,15,18,22,24,26,29,30,39,40,41],htm:27,html:[4,22],htpasswd:[13,41],http:[2,4,6,13,15,20,22,23,24,27,28,29],httpd:[13,41],human:1,hundr:18,hung:[14,17],iat:26,iblpbj9h2zxhntl6itxikntneygw__v5uopvfpolscrwj5ymczxi4qqtms8g8enkzbpl7xes3jv:4,idea:[10,27],ideal:[10,26,41],idempot:13,ident:[2,29,39],identifi:[27,29],ifram:41,iget:26,ignor:[26,29,40],ignore_na:26,ilk:10,iloc:26,imag:[1,5,15,18,23,27,29],image:27,immedi:[2,9],impact:[2,3,14,40],implement:[2,3,7,13,14,17,18,24,26,27,40,41],important_metr:29,importantli:[3,5,10,28],importantly:29,impress:27,improv:[2,18],in_skip_list:35,includ:[1,23,24,25,29],include:[1,22],incom:[9,11,29],incompat:[22,40],incomplet:1,incomplete:29,incorrectli:23,increas:[2,15,27,29,31,32,34,36,39],incur:2,inde:27,indeed:1,independ:[3,17],index:[12,22,29,37,38],indic:[31,32,34,36,41],individu:[3,5,13],infeas:1,infil:35,info:[2,3,6,26,29,38],inform:[3,27,29,31],infrastructur:[22,39],infrequ:29,ingest:27,inipars:26,init:[6,40],initi:[10,35,40],initial:[34,35],inject:27,inline:4,inplement:27,input:[5,18,20,33,34,36],insert:[3,4,11,37,39],insight:13,inspir:15,instal:[6,10,13,19,23,25,26,28,29,40,41],install:13,instanc:[9,26,29,41],instead:[2,31,32,34,36],instruct:40,integ:3,integr:[5,12],intend:3,intens:[1,3,15,29],interact:30,interest:[2,28],interestingli:2,interfac:10,internet:[27,39],interpol:29,interv:[14,17,31,32,36],intial:[31,32,33,34,35,36,37],introduc:[3,5,26,29,42],introduct:1,intuit:15,invok:31,involv:40,iotop:26,iptabl:13,is_anomalously_anomal:[31,32,36],isn:15,isol:[26,28],issu:[9,13,17],item:29,iter:[1,2,3,7,34],itself:[10,13,17,27,31,39],javascript:[29,38,41],jinja2:26,job:[18,20],jpeg:27,json:[1,5,10,15,29,31,32,38,41],jsonp:38,jump:26,jun:2,just:[1,3,9],keep:[8,14,29,39,41],kei:[1,3,10,11,15,20,29,31,32,35,36,38,40,41],kepler:27,kera:10,keyword:27,kill:6,know:[4,10,15,20],knowledg:13,known:[10,13,15],kolmogorov:[31,32,34,36],ks_test:[2,29,31,32,34,36],kwarg:38,l242:2,lack:14,lag:[15,29],land:[33,34,36],languag:18,languitar:[22,42],larg:[1,2,3,5,15,18,20,27,29,39,40],larger:[1,31,32,34,36],largest:40,last:[2,3,14,22,26,27,31,32,33,34,36,40,42],last_alert:41,latenc:29,later:[2,13,19,26],latest:[18,29,31,32,34,35,36,41],layout:[4,22],learn:10,least:[2,13,30,31,32,34,36],least_squar:[2,29,31,32,34,36],leav:[1,2,29],led:14,legaci:26,leisur:40,lend:13,length:29,less:[1,2,3,9,10,15,27,29,31,32,33,34,36,39,40,41],less_than:[3,29,33],let:[4,11,15,22],level:[8,13],lib64bz2:28,lib:[4,41],libfreetype6:28,libgdbm:28,libncurses5:28,libncursesw5:28,libpng:28,librari:18,libreadline6:[25,28],libsqlite3:28,libssl:28,libxft:28,lift:[2,40],lightcurv:27,lighttpd:41,like:[1,2,3,4,8,10,14,15,17,29,30,39,40,41],limit:[1,3,15,18,27,29,42],limit_remote_addr:38,line:[1,2,4,9,12,13,22,29,40,41],link:13,linod:13,linux:26,list:[1,2,3,6,26,29,31,32,38],listen:6,listen_pickl:35,listen_udp:35,littl:[1,2,15,18,27,40],llc:27,load:[3,5,15,30,35,39],load_avg:2,load_metric_var:[29,36],loadavg:2,local:[5,6,9,22,30],localhost:13,locat:[1,29,40],lock:[2,17,26,39],lockfil:26,log:[9,12,13],log_error:41,log_local4:29,log_messag:41,log_path:[14,29],log_request:41,log_warning:29,logger:[2,31,32,35,36,41],logic:[2,5,18],logrot:14,logstash:14,london:29,longer:[2,8,13,15,18,26,29,42],look:9,loop:9,los_angel:29,lose:[2,15],lot:[2,3,10,13,14,26,29,39,40],lots:29,low:[2,3,15,27,29,30],lower:[3,23,29,33,34,39],luk1:14,machin:[2,5,9,10,13,14,18],made:[2,27,39,40],mai:[1,2,3,8,9,14,15,20,22,26,28,29,30,40,41],main:[2,3,6,18,25],mainstream:26,maintain:18,major:[1,42],make:[1,4,13,14,15,18,20,22,26,28,29,39,40],make_altinstal:41,man:[33,34,36],manag:[2,5],mani:[1,3,9,14,20,27,29],manner:[2,5,13,29],manual:[13,40],margin:27,mariadb:[18,26],marian:[18,41],markupsaf:26,master:[2,40,42],match:[1,2,3,13,15,26,29,31,32,33,34,38,41],matplotlib:[1,5,10,23,26],matrix:2,matter:41,matur:14,max_analyzer_process_runtime:[29,42],max_queue_size:[9,29,35],max_resolution:29,max_tolerable_boredom:[1,29],maximum:[2,29],mayb:[3,15,24,29,34,39],md5:13,mean:[1,3,6,17,18,23,26,28,29,31,32,34,36,39,41],mean_subtraction_cumul:[2,29,31,32,34,36],meant:[5,9],measur:[31,32,34,36,41],mechan:[17,36],median:[31,32,34,36,39],median_absolute_devi:[2,29,31,32,34,36],median_tim:29,mel3bw7w_uhmhqtopvnedst4itohepmyyg79iwexaqwezfdihdiwtszne3hahtjhifv4hbnsmlxmisiicjhqneaem0p9xw0rxcomak_h8:4,memori:[1,2,11,15,18,29,39],mention:[27,30,40],menu:22,merg:[2,22,42],meric:[31,32],messag:29,messagepack:1,meta:[31,32,36],metadata:[5,19,22,26],method:[3,5,9,27,29,31,32,36,41],methodolog:[1,3],metric1:[3,29],metric2:[3,29],metric3:29,metric4:29,metric5:29,metric:[0,1],metric_alert:33,metric_check_fil:[34,37],metric_expiration_tim:33,metric_min_averag:33,metric_min_average_second:33,metric_nam:[31,32,33,35,36],metric_namespac:29,metric_timestamp:29,metric_trigg:33,metric_valu:36,metric_vars_fil:29,metricsgraph:24,mget:20,microframework:8,midnight:14,million:[27,39],min_average:[3,29,33],min_average_seconds:[3,29],min_period:26,min_tolerable_length:[1,29],mind:[1,14,15,29],mini_duration:[20,29],mini_namespace:29,minim:[2,3,5,18,25],minimum:29,minor:23,minu:[31,32,34,36],minut:[1,3,13,15,27,29,31,32,33,34,36,39],mirage_alert:[16,29],mirage_algorithm:[16,29],mirage_algorithms:[15,29,36],mirage_check_path:[15,29],mirage_consensus:29,mirage_crucible_enabled:[5,29],mirage_data_folder:[15,29],mirage_enable_alerts:[15,29],mirage_enable_second_order:29,mirage_stale_seconds:[15,29],mirageag:36,mirror:5,miscellan:5,misconfigur:41,miss:15,mitig:[2,29,39,41],mix:41,mkdir:[6,13,15,28],mkdir_p:[29,33,36],mock:26,mod_wsgi:41,mode:[2,14,18,29],model:[1,2,3,15,18,27,31,32,34,36],modif:[4,22],modifi:[1,2,3,13],modul:[2,5,7],modular:18,moment:[24,26,27,29],momentj:29,monit:[17,39,40],monitor:[3,12,14],month:27,more:[1,2,3,4,5,8,9,10,11,15,18,22,27,28,29],morn:15,most:[1,2,3,13,15,29,33,34,39,40],mostli:[29,42],move:[26,29,31,32,34,36,40],msg:41,msgpack:26,msgpack_python:6,much:[1,14,15,22,27,30,39,40,41,42],multi:[15,27],multipl:[3,14,15,27,29,31,32,37],multiprocess:1,must:[1,2,18,28,29,34,41],mute:2,mutliprocess:29,mysql:[2,13,18],mysql_id:41,mysql_insert:37,mysql_select:[29,37],n2n7fwomvnvkjr_lh8mazictwx7e3v5zv8mvhz8efv0g00:4,nagio:18,name:[1,4,5,9,29,31,32,33,34,35,36,38,40,41],namespac:[0,1,2,3,10],nativ:41,natur:[7,13,27,29,30,41],ncurs:[25,28],neater:41,necessari:[13,14,28,40],necessarili:[5,8,15,27,29],need:[1,2,4,6,7,9,10,13,18,22,26,29,31,32,34,36,38,39,40,41],neeed:29,neg:3,negat:[16,29],negate_analyzer_alert:36,negate_analyzer_alerts:29,negate_hipchat:36,negate_syslog:36,neither:9,neocortex:[1,27],nest:29,network:[6,39],never:[2,29,30],next:[6,15,31,32,34,36],nginx:41,nice:[3,27],nicolasmil:27,node:[13,17,29],nois:[3,10,15,18,27,29,31,32,34,36],noisi:[3,10,15,18,27,29,33,34],nometr:[3,29],non:[0,14,31,32,34,36],none:[1,17,29,37,38],normal:[4,9,10,15,22,29,33,41],normalis:15,nose:26,note:[0,1,3,6],noth:29,notic:29,now:[1,2,3,4,6,8,10,13,15,18,20,22,24,27,28,29,38,39,40,41,42],number:1,number_of_anomalies_to_store_in_panorama:29,numenta:27,numer:41,numpi:[6,18,26,27],numstat:29,nupic:10,object:[29,35,36],oblig:1,obviou:[9,10,27],obvious:13,occassion:29,occur:29,oculu:[20,27,29,35,39],oculus:39,oculus_host:29,off:[1,3,10,11,15,29,33,34,39],offic:15,office:15,offload:[2,5,41],often:[1,5,29,41],okai:39,old:[6,11],older:[9,26,29,35,42],onc:[0,13,20,31,36],once:[3,6,9,10,11,13,18,28],one:[20,30],ongo:[7,10],onli:[1,2,3,6,9,10,11,14,18,19,27,29,33,39,41],onlin:10,only:[3,26,29,42],onto:[11,29,39],open:[4,18,41,42],openssl:28,oper:[5,13,14,18,27,29,30],oppos:20,opt:[0,2,3,4,13,19,28,29,40],optim:[2,18],optimis:14,optimiz:1,optimum:[1,29,39,40],option:[9,13,15,26,29,30,41],optional:[13,28],opts:0,orang:41,orchestr:41,order:[2,9,15,27,29,36,40],ordereddict:26,org:[4,6,28,41],origin:[1,2,4,10,18],oscil:29,other:[1,3,5,6,8,10,13,18,19,27,29,30,31,32,34,36,40,41,42],otherapp:29,otherwis:29,our:[2,15,27],out:[5,10,11,13,15,29,31,32,34,36,39,40],output:[4,22,29],output_object:29,outsid:[31,32,34,36],outstandingli:18,over:[4,9,10,15,17,27,29,30,31,32,34,35,36,39],overal:[1,2,27,29,30],overcom:18,overhead:[1,2,27,28],overkil:41,overrid:41,overridden:29,overview:[10,12],overwrit:[24,29,42],overwritten:14,own:[3,5,10,13,14,26,27,29,30,39,41],pack:[9,20,29,41],packag:[4,6,12,13,16,18,22,26,28],packet:29,page:[2,12,13,38],pagerduti:[0,3,29,31,32],pagerduty_enabled:[13,29],pagerduty_opts:[13,29],pain:14,paint:29,panacea:10,panaroma:[29,38],panda:[13,18,23],pandas_version:[26,29],panorama:[2,5],panorama_anomali:38,panorama_check_path:29,panorama_database:29,panorama_dbhost:29,panorama_dbport:29,panorama_dbuser:[19,29],panorama_dbuserpass:[19,29],panorama_enabled:[3,13,29],panorama_expiry_time:[19,29],panorama_processes:29,panorama_request:38,panoramaag:37,par:10,parallel:15,paramet:1,parent:[1,3,29,31,32,34,42],parent_pid:[31,32,33,34,35,36,37],pars:[14,38],parser:26,part:[2,18,20,40],parti:29,particular:[1,27],partli:10,pass:[5,9,29,31,32,34,38,41],passiv:[3,18],password:[13,19,29,38,41],past:[1,29,30,31,32,36],patch:23,path:[0,4,13,15,19,22,23,28,29,33,34,36,37,40],path_to_your_skyline_repo_directory:4,patsi:[6,26],pattern:[2,3,5,9,10,23,25,27,40,41],paus:[14,29],pdf:15,peak:[15,27,39],peaki:[3,27],pep20:42,per:[1,3,15,23,24,25,27,29,31,33,36,39,41],percent:2,perfect:[3,10],perhap:[4,10,26,27],period:[1,10,15,27,29,41],permiss:13,perspect:14,phone:15,pick:[1,29],pickle_port:29,pickle_safe:35,pickle_str:35,pictur:[15,18],pid:29,pid_path:29,pink:29,pinpoint:14,pip:[6,10,13,23,25],pipe:29,pipelin:[10,14,18,30],pkg_resourc:28,pkill:6,place:6,plain:40,plantuml:4,pleas:[4,6,29,40,41],plethora:2,plot:[1,5,10,15,23,29,42],plot_redis_data:[1,23,29],png:[4,5,10,15,25],pnorama:40,pocoo:41,point:[1,2,3,8,9,10,13,14,15,18,20,26,27,29,31,32,33,34,36,40],pool:15,pop:11,popul:[9,31,32,35,40],port:[4,6,8,9,11,13,18,29,35,38,41],portion:3,posit:3,possibl:[1,2,3,13,26,27,28,29,39,41],post:2,potenti:14,power:2,pr0ject:28,practic:13,pre:[2,29],predict:9,prefix:[28,29],present:[1,41],pressur:39,presum:9,pretti:8,prettier:41,prevent:[9,29,42],previou:6,primari:9,primer:9,print:[29,37],probabl:[1,2,3,8],problem:[10,17],procedur:29,process:[1,2,3,6,7,10,11,13,14,15,17,18,19,29,31,32,33,34,35,36,37,39,40],prod:14,produc:[22,31,32,34,36],product:[9,14,29,39],profil:[2,27],project:[0,4,6,10,13,18,28,31,32,34,36],proper:[1,25,41],properli:[13,41],propos:20,protocol:[9,29],prove:[1,18],proven:3,provid:[2,3,5,10,13,22,27,29,41],provis:13,proxi:[13,41,42],pseudo:29,publish:[15,18,41],pubsub:41,pull:[1,3,13,15,23,24],pure:27,purg:[11,35],purpl:29,purpos:[2,14,17,42],put:[11,39],py2712:[13,28],pyc:4,pyculiar:27,pycurl:26,pygerduti:[26,29],pygpgm:26,pypa:26,pypars:26,pypi:[25,27],python2:[4,13,28],python:[0,1,2],python_major_version:[13,28],python_vers:34,python_version:28,python_virtualenv:[0,4,13,28],python_virtualenv_dir:[0,13,28],pytz:26,quantiti:18,queri:[1,3,5,15,18,20,29,37,38,41],question:27,queu:5,queue:[5,9,11,29,31,32,35,39],quick:[9,27],quicker:2,quickest:40,quit:[2,3,4,13,14,27,30,40,42],radar:27,ram:[1,2,13,39],ran:2,rang:[1,3,15,18,23,29],rather:[3,8,31,36,40,41],rational:5,raw_timeseri:[31,32],rcarbon:17,reach:18,read:[1,11,29,35],read_al:35,readlin:[25,28],readline5:28,real:[2,9,13],realist:[9,10,15],realiti:[9,14,42],realli:[4,10,13,15,17,22,27,29,30,39,41,42],realm:[3,27],realtim:[27,29],reason:[1,2,8,14,29,41],rebrow:[18,22,38],rebrow_kei:38,rebrow_server_db:38,receiv:[1,13],recent:[3,9],recipi:[29,31,32],recogn:29,recommend:[13,14,28,29,40,41],record:[2,19,29,41],record_algorithm_error:[31,36],red:[1,18,41],redhat:25,redi:[1,3,5],redis_socket_path:[13,29],reduc:[2,15,27,29,31,32,34,36,39],redund:9,refer:23,referenc:[22,40],regard:[13,41],regardless:[28,40,41],reinstal:26,rel:14,relai:[9,17,29],relat:[1,2,4,5,9,13,22,23,24,28,29,39,40,41,42],relay_method:9,releas:12,relev:[27,29,39,41],reli:1,reliabl:[12,29],remain:[2,29],remark:27,rememb:[13,19],remov:[18,27],render:[4,24,29,41,42],repeat:13,repetit:7,replac:[6,22,40,41],repo:[19,22,25],report:[9,14,29,31,36,41],repositori:6,represent:[1,27],request:[1,6,26],requir:[2,4,5],requires_auth:38,resolut:[9,15,18,29,36,39],resoluton:29,resolv:17,resourc:[4,5,10,18,22,31,39],respect:[1,2,11,31,32,34,35,36],respons:[1,11,15,19,35,38],restart:[11,13,14,17],restrict:[13,22,26,29],restructur:[4,18,22,42],result:1,retent:[5,15,29],retriev:[15,41],retrospect:5,revers:[13,41,42],revert:29,review:[10,40],reward:27,riemann:10,right:[6,14],roadmap:[10,12],robust:1,role:[5,10,23],roll:29,roof:2,room:[0,29,31,32],roomba_grace_time:29,roomba_processes:29,roomba_timeout:[29,42],rotat:14,rout:27,row:27,rpm:[15,26,27,29],rsyslog:[14,29],rubi:27,ruk2:14,rule:[9,13],run:[1,2],run_algorithm:34,run_optimized_workflow:1,run_selected_algorithm:[31,32,33,36],run_tim:[29,40],run_timestamp:[34,36],runawai:14,rundown:22,runtim:2,safe:[22,38],safeunpickl:35,sai:[2,3,14,22],said:[2,10,13,17,40,42],sake:40,same:[1,2,17,18,27,29,41],sampl:[3,14,19,29,31,32,34,36],sanctuari:15,sandi:[1,39],sane:39,saturdai:15,save:29,scapel:3,scenario:14,schema:[19,20,29],scheme:20,scientif:[18,27],scikit:[6,10,27],scipi:[6,18,26,27],scope:42,score:[27,31,32,34,36],script:[11,14,17,19],search:[12,19,41],season:[1,10,15,27],second:[1,2,3,9,15,17,19,20,29,31,32,34,36,39],second_order_resolution_hours:[15,29],second_order_resolution_second:36,section:[13,28,40,41],secur:[13,22],sed:4,see:[1,2,3,9,10,11,13,14,15,18,19,20,22,23,28,29,39,40,41,42],seed:13,seed_data:13,seem:[3,4,9,10,15,22,30,41],seen:[2,15],select:[15,24,29,31,32,33,36,37,38,41],self:[18,29,31,32,33,35,36,37],send:[1,2,3,9,10,26,29,31,32,38],send_graphite_metr:[29,32],sender:29,sensit:[15,29,31,32,34,36],sent:[0,1,15,29,30],sep:6,separ:[3,29,30,42],seq:33,seri:[23,26,29,31,32,34,36],serv:[13,22,38,41,42],server:[1,2,3,4,6,11,13,19,29,38,39,40,41],server_metrics_name:[13,29],servic:[1,9,11,13,15,19,20,22,27,29,41],set:[0,1],setup:[2,3,10,13,25,28,40,42],sever:29,shall:42,shard:[29,40],share:[11,29,39],shelf:10,shewhart:1,shift:41,ship:29,should:[0,1,2,3,4,9,13,14,17,22,26,27,29,35,36,39,40,41,42],show:[2,23,38],shuffl:5,side:[8,38,41],sigma:[1,31,32,34,36],signal:[15,29],signific:[3,5],similar:[1,3,5,10,27,29,39],simpl:[1,2,4,5,10,17,18,26,29,31,32,34,36,41,42],simplejson:26,simpler:8,simplest:5,simpli:[1,2,9,10,14],simplifi:4,sinc:[6,22,29,39,42],sing:10,singl:[1,2,3,29,41,42],site:4,situ:40,six:26,size:[1,9,18,29,31,32,34,36,39],skew:[2,29,41],skip:[3,29],skip_list:[29,35,39],skip_mini:35,sky:12,skylin:[0,1,2,3,4,5],skyline2711:[0,4],skyline_app:[14,29,32,34],skyline_dir:40,skyline_funct:[16,24],skyline_htpasswd:13,skyline_test:[0,29,40],skyline_tmp_dir:[2,29],skyline_vers:16,slack:29,slack_enabled:29,slash:29,sleep:2,slept:2,slightli:7,slope:27,small:[2,4,9,22,29,40],smaller:[2,12,29,31,32,34,36],smirnov:[31,32,34,36],smtp_opts:[13,29],snakeviz:2,snapshot:5,snippet:9,snychronis:9,sock:[13,29,35],socket:[11,13,29],sole:2,solid:18,solv:17,some:[2,3,6,7,9,10,13,14,15,17,18,22,23,25,26,27,28,29,30,39,40,41,42],someapp:29,someon:[25,41],someth:[1,4,14,17,18,22,39,40,41,42],sometim:29,somewhat:[2,3,5,15,18,42],soon:[9,10],sorri:9,sort:[1,13],sourc:[0,3,5,6,9,13,15,18,28,29,31,32,33,34,35,36,37,38],space:[5,10,14],spars:27,spawn:[1,2,3,29,31,32,36,37,42],spec:2,special:[2,20],specif:[1,2,3,5,10,13,15,18,27,28,29,38,41],specifi:[3,24,29,31,32,42],spectra:27,speed:[29,39],spent:8,spew:[31,36],sphinx:4,spike:2,spikei:15,spin_process:[1,31,32,33,34,36,37],spit:39,sql:19,sqlite:28,squar:[31,32,34,36],squeez:6,src:[2,6,40],ssd:[1,2,13,39],ssl:26,stabl:[6,29],stack:10,stackoverflow:24,stage:13,stale:[1,29],stale_period:[1,29],stall:29,stand:2,standard:[3,27,31,32,34,36,40,41],standardis:5,stanwai:5,start:[1,3,6,9],stat:[2,5,9,26,27,29],state:[13,18,22,26,29,41],stationar:[31,32,34,36],stationari:[31,32,34,36],statist:1,stats_count:[15,27,29],statsd:[18,29],statsd_host:30,statsmodel:[6,26],statu:29,stddev:26,stddev_from_averag:[2,29,31,32,34,36],stddev_from_moving_averag:[2,29,31,32,34,36],stdout:14,steinbach:[18,41],step:2,stick:8,still:[2,3,9,15,18,26,33,34,39,40,41],stmp:29,stop:[11,18,29,31,36,40],storag:[5,20,27,29],store:[1,5,10,18],str:[29,31,36,37,38],straight:[10,13],strategi:[1,29,31,32],stream:[9,14,18,27,35],strictli:42,string:[9,20,29,31,35,36,37,38],structur:[5,18,22,28],struggl:6,stuff:8,subdomain:29,submit:[14,22,29],submodul:16,subpackag:16,subprocess:29,substanti:[2,5,40],substitut:28,substr:[31,32],subtract:[31,32,34,36],sudo:6,suffer:20,suffic:[9,24],suffici:[3,15,17,39],suggest:[2,4,22,25],suit:[3,5,15,28,29,33,34],sum:[18,29,39],summer:15,sundai:15,supervisord:40,support:[9,20,26,27,29],sure:[1,28,29],surfac:[1,3,15,29,41],surface_graphite_metric_data:36,surpress:29,surprisingli:2,svg:4,sword:3,synchronis:9,syslog_enabled:29,syslog_opts:29,system:[9,10,15,18,26,27,28,29],tail:[13,40],tail_avg:[31,32,34,36],take:[10,13,15,29,39,40,41],tame:18,tar:[25,28],target:29,target_hours:29,tbd:5,technic:13,techniqu:27,technolog:18,tell:9,tempor:15,ten:34,tensorflow:10,term:[2,3,4,5,9,14,18,22,26,27,29,30,31,32,34,36,40,41],termin:[29,42],test1:[29,37],test2:[29,37],testament:18,tgz:28,than:[1,2,3,5,8,9,10,13,15,17,18,27,29,31,32,33,34,35,36,40,41,42],thank:[2,4],the_user_password:29,theano:10,thei:[1,2,3,10,11,18,20,29,30,34,39,40,41,42],them:[0,1,9,10,11,13,18,29,31,32,34,39,40],themselv:[27,31,36],theori:22,therefor:[2,8,13,14,22,39,41],thi:[1,2,3,4,5,6,8,9,10,13,14,15,17,18,20],thicker:41,thing:[3,7,8,9,10,13,14,18,23,25,26,27,29,30,36,38],think:[9,10,15],thinner:41,this_host:37,those:[2,15,27,29],thousand:18,thread:[14,29,31,32,33,34,35,36,37,39],three:[31,32,34,36],threshold:[2,3,15,18],through:[1,2,3,5,6,9,10,11,14,26,29,30,39,40,41],ticker:41,ticket:15,time:1,timedrotatingfilehandl:14,timefram:27,timelin:[17,39],timeout:[13,29,31,32],times_run:[2,29],timeseri:[1,2,3,5,10,14,15,18],timeseries_fil:34,timeseries_nam:34,timestamp:[9,20,29,34,41],timestep:35,timezon:[24,29,41],tin:3,tm6pueauqm8ha6khnqqsvd12pqahlgrxad3yslxrwthego_fn7zyhrbcm7jk4ktmsd8nbqyqu5gtrqnyuxhm68y44n3wa:4,tmp:[2,13,29,31,36],todai:5,todo:[31,32,36],ton:[31,36],too:[1,2,3,5,9,10,15,17,18,27,29,39,40,42],tool:[1,2,15],tooshort:[1,29],tornado:26,total:[1,2,27,29,41],total_metr:[40,41],total_tim:[2,29],tps:[1,39],traceback:[31,36],traceback_format_exc:[31,36],traceback_format_exc_str:[31,36],tradit:22,traffic:39,trail:[15,29],train:[1,27],transmit:29,transpar:22,transport:[9,27,30],tree:[5,42],trend:[31,32,34,36],tri:26,trigger:[0,1],trigger_alert:[31,32,33,36],trigger_negat:36,trigger_value:[3,29],trim:[11,29,35],trivial:[10,14],troubl:29,trough:[15,27],truli:27,trust:41,truth:18,tupl:[0,1,3,10,14,15,19,29,31,32,37,40],turn:[29,41,42],tutori:6,tweak:[31,32,34,36],twice:29,two:[2,3,9,11,20,29,31,32],type:[3,4,11,13,15,24,27,29,31,35,36,37,38],ubuntu:25,udp_port:29,ugli:3,ultim:1,uml:[4,23,25],unab:42,unauthor:41,under:[27,39,42],understand:[10,14,15,30],undertaken:[2,4,22],undoubtedli:[2,14],unexpectedli:29,unfortun:27,uninterest:30,unintuit:14,uniqu:[1,3,20,31,32],unique_metr:[3,31,32],unique_nohash:33,unittest2:26,unix:[29,41],unixsocket:13,unixsocketperm:13,unknown:29,unless:[10,13,15,26,29],unlimited:29,unneed:41,unoptim:[2,29],unpack:[31,32],untick:27,until:29,until_timestamp:[29,41],updat:[1,2,5,6,13,20,23,24,25,27,42],update:[6,23],upfront:[10,27],upgrad:[2,13,26,40],upgrade:[12,13],upon:1,upper:[23,29,39],upqex2a6u4eyzcqwstdgpxdlkrywx1bajegrx0ufdtsrugibttvvxslxo53hmxsw:4,url:[6,29,38],urlgrabb:26,urlsafe_base64_encod:38,usag:[2,29,37],use:[13,28],use_flow_control:9,use_python:13,used:[27,29],user:[10,13,14,15,19,29,30,40,41,42],usernam:[29,38,41],usual:13,utc:29,util:[0,9,13,31,32,33,34,36],vacuum:35,valid:[2,22,29,38,41],valu:1,values:37,variabl:[2,3,10,13,15,24,26,29,42],variat:39,variou:[15,18,27,31,41],varnish:27,vcore:[1,39],vcpu:[2,13],veri:[1,2,3,9,13,14,15,17,18,20,29,30,40,41,42],verif:41,verifi:[26,39],verify_alert:0,version:[2,6,9,13,18,23,24,25,26],very:[3,29],via:[9,10,13,14,15,18,22,26,27,29,31,32,41,42],viabl:27,view:[1,10,13,14,15,18,19,20,27,29,41],vim:6,vip:15,virtaulenv:26,virtualenv:[0,12,13,26],visual:[1,8,27,41],visualis:[29,41],vitualenv:26,vmprof:2,volum:2,vote:1,wai:[1,2,9,13,14,18,20,28,40,41,42],wait:[13,29,31,32],want:[0,1],warn:[2,28],wasn:18,watch:15,web:[6,8],webapp:[1,7],webapp_allowed_ips:[13,29,38,41,42],webapp_auth_enabled:29,webapp_auth_user:[13,29,41,42],webapp_auth_user_password:[13,29,41,42],webapp_fixed_timezone:[29,41],webapp_ip:[6,13,29,41],webapp_ip_restricted:29,webapp_javascript_debug:29,webapp_port:[13,29,41],webapp_server:29,webapp_user_timezone:[29,41],week:15,weekdai:15,weekend:15,weekli:15,weigh:2,welcom:1,well:[1,3,6,13,18,27,29],went:[2,15],were:[1,2,8,9,22,25,27],werkzeug:[26,41],wget:[25,28],whatev:29,wheezy64:6,when:[1,2,5,9,10,13,14,15,20,27,29,31,32,33,34,35,36,37,40],where:[2,3,9,15,27,29,39,40,41,42],wherea:3,wherev:[13,18,28],whether:[2,3,13,14,22,24,29,31,32,33,34,36,40],which:[1,2,3,4,5,6,9,10,13,14,15,17,18,22,23,28,29,30,31,32,34,36,37,40,41,42],whichev:40,whisper:[5,40],whole:[3,10,29],whose:41,width:29,wildcard:29,win:[2,27,40],window:[15,41],winter:15,wise:[20,29],wish:[1,14,29],within:[3,15,17,26,27,29,41,42],without:[2,3,4,5,6,10,18,31,36],wonder:30,word:[2,28],work:0,worker_processes:[29,35,39],workload:[2,15],works:3,worth:[9,15,28,39],worthi:42,would:[1,2,3,10,11,14,15,26,27,29,30,40,41],wow:10,wrap:25,write:[8,14,29,31,39],write_data_to_fil:29,write_to_fil:29,written:[4,17,29,31,36],wrong:14,wsgi:41,wsgirequesthandl:41,www:28,x86_64:26,xvluqwubxlarynq3nmhwrmb7l8stq07indqhvno3k5sprhvkoqlkoi750z8aiyo0pxsqsv:4,year:[2,27],yet:2,you:[0,1,2,3,6,9],your:[0,1,2,3],your_:13,your_configuration:6,your_domain:29,your_graphite_host:29,your_hostname:29,your_pagerduty_auth_token:29,your_pagerduty_service_api_kei:29,your_server_ip_address:13,your_skyline_dir:40,your_skyline_host:9,your_skyline_ip:13,yum:[26,28],zip:13,zlfbjwcn3bpdawozmmtklqlo0iigw0eky4ewwrahuqosnlo5yu:4,zlib1g:[25,28],zlib:[25,28],zone:24,zxvf:28},titles:["Alert testing","Analyzer","Analyzer Optimizations","Boundary","Building documentation","Crucible","Debian and Vagrant Installation Tips","Development","Development - Webapp","Getting data into Skyline","Getting started","Horizon","Skyline documentation","Installation","Logging","Mirage","skyline","Monitoring Skyline","Overview","Panorama","Redis integration","Release Notes","1.0.0 - the crucible branch","1.0.1 - the crucible branch","1.0.2 - the crucible branch","1.0.3 - the crucible branch","Requirements","Roadmap","Running Skyline in a Python virtualenv","skyline package","Skyline and friends","skyline.analyzer package","skyline.analyzer_dev package","skyline.boundary package","skyline.crucible package","skyline.horizon package","skyline.mirage package","skyline.panorama package","skyline.webapp package","Tuning tips","Upgrading","Webapp","What’s new"],titleterms:{"default":41,"function":41,"new":[18,42],access:41,add:10,adding:9,agent:[31,32,33,34,35,36,37],alert:[0,1,31,32],alerts:10,algorithm:[1,2,3,31],algorithm_breakdown:[22,42],algorithm_except:29,algorithms_dev:32,analyz:[1,2,10,22,31,40,42],analyzer_dev:32,anomali:10,anomaly_breakdown:[2,42],apach:41,app:[10,14,18],applic:41,approxim:[2,41],architectur:18,audienc:13,auth:41,autom:13,backend:38,basic:41,benchmark:2,beta:42,boundari:[3,10,33,42],boundary_alert:33,boundary_algorithm:33,box:6,branch:[22,23,24,25,42],brief:18,buckyserv:30,build:4,can:15,cannot:15,chang:[26,40,42],check:5,clone:40,close:30,closest:41,com:15,conceptu:42,configur:[3,6,13],consider:2,constel:27,content:[29,31,32,33,34,35,36,37,38],count:2,creat:[19,28],crucibl:[5,10,22,23,24,25,34,42],crucible_algorithm:34,data:[9,27],databas:19,debian:6,depend:[6,28],deploi:41,deploy:39,detect:10,detect_drop_off_cliff:3,develop:[7,8],directori:40,document:[4,12,22,42],doe:[1,3,5,15],dry:7,enabl:[10,15],environ:26,error:27,etsy:42,exampl:[1,15],exception:1,execut:2,explanat:1,extra:6,famili:26,feedback:30,file:5,firewal:41,fits:27,flask:8,friend:30,full_duration:9,further:27,get:[6,9,10],grade:41,graph:[1,2],graphit:[17,27,30,40],gunicorn:[38,41],handl:[22,42],have:40,histori:18,horizon:[10,11,35],how:20,howto:28,http:41,improv:27,improve:[22,42],increment:10,indice:12,infrastructur:41,installat:[6,13],integr:20,intend:13,interpretor:4,ionospher:27,issu:22,journei:10,just:10,kiss:17,known:22,learn:27,listen:[9,11,35],log:[14,17,22,40,41,42],logstash:30,look:[18,40],loop:30,machin:27,manag:[13,42],mani:30,messagepack:9,meteor:27,methodolog:14,metric:[2,20,22,40,42],might:10,mini:20,mirag:[1,10,15,36,42],mirage_alert:36,mirage_algorithm:36,modifi:14,modul:[10,29,31,32,33,34,35,36,37,38],monitor:17,more:30,multiprocess:2,mysql:19,nab:27,namespac:[20,40],nasa:27,neg:27,negat:36,note:[9,13,21,40],number:2,nupic:27,nutshel:18,old:18,optim:[22,40],optimis:42,optimiz:2,origin:27,overlaid:27,overview:[18,41],packag:[29,31,32,33,34,35,36,37,38],panda:26,panorama:[10,19,22,37,41,42],paramet:10,percentag:27,perform:[2,22,27,42],philosophi:1,pickl:[9,17],pip:26,posit:27,predict:27,preserv:14,probabl:10,process:42,processor:2,product:41,program:10,progress:18,psuedo:41,push:1,python:[4,6,26,27,28],rank:2,rate:2,real:15,rebrow:41,recent:26,redhat:26,redi:[6,20],relationship:30,releas:[21,22],reliabl:39,request:27,requir:[6,26],restrict:41,result:2,riemann:30,roadmap:27,roomba:[11,35],rst:4,rule:41,run:[3,28],run_optimized_workflow:2,scoreboard:27,secur:41,sensu:30,set:[2,9,10,15,29,40],setuptool:22,simplifi:18,skylin:[6,9,10,12,14,16,17,18,27,28,29,30,31,32,33,34,35,36,37,38,40,42],skyline_funct:29,skyline_vers:29,smaller:39,smtp:1,snyc:9,sphinx:[22,42],start:10,statsd:30,step:[13,40],store:20,structur:40,submodul:[29,31,32,33,34,35,36,37,38],subpackag:29,sudo:[13,28],syslog:14,tabl:12,tcp:9,tenfold:15,test:0,thi:22,thing:40,time:[2,9,41,42],timeseri:[20,27],tip:[6,39],tmpf:2,trigger:2,tune:[2,22,39,42],txt:[5,26],udp:9,update:27,upgrade:40,usage:5,using:[2,41],vagrant:6,valu:2,version:28,virtualenv:28,want:10,web:41,webapp:[8,10,22,38,41,42],weight:2,what:[1,3,5,15,18,20,42],wheezi:6,why:5,work:[2,18],worker:[11,35],workflow:[2,18],world:15,wtf:4,you:10,your:4,zone:41}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["alert-testing","analyzer","analyzer-optimizations","boundary","building-documentation","crucible","debian-and-vagrant-installation-tips","development/index","development/webapp","getting-data-into-skyline","getting-started","horizon","index","installation","logging","mirage","modules","monitoring-skyline","overview","panorama","redis-integration","releases","releases/1_0_0","releases/1_0_1","releases/1_0_2","releases/1_0_3","requirements","roadmap","running-in-python-virtualenv","skyline","skyline-and-friends","skyline.analyzer","skyline.analyzer_dev","skyline.boundary","skyline.crucible","skyline.horizon","skyline.mirage","skyline.panorama","skyline.webapp","tuning-tips","upgrading","webapp","whats-new"],objects:{"":{algorithm_exceptions:[29,0,0,"-"],analyzer:[31,0,0,"-"],analyzer_dev:[32,0,0,"-"],boundary:[33,0,0,"-"],crucible:[34,0,0,"-"],horizon:[35,0,0,"-"],mirage:[36,0,0,"-"],panorama:[37,0,0,"-"],settings:[29,0,0,"-"],skyline:[29,0,0,"-"],skyline_functions:[29,0,0,"-"],skyline_version:[29,0,0,"-"],webapp:[38,0,0,"-"]},"analyzer.agent":{AnalyzerAgent:[31,2,1,""],run:[31,4,1,""]},"analyzer.agent.AnalyzerAgent":{run:[31,3,1,""]},"analyzer.alerters":{alert_hipchat:[31,4,1,""],alert_pagerduty:[31,4,1,""],alert_smtp:[31,4,1,""],alert_syslog:[31,4,1,""],skyline_version:[31,5,1,""],trigger_alert:[31,4,1,""]},"analyzer.algorithms":{determine_median:[31,4,1,""],first_hour_average:[31,4,1,""],get_function_name:[31,4,1,""],grubbs:[31,4,1,""],histogram_bins:[31,4,1,""],is_anomalously_anomalous:[31,4,1,""],ks_test:[31,4,1,""],least_squares:[31,4,1,""],mean_subtraction_cumulation:[31,4,1,""],median_absolute_deviation:[31,4,1,""],record_algorithm_error:[31,4,1,""],run_selected_algorithm:[31,4,1,""],stddev_from_average:[31,4,1,""],stddev_from_moving_average:[31,4,1,""],tail_avg:[31,4,1,""]},"analyzer.analyzer":{Analyzer:[31,2,1,""]},"analyzer.analyzer.Analyzer":{check_if_parent_is_alive:[31,3,1,""],run:[31,3,1,""],spin_process:[31,3,1,""]},"analyzer_dev.agent":{AnalyzerAgent:[32,2,1,""],run:[32,4,1,""]},"analyzer_dev.agent.AnalyzerAgent":{run:[32,3,1,""]},"analyzer_dev.alerters":{alert_hipchat:[32,4,1,""],alert_pagerduty:[32,4,1,""],alert_smtp:[32,4,1,""],alert_syslog:[32,4,1,""],trigger_alert:[32,4,1,""]},"analyzer_dev.algorithms_dev":{determine_median:[32,4,1,""],first_hour_average:[32,4,1,""],get_function_name:[32,4,1,""],grubbs:[32,4,1,""],histogram_bins:[32,4,1,""],is_anomalously_anomalous:[32,4,1,""],ks_test:[32,4,1,""],least_squares:[32,4,1,""],mean_subtraction_cumulation:[32,4,1,""],median_absolute_deviation:[32,4,1,""],run_selected_algorithm:[32,4,1,""],stddev_from_average:[32,4,1,""],stddev_from_moving_average:[32,4,1,""],tail_avg:[32,4,1,""]},"analyzer_dev.analyzer_dev":{Analyzer:[32,2,1,""]},"analyzer_dev.analyzer_dev.Analyzer":{check_if_parent_is_alive:[32,3,1,""],run:[32,3,1,""],send_graphite_metric:[32,3,1,""],spin_process:[32,3,1,""]},"boundary.agent":{BoundaryAgent:[33,2,1,""],run:[33,4,1,""]},"boundary.agent.BoundaryAgent":{run:[33,3,1,""]},"boundary.boundary":{Boundary:[33,2,1,""]},"boundary.boundary.Boundary":{check_if_parent_is_alive:[33,3,1,""],mkdir_p:[33,3,1,""],run:[33,3,1,""],spin_process:[33,3,1,""],unique_noHash:[33,3,1,""]},"boundary.boundary_alerters":{alert_hipchat:[33,4,1,""],alert_pagerduty:[33,4,1,""],alert_smtp:[33,4,1,""],alert_syslog:[33,4,1,""],trigger_alert:[33,4,1,""]},"boundary.boundary_algorithms":{autoaggregate_ts:[33,4,1,""],boundary_no_mans_land:[33,4,1,""],detect_drop_off_cliff:[33,4,1,""],greater_than:[33,4,1,""],less_than:[33,4,1,""],run_selected_algorithm:[33,4,1,""]},"crucible.agent":{CrucibleAgent:[34,2,1,""],run:[34,4,1,""]},"crucible.agent.CrucibleAgent":{run:[34,3,1,""]},"crucible.crucible":{Crucible:[34,2,1,""]},"crucible.crucible.Crucible":{check_if_parent_is_alive:[34,3,1,""],run:[34,3,1,""],spin_process:[34,3,1,""]},"crucible.crucible_algorithms":{detect_drop_off_cliff:[34,4,1,""],first_hour_average:[34,4,1,""],grubbs:[34,4,1,""],histogram_bins:[34,4,1,""],ks_test:[34,4,1,""],least_squares:[34,4,1,""],mean_subtraction_cumulation:[34,4,1,""],median_absolute_deviation:[34,4,1,""],python_version:[34,5,1,""],run_algorithms:[34,4,1,""],stddev_from_average:[34,4,1,""],stddev_from_moving_average:[34,4,1,""],tail_avg:[34,4,1,""]},"horizon.agent":{Horizon:[35,2,1,""],run:[35,4,1,""]},"horizon.agent.Horizon":{run:[35,3,1,""]},"horizon.listen":{Listen:[35,2,1,""],SafeUnpickler:[35,2,1,""]},"horizon.listen.Listen":{check_if_parent_is_alive:[35,3,1,""],gen_unpickle:[35,3,1,""],listen_pickle:[35,3,1,""],listen_udp:[35,3,1,""],read_all:[35,3,1,""],run:[35,3,1,""]},"horizon.listen.SafeUnpickler":{PICKLE_SAFE:[35,6,1,""],find_class:[35,7,1,""],loads:[35,7,1,""]},"horizon.roomba":{Roomba:[35,2,1,""]},"horizon.roomba.Roomba":{check_if_parent_is_alive:[35,3,1,""],run:[35,3,1,""],vacuum:[35,3,1,""]},"horizon.worker":{Worker:[35,2,1,""]},"horizon.worker.Worker":{check_if_parent_is_alive:[35,3,1,""],in_skip_list:[35,3,1,""],run:[35,3,1,""]},"mirage.agent":{MirageAgent:[36,2,1,""],run:[36,4,1,""]},"mirage.agent.MirageAgent":{run:[36,3,1,""]},"mirage.mirage":{Mirage:[36,2,1,""]},"mirage.mirage.Mirage":{check_if_parent_is_alive:[36,3,1,""],load_metric_vars:[36,3,1,""],mkdir_p:[36,3,1,""],run:[36,3,1,""],spin_process:[36,3,1,""],surface_graphite_metric_data:[36,3,1,""]},"mirage.mirage_alerters":{alert_hipchat:[36,4,1,""],alert_pagerduty:[36,4,1,""],alert_smtp:[36,4,1,""],alert_syslog:[36,4,1,""],trigger_alert:[36,4,1,""]},"mirage.mirage_algorithms":{determine_median:[36,4,1,""],first_hour_average:[36,4,1,""],get_function_name:[36,4,1,""],grubbs:[36,4,1,""],histogram_bins:[36,4,1,""],is_anomalously_anomalous:[36,4,1,""],ks_test:[36,4,1,""],least_squares:[36,4,1,""],logger:[36,5,1,""],mean_subtraction_cumulation:[36,4,1,""],median_absolute_deviation:[36,4,1,""],record_algorithm_error:[36,4,1,""],run_selected_algorithm:[36,4,1,""],stddev_from_average:[36,4,1,""],stddev_from_moving_average:[36,4,1,""],tail_avg:[36,4,1,""]},"mirage.negaters":{negate_analyzer_alert:[36,4,1,""],negate_hipchat:[36,4,1,""],negate_syslog:[36,4,1,""],trigger_negater:[36,4,1,""]},"panorama.agent":{PanoramaAgent:[37,2,1,""]},"panorama.agent.PanoramaAgent":{run:[37,3,1,""]},"panorama.panorama":{Panorama:[37,2,1,""]},"panorama.panorama.Panorama":{check_if_parent_is_alive:[37,3,1,""],mysql_insert:[37,3,1,""],mysql_select:[37,3,1,""],run:[37,3,1,""],spin_process:[37,3,1,""]},"webapp.backend":{get_list:[38,4,1,""],panorama_request:[38,4,1,""]},"webapp.webapp":{App:[38,2,1,""],anomalies:[38,4,1,""],app_settings:[38,4,1,""],authenticate:[38,4,1,""],check_auth:[38,4,1,""],crucible:[38,4,1,""],data:[38,4,1,""],docs:[38,4,1,""],index:[38,4,1,""],limit_remote_addr:[38,4,1,""],now:[38,4,1,""],panorama:[38,4,1,""],panorama_anomalies:[38,4,1,""],rebrow:[38,4,1,""],rebrow_key:[38,4,1,""],rebrow_keys:[38,4,1,""],rebrow_server_db:[38,4,1,""],requires_auth:[38,4,1,""],run:[38,4,1,""],urlsafe_base64_encode:[38,4,1,""],version:[38,4,1,""]},"webapp.webapp.App":{run:[38,3,1,""]},algorithm_exceptions:{Boring:[29,1,1,""],Stale:[29,1,1,""],TooShort:[29,1,1,""]},analyzer:{agent:[31,0,0,"-"],alerters:[31,0,0,"-"],algorithms:[31,0,0,"-"],analyzer:[31,0,0,"-"]},analyzer_dev:{agent:[32,0,0,"-"],alerters:[32,0,0,"-"],algorithms_dev:[32,0,0,"-"],analyzer_dev:[32,0,0,"-"]},boundary:{agent:[33,0,0,"-"],boundary:[33,0,0,"-"],boundary_alerters:[33,0,0,"-"],boundary_algorithms:[33,0,0,"-"]},crucible:{agent:[34,0,0,"-"],crucible:[34,0,0,"-"],crucible_algorithms:[34,0,0,"-"]},horizon:{agent:[35,0,0,"-"],listen:[35,0,0,"-"],roomba:[35,0,0,"-"],worker:[35,0,0,"-"]},mirage:{agent:[36,0,0,"-"],mirage:[36,0,0,"-"],mirage_alerters:[36,0,0,"-"],mirage_algorithms:[36,0,0,"-"],negaters:[36,0,0,"-"]},panorama:{agent:[37,0,0,"-"],panorama:[37,0,0,"-"]},settings:{ALERTERS_SETTINGS:[29,5,1,""],ALERTS:[29,5,1,""],ALGORITHMS:[29,5,1,""],ANALYZER_CRUCIBLE_ENABLED:[29,5,1,""],ANALYZER_OPTIMUM_RUN_DURATION:[29,5,1,""],ANALYZER_PROCESSES:[29,5,1,""],ANOMALY_DUMP:[29,5,1,""],BOREDOM_SET_SIZE:[29,5,1,""],BOUNDARY_ALERTER_OPTS:[29,5,1,""],BOUNDARY_ALGORITHMS:[29,5,1,""],BOUNDARY_AUTOAGGRERATION:[29,5,1,""],BOUNDARY_AUTOAGGRERATION_METRICS:[29,5,1,""],BOUNDARY_CRUCIBLE_ENABLED:[29,5,1,""],BOUNDARY_ENABLE_ALERTS:[29,5,1,""],BOUNDARY_HIPCHAT_OPTS:[29,5,1,""],BOUNDARY_METRICS:[29,5,1,""],BOUNDARY_OPTIMUM_RUN_DURATION:[29,5,1,""],BOUNDARY_PAGERDUTY_OPTS:[29,5,1,""],BOUNDARY_PROCESSES:[29,5,1,""],BOUNDARY_SMTP_OPTS:[29,5,1,""],CANARY_METRIC:[29,5,1,""],CARBON_PORT:[29,5,1,""],CHUNK_SIZE:[29,5,1,""],CONSENSUS:[29,5,1,""],CRUCIBLE_CHECK_PATH:[29,5,1,""],CRUCIBLE_DATA_FOLDER:[29,5,1,""],CRUCIBLE_PROCESSES:[29,5,1,""],CRUCIBLE_TESTS_TIMEOUT:[29,5,1,""],ENABLE_ALERTS:[29,5,1,""],ENABLE_ALGORITHM_RUN_METRICS:[29,5,1,""],ENABLE_ALL_ALGORITHMS_RUN_METRICS:[29,5,1,""],ENABLE_BOUNDARY_DEBUG:[29,5,1,""],ENABLE_CRUCIBLE:[29,5,1,""],ENABLE_CRUCIBLE_DEBUG:[29,5,1,""],ENABLE_DEBUG:[29,5,1,""],ENABLE_FULL_DURATION_ALERTS:[29,5,1,""],ENABLE_MIRAGE:[29,5,1,""],ENABLE_PANORAMA_DEBUG:[29,5,1,""],ENABLE_SECOND_ORDER:[29,5,1,""],FULL_DURATION:[29,5,1,""],FULL_NAMESPACE:[29,5,1,""],GRAPHITE_CONNECT_TIMEOUT:[29,5,1,""],GRAPHITE_GRAPH_SETTINGS:[29,5,1,""],GRAPHITE_HOST:[29,5,1,""],GRAPHITE_PORT:[29,5,1,""],GRAPHITE_PROTOCOL:[29,5,1,""],GRAPHITE_READ_TIMEOUT:[29,5,1,""],GRAPHITE_SOURCE:[29,5,1,""],GRAPH_URL:[29,5,1,""],HIPCHAT_ENABLED:[29,5,1,""],HIPCHAT_OPTS:[29,5,1,""],HORIZON_IP:[29,5,1,""],LOG_PATH:[29,5,1,""],MAX_ANALYZER_PROCESS_RUNTIME:[29,5,1,""],MAX_QUEUE_SIZE:[29,5,1,""],MAX_RESOLUTION:[29,5,1,""],MAX_TOLERABLE_BOREDOM:[29,5,1,""],MINI_DURATION:[29,5,1,""],MINI_NAMESPACE:[29,5,1,""],MIN_TOLERABLE_LENGTH:[29,5,1,""],MIRAGE_ALGORITHMS:[29,5,1,""],MIRAGE_CHECK_PATH:[29,5,1,""],MIRAGE_CONSENSUS:[29,5,1,""],MIRAGE_CRUCIBLE_ENABLED:[29,5,1,""],MIRAGE_DATA_FOLDER:[29,5,1,""],MIRAGE_ENABLE_ALERTS:[29,5,1,""],MIRAGE_ENABLE_SECOND_ORDER:[29,5,1,""],MIRAGE_STALE_SECONDS:[29,5,1,""],NEGATE_ANALYZER_ALERTS:[29,5,1,""],NUMBER_OF_ANOMALIES_TO_STORE_IN_PANORAMA:[29,5,1,""],OCULUS_HOST:[29,5,1,""],PAGERDUTY_ENABLED:[29,5,1,""],PAGERDUTY_OPTS:[29,5,1,""],PANDAS_VERSION:[29,5,1,""],PANORAMA_CHECK_PATH:[29,5,1,""],PANORAMA_DATABASE:[29,5,1,""],PANORAMA_DBHOST:[29,5,1,""],PANORAMA_DBPORT:[29,5,1,""],PANORAMA_DBUSER:[29,5,1,""],PANORAMA_DBUSERPASS:[29,5,1,""],PANORAMA_ENABLED:[29,5,1,""],PANORAMA_EXPIRY_TIME:[29,5,1,""],PANORAMA_PROCESSES:[29,5,1,""],PICKLE_PORT:[29,5,1,""],PID_PATH:[29,5,1,""],PLOT_REDIS_DATA:[29,5,1,""],REDIS_SOCKET_PATH:[29,5,1,""],ROOMBA_GRACE_TIME:[29,5,1,""],ROOMBA_PROCESSES:[29,5,1,""],ROOMBA_TIMEOUT:[29,5,1,""],RUN_OPTIMIZED_WORKFLOW:[29,5,1,""],SERVER_METRICS_NAME:[29,5,1,""],SKIP_LIST:[29,5,1,""],SKYLINE_TMP_DIR:[29,5,1,""],SLACK_ENABLED:[29,5,1,""],SMTP_OPTS:[29,5,1,""],STALE_PERIOD:[29,5,1,""],SYSLOG_ENABLED:[29,5,1,""],SYSLOG_OPTS:[29,5,1,""],TARGET_HOURS:[29,5,1,""],UDP_PORT:[29,5,1,""],WEBAPP_ALLOWED_IPS:[29,5,1,""],WEBAPP_AUTH_ENABLED:[29,5,1,""],WEBAPP_AUTH_USER:[29,5,1,""],WEBAPP_AUTH_USER_PASSWORD:[29,5,1,""],WEBAPP_FIXED_TIMEZONE:[29,5,1,""],WEBAPP_IP:[29,5,1,""],WEBAPP_IP_RESTRICTED:[29,5,1,""],WEBAPP_JAVASCRIPT_DEBUG:[29,5,1,""],WEBAPP_PORT:[29,5,1,""],WEBAPP_SERVER:[29,5,1,""],WEBAPP_USER_TIMEZONE:[29,5,1,""],WORKER_PROCESSES:[29,5,1,""]},skyline_functions:{alert_expiry_check:[29,4,1,""],fail_check:[29,4,1,""],get_graphite_metric:[29,4,1,""],load_metric_vars:[29,4,1,""],mkdir_p:[29,4,1,""],mysql_select:[29,4,1,""],send_graphite_metric:[29,4,1,""],write_data_to_file:[29,4,1,""]},webapp:{backend:[38,0,0,"-"],gunicorn:[38,0,0,"-"],webapp:[38,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","exception","Python exception"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","function","Python function"],"5":["py","data","Python data"],"6":["py","attribute","Python attribute"],"7":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:exception","2":"py:class","3":"py:method","4":"py:function","5":"py:data","6":"py:attribute","7":"py:classmethod"},terms:{"123_234_213_123":17,"22m":14,"250k":[1,39],"2nd":27,"38m":14,"3rd":29,"3sigma":[23,29],"40g":14,"4gb":[1,2,13,39],"52m":14,"5pm":15,"6d42998cfec6e85b902d4ffa5a35ce86":13,"70k":[1,39],"7dai":15,"7hour":29,"96g":14,"__builtin__":35,"__pycache__":4,"_build":[4,22],"_markerlib":28,"_reconstructor":35,"boolean":[1,29,31,33,34,36,37,38],"break":[3,40],"byte":35,"case":[2,10,15,25,29,42],"class":[13,31,32,33,34,35,36,37,38],"default":[0,1,2,5,6,9,10,13,14,15,19,29,40],"float":2,"function":[4,7,8,9,26,27,28,29,31,32,33,34,36,38,40],"import":[4,9,14,15,19,22,29,30,42],"int":[29,37],"long":[1,8,9,11,13,14,17,20,28,29,30,33,34,36,39],"new":[1,2,8,9,12,13,14],"public":[15,41],"return":[1,3,4,13,24,26,29,31,32,33,34,36,37,38,40,41],"short":[1,9,31,32,34,36],"static":[18,22,29,42],"super":[31,36],"switch":[9,20],"transient":5,"true":[0,1,2,3,9,13,14,15,26,29,31,34,36,37],"try":[10,14,15,18,26,29,39],"var":[13,14,29,40],"while":[3,5,13],abe:[5,15,18],abil:[2,3,5,27,29],abl:[1,2,6,9,10,13,15,19,20,22,26,27,29,30],about:[1,2,3,9,10,14,23,27,31,32,39],abov:[2,10,15,27,28,29,40],abovement:14,absolut:[15,29,31,32,34,36],abspath:4,accept:[9,10],access:[9,13,19,29],accid:41,accommod:[1,22,40],accord:[6,24],accrur:42,accumul:29,accur:[3,29],accuraci:[9,27],achiev:[2,4,14,22,29],across:3,act:15,activ:[0,13,18],actual:[1,18],ad_request:27,add:[1,2,3,5,6,9],added:[23,24,25],added_bi:29,addit:[1,2,3,5,8,18,20,22,23,27,29,40,41],address:[13,29,38,41,42],adhoc:5,adjust:26,admin:[13,29],adopt:[26,28],adtech:27,advantag:17,advertis:[27,39],advis:[1,10,29],aec9ffb075f9443c8e8f23c4f2d06faa:29,affect:40,after:[2,6,9,10,13,29,31,32,34,36,40],again:[0,2,9,13,14,15,28,29,40],against:[1,2,3,15,29,31,32,39,41],agent:[9,16,29],aggreg:[1,3,5,15,29,33,41],aggregation_value:29,ago:[29,31,32,34,36],agre:1,aid:27,aim:[5,29],alert_expiry_check:29,alert_hipchat:[31,32,33,36],alert_pagerduti:[31,32,33,36],alert_smtp:[31,32,33,36],alert_syslog:[31,32,33,36],alert_threshold:[3,29,33],alert_vias:[3,29],alerter:29,alerter_expiration_tim:29,alerter_limit:29,alerters_settings:29,alerts:0,algorithm1:29,algorithm2:29,algorithm_breakdown:2,algorithm_error_fil:[31,36],algorithm_except:16,algorithm_nam:[29,31,36],algorithma:5,algorithms:[1,2,29,31,32,34],algorithms_dev:[16,29],algoritm:[29,31,36],aliv:34,all:[1,2,3,4,6,9,10,11,13,15,18,19,20,28,29,31,32,34,36,38,39,40,41,42],allow:[3,4,5,10,15,19,22,27,28,29,39,41,42],almost:[2,3],alogrithm:[3,5],along:2,alot:29,alphabet:27,alreadi:[23,28],also:[1,2,3,5,9,11,15,20,23,29,30,31,32,34,36,41],alter:18,altern:20,although:[3,4,5,9,10,13,14,22,23,27,29,30,40,41,42],altinstal:28,amaz:27,america:29,amount:[5,11,22,29],an_important_th:29,analys:[1,3,5,15,27,29,31,32],analysi:[2,3,5,10,18,19,22,27,29,31,32,36,40],analyzer_crucible_enabled:[5,29],analyzer_dev:[2,16,29],analyzer_optimum_run_duration:[1,2,29,39],analyzer_processes:[1,2,29,31,32,39,40],analyzerag:[31,32],ani:[1,2,3,5,8,9,10,13,14,15,18,19,26,27,28,29,31,32,36,40,41,42],annot:[15,23],anomal:[1,2,3,10,13,14,15,18,19,22,29,31,32,33,34,36,41],anomali:[5,9],anomalous_metr:[1,3,31,32],anomaly_breakdown_q:[31,32],anomaly_dump:29,anoth:[5,9,13,27,29,31,32,39,41],antirez:20,any:[14,29],anyon:[4,30],anyth:[9,15,29,31,33,34,36],anywai:[2,13,14],apach:13,api:41,apidoc:[4,22],apologi:40,app:5,app_dir:4,app_set:38,appdir:4,append:[4,11,15,20,22,29,35],appli:[2,27,31,32,34,36,42],applic:[2,5,6,13,14,17,18,23,24,26,27,29],approach:18,appropri:[1,8,10,13,15,19,20,28,40,42],approri:[31,32],apt:[6,13,28],arbitrari:[3,33,34],archiv:[5,27],arg:38,argpars:26,arguabl:8,argument:[4,5,31,32,38],aris:[9,29],around:[18,27,29,41],arrai:[23,27,29,38],aspect:30,asperc:27,assess:[9,27,40],assign:[1,2,3,29,31,32,33,34,36,37],assigned_metr:[1,29,31,32],associ:2,assum:[13,42],attempt:[3,9,15,41],augment:[31,32,34,36],auth:[29,38],auth_token:29,authent:[13,38,41],autoaggreg:[29,33],autoaggregate_t:[29,33],autoaggregate_valu:33,autoconf:28,autodoc:40,autodoc_mock_import:29,autogener:4,autom:10,automat:18,automodul:4,autonom:5,avail:[6,15,22,25,26,31],avenu:27,averag:[1,2,26,27,29,31,32,33,34,36,39],avg:2,awai:[2,10,13,15],awesom:4,axi:27,back:[6,19,27],backend:[16,29],backport:[6,26],backupcount:14,backward:[2,3,22,26,40,42],balanc:14,base64:38,base:[1,2,3,5,10,13,22,27,29,31,32,33,34,35,36,37,41],basehttpserv:41,baselin:9,bash:[14,17,26],basi:[5,18],basic:[1,15,22,25,29,38],batteri:1,battl:18,bear:[1,14,29],becaus:[1,3,4,8,15,26,29],becom:[3,9,10,29,33,34,42],been:[1,2,3,4,5,6,8,9,13,17,18,22,23,29,39,40,41,42],befor:[1,2,9,13,15,29,30,40],begin:[9,15,29],behavior:[9,41],behind:[5,41],believ:14,below:[2,4,10,14,15,22,28,40],benefit:40,best:[8,15,41,42],bet:15,beta:31,better:[10,15,18,31,32,34,36,42],between:[1,3,5,14],beyond:[3,27],bgcolor:29,big:29,bigger:[15,39],bin:[0,3,11,13,14,15,19,28,31,32,34,36,40],binari:20,bind:[6,29],bit:[3,7,8,18,26,29,41],blah:37,blak3r2:[15,23,25],blob:[2,29],block:[3,5,9,18,29],blown:8,bolt:3,bore:[1,9,29],boredom_set_size:29,both:[1,4,29,31,32,38,41],bothersom:41,bound:[6,23,27,29],boundari:[1,2],boundary_alert:[16,29],boundary_alerter_opts:29,boundary_algorithm:[16,29],boundary_algorithms:[29,33],boundary_autoaggreration:29,boundary_autoaggreration_metrics:29,boundary_crucible_enabled:[5,29],boundary_enable_alerts:29,boundary_hipchat_opts:29,boundary_metr:33,boundary_metrics:[3,10,29],boundary_no_mans_land:33,boundary_optimum_run_duration:29,boundary_pagerduty_opts:29,boundary_processes:[3,29],boundary_smtp_opts:29,boundaryag:33,box:1,brain:1,branch:[2,5,21],breach:3,breakdown:42,bridg:[1,39],briefli:18,bring:[10,27,40],broken:14,brow:[13,18,41],brows:[18,41],browser:[22,24,29,38,41],buckl:39,bug:[23,24,42],build_doc:4,built:18,bump:[23,24,25],bunch:[31,32,33],burst:[1,39],busi:15,bzip2:28,c0c0c0:29,cach:[9,17],cache_kei:29,calcuat:[31,32,34,36],calcul:[1,27,29,31,32,34,36],call:[14,15,20,29,31,32,33,34,35,36,37,38,42],can:[1,2,3,4,5,6,8,9,10,11,13,14],canari:[29,35],canary_metric:[13,29],cannot:13,capabl:[5,27],capac:29,carbon:[9,17,29],carbon_port:29,carri:5,cat:[4,13],caus:[26,27,29,36,42],caveat:[2,26,42],cdn:13,cdnj:24,certain:[9,13,17,29,40],certainti:[10,22],cfg:25,chang:[1,2,3,4,5,6,13,22,23,24,25],channel:[3,10,29],cheap:14,check:[1,2,3],check_auth:38,check_file_to_fail:29,check_if_parent_is_al:[31,32,33,34,35,36,37],choic:[8,27],choos:[13,20,28],chunk:[29,35,39],chunk_size:[29,39],circumst:29,classifi:[1,29],classmethod:35,clean:[4,11,29,31,36],clear:[1,15],clearer:[1,15,18],clearli:2,client:[29,38,41],cliff:[3,29,33,34],clock:41,clone:[6,13,19],cloud:[1,2,13,39,41],cloudflar:24,cluster:[10,23],code:[1,2,4,9,15,22,27],coexist:3,collat:[31,32],collect:[1,11,27,29],color:29,colourblind:29,column:27,com:[2,4,6,13],combin:38,come:[1,3,9,15,20,29,39],comment:[13,29,40],commit:[22,40,42],common:[13,15,41],commun:[18,26,28],compani:29,comparison:29,compat:[2,22,26,28,42],compil:41,complain:26,complet:[13,29,31,36,40,42],complex:[2,10,41],complic:14,compon:13,comprehens:18,comput:[2,18],computation:[2,10],concept:[3,42],conceptu:[14,18],condit:[18,25,29],conf:[4,9,13,28,41],config:[6,29],configur:[0,1,2],configuration:6,connect:29,connector:13,connet:29,conquer:1,consensu:1,consensus:[1,2,3,18,29],consid:[10,13,15,24,29,41],consist:[11,29],consol:29,consolid:7,constant:[15,18],constantli:[2,18],consum:[10,15,29,39],consumpt:15,contain:[1,15,18,20,22,27,29,31,32,34,36,40],conten:14,content:[12,16],context:[1,5,14,28,29,41,42],continu:[14,18,19,27,29,42],control:[1,31,32,37],convent:5,convert:[27,41],cool:8,copi:[6,13,40],copy_reg:35,core:[1,18,39],correct:[1,4,13,22,23],correctli:[0,9],correl:27,cortic:27,cosin:27,cost:2,could:[3,4,5,14,15,22,27,29],coull:27,cours:[1,9],courtesi:27,cover:[40,41,42],coverag:40,cprofilev:2,cpu:[1,2,3,15,29],crash:9,crazi:29,creat:[4,5,10,13,14],creation:[19,41],crept:23,criteria:[2,41],critic:10,crond:17,crucibl:[1,2,3],crucible_algorithm:[16,29],crucible_check_path:29,crucible_data_folder:29,crucible_enabled:29,crucible_processes:29,crucible_tests_timeout:29,crucibleag:34,cube:27,cumul:[31,32,34,36],current:[1,2,3,4,7,8,9,11,18,20,22,23,24,29,40,41],current_skyline_app:29,curv:10,custom:[15,18,42],cut:11,cycl:[2,11],cycler:26,cython:27,d3j:24,daemon:[2,5,10,26],dai:[11,15,20,41],daili:15,danc:10,dashboard:13,data:[0,1,2,3,5],data_typ:29,databas:[3,5,13,18],datapoint:[2,3,9,20,27,29,31,32,33,34,35,36,39,41],dataset:29,date:[18,29,40,41],dateaccessorsutc:24,datetim:41,dateutil:26,daytim:15,deactiv:[0,13],deal:30,deb:6,debat:40,debug:[25,29],declar:[1,3,29],decod:1,decoupl:5,decreas:[2,9,29,39],dedic:2,dedup:11,deem:3,def:[31,32],defens:41,defin:[1,3,5,10,15,29,31,32,33,34,35,36],definit:[2,29],degre:[10,30],delai:[31,32,34,36],delet:35,demand:41,demonstr:15,depart:15,depend:[3,5],depict:1,deploi:[3,13,22,26],deploy:[2,12],deprec:26,depth:[10,41],deriv:1,describ:[14,30,40],descript:[13,18,27],design:[1,5,9,15,17,18,20,27],desir:[15,18,29,30,41],destin:[9,17],destinations:9,detail:[3,6,14,15,23,28,29,31,32,38,41],detect:3,determin:[1,2,3,4,15,17,27,29,31,32,33,34,35,36,37,38],determine_median:[23,31,32,36],dev:[6,25,28],devel:[25,28],develop:[2,4],development:29,deviat:[31,32,34,36],diagram:[4,23],dickei:[31,32,34,36],dictionari:29,did:[2,3,9,18,27],diff:40,differ:[1,2,3,7,10,13],difficult:[10,17,18,27,42],diffseri:27,dimens:[3,27],dimension:27,dir:[4,29],direct:[13,30],directli:[10,13],directori:[4,5,13,15,22,29,34],disabl:[1,5,15,29,39],discard:[15,29],discov:[31,32],disk:[5,10,14,29],displai:[6,20,29,41],distant:10,distinct:[1,39],distribut:[26,28,29,31,32,34,36],divid:[1,3,31,32],django:8,doc:[4,9,22,23,25,38,41,42],docstr:[3,13,40],document:[0,1],domain:27,don:[6,9,29],done:[2,3,4,29],down:[9,11,15,29,30],download:13,downsid:20,dramat:[2,39],drift:9,drop:[3,8,15,17,27,29,33,34],dropbox:6,due:[2,7,13,14,15,26,27,28,29,40,41],dump:[13,29],duplic:29,durat:[2,15,29,35,42],duration:35,dure:[13,15],dygraph:[24,41,42],dynam:[3,29,42],each:[0,1,2,3,5,7,10,11,13,14,15,17,18,19,27,29,30,31,32,34,36,39],earli:15,earthgecko:[4,13,15,23],easi:[1,6,9,10,14],easier:[10,20],easili:[3,11,20,41],eat:14,echo:4,ecosystem:14,eddifi:24,edg:[15,29,42],edit:[4,6,13],educat:15,effect:[1,2,3,9,15,29],effici:[1,2,29],effort:[10,28,42],either:[1,3,10,29,40,41,42],el6:26,elasticsearch:[10,14,27],eleg:[18,24],element:[18,27,29,41],els:26,email:[0,1],emb:29,embed:29,emploi:17,empti:29,enabl:[0,1,2,3,5],enable_alerts:29,enable_algorithm_run_metrics:29,enable_all_algorithms_run_metrics:29,enable_boundary_debug:29,enable_crucible:[1,29,31],enable_crucible_debug:29,enable_debug:[25,29],enable_full_duration_alerts:[15,29],enable_mirage:[15,29],enable_panorama_debug:29,enable_second_order:29,enadpoint:22,encod:[9,11,20,29,38,41],encount:[3,14],encourag:1,end:[1,2,13,29],end_timestamp:34,endpoint:[22,41],energi:15,engin:42,enilyk:3,enough:[1,8,9,17,29,39,41,42],ensembl:[1,2,31,32,36,39],ensur:[2,5,13,14,15,27,29,31,34,36,40,41],ensure:13,enter:13,entir:[9,27,29,31,32,34,36],environ:[2,13,15],envisag:3,epel:[25,28],epoch:34,equal:[1,10,33],equat:8,error:[1,4,13,14,23,24],especi:[5,14],essenti:[25,28],etc:[2,5,6,7,9,10,13,14,27,28,29,30,39,40,41],etsi:[2,6,18,22,40,42],etsy:[2,18,22,30,39],europ:29,evalu:[2,27,29,40],evaluat:27,even:[1,2,3,14,15,25,27,29,34],event:[3,5,9,10,15,27,41],eventu:1,ever:[2,29,30],everi:[1,2,3,14,20,29,33,39],evertyh:29,everyon:29,everyth:[27,29,39],evid:[4,22],ewm:26,ewma:26,exact:[1,9],exactli:[27,29],exampl:0,excel:[18,41],except:[9,13,24,29,31,36],exceptions_q:[31,32],exclud:27,excpet:36,exec:13,exist:[0,1,2,3,13,19,20,22,26,34,40],exit:14,exitcode:14,expaverag:26,expect:[9,10,15,17,22,23,29,38],expens:[2,20,29],experi:[1,3,39],experienc:33,experiment:29,experimental:29,expiration_tim:33,expiration_time:[1,3,15,29,31,32,33],expiri:29,explain:14,explanatori:[31,32,33,35,36,37],exponenti:[26,31,32,34,36],expos:41,extend:[1,9,11,15,18,27],extens:[3,5],extent:15,extern:[39,41],extract:27,extrem:10,face:40,facilit:[31,36],fact:[1,2,10,18,27,29,41],factor:2,fail:[13,29,31,36,37],fail_check:29,failed_check_dir:29,failur:29,fair:[7,8,22],fairli:[3,15,18,27,40],fall:[31,32,34,36],fals:[1,3,9,14,15,26,27,29,31,32,34,35,36,37],famili:25,familiar:[13,40],farther:[31,32,34,36],fast:[2,31,36],faster:39,fault:10,favour:26,featur:[3,9,29,40,42],fed:[5,15,18],feed:[10,18,27,30,31,32],feedback:29,feel:41,fetch:29,few:[1,2,13,14,23,24,27,30,39],fewer:39,fgcolor:29,figur:[4,22],file:[1,4],filenam:[29,36],filesystem:5,fill:[9,29,40],filter:[3,27,29,31,32,33,41],find:[1,2,3,4,13,15,27,31,32,34,36,40],find_class:35,fine:29,fingerprint:27,finicki:4,finish:[31,32],finit:11,fire:[1,5,15,29],firehos:20,firewal:13,first:[1,13,15,25,29,35,40],first_hour_averag:[2,29,31,32,34,36],fit:[15,18,27,41],fix:[4,17,22,23,24,29,39,41],flag:[3,19,27],flask:7,flatten:15,flawlessli:2,flexibl:27,flood:15,flow:[1,3,9,39],flush:9,flux:26,fly:[18,22,27],focu:[8,27],focus:29,folder:[6,29],follow:[0,2,4,5,13,14,18,26,28,29,31,40,41],fontbold:29,footprint:3,forc:[4,26],forewarn:5,forget:6,fork:2,form:9,format:[4,9,11,22,27,29,40],forth:13,fortun:30,forward:[6,9,41],forwarded_port:6,found:[4,15,18,41],fpm:26,fqdn:29,frame:18,framework:[8,10,40],free:41,freetyp:28,frequent:[2,27,33],friend:12,friendli:[29,40],from:[1,2,3,4,5,6,9,10,11,13,14,15,17,18,20,22,23,24,27,28,29,31,32,34,35,36,37,38,40,41,42],from_timestamp:[29,41],frontend:[8,10,13,18,19,41],ftp:28,fulfil:13,full:[4,5,8,13,15,22,29,31,32,34,37,40,42],full_dur:[34,42],full_duration:1,full_duration_in_hour:42,full_duration_second:42,full_namespace:29,fuller:[31,32,34,36],fulli:14,fullqueuedrop:17,fullsiz:[15,18],fundament:18,funni:15,further:[2,3,4,17,22],futur:[4,5,10,22,26,27],gaug:29,gcc:[25,28],gdbm:28,gen_unpickl:35,gener:[3,4,5,10,15,25,29,35,41,42],get:[0,1,4],get_function_nam:[31,32,36],get_graphite_metr:29,get_list:38,gethostnam:29,gif:27,git:[6,13,28],github:[0,2,3,4,6,13,18,19,20,23,27,29,30,40,41,42],give:13,given:[1,13,27],global:[2,29],gmt:29,goal:22,goe:[1,9,14],good:[4,8,15,18],got:[10,39],grace:29,gracefulli:29,grade:9,gradient:27,graph:0,graph_url:29,graphit:[1,2,5,6,9,13,15],graphite_connect_timeout:29,graphite_from:36,graphite_graph_line_color:29,graphite_graph_settings:29,graphite_host:[13,29,31,32],graphite_metr:41,graphite_port:[13,29],graphite_previous_hour:29,graphite_protocol:[13,29],graphite_read_timeout:29,graphite_source:29,graphite_until:36,great:[10,15,18,30],greater:[1,2,10,15,17,29,31,32,33,34,36],greater_than:[3,29,33],grep:13,groke:14,grow:8,grown:8,grubb:[2,29,31,32,34,36],guest:6,gunicorn:[8,13,16,22,29],gzip:5,hack:[4,22,24,41],had:[14,23,30,39,40,42],halt:36,hand:1,handi:[4,30],handl:[1,2,5,14,15],handler:14,hang:[17,29,39,42],happen:[29,41],hard:[2,18],hardcod:42,hardcord:29,haul:30,have:[0,1,2,3,4,5,6,9,10,11,13,14,15,17,19,22,25,26,27,28,29,30],header:27,heavi:2,height:[3,29],help:[10,20,26,27,29,39],here:[9,26,28,29,31,33,34,36,39,40,41],high:[2,3,8,10,18,29,30,33,34],higher:29,highest:9,highli:[15,41],highlight:13,hipchat:[0,3,26,29,31,32],hipchat_auth_token:29,hipchat_enabled:[13,29],hipchat_opts:[13,29],hire:15,hiredi:26,histogram:[31,32,34,36],histogram_bin:[2,29,31,32,34,36],histor:[13,18,19,41],histori:5,histroic:18,hoc:[5,10,18,22],hold:[29,37,41],holidai:15,hoop:26,hopefulli:[10,15,18,30,41],horizon:[1,3,9],horizon_ip:29,horizont:41,host:[6,9,14,17,29,32,37,38,39,40,42],hostnam:[2,26,29,40,41],hour:[9,15,29,31,32,34,36],how:[3,9,13,15,18],howev:[1,2,3,4,7,9,10,13,14,15,18,22,24,26,29,30,39,40,41],htm:27,html:[4,22],htpasswd:[13,41],http:[2,4,6,13,15,20,22,23,24,27,28,29],httpd:[13,41],human:1,hundr:18,hung:[14,17],iat:26,iblpbj9h2zxhntl6itxikntneygw__v5uopvfpolscrwj5ymczxi4qqtms8g8enkzbpl7xes3jv:4,idea:[10,27],ideal:[10,26,41],idempot:13,ident:[2,29,39],identifi:[27,29],ifram:41,iget:26,ignor:[26,29,40],ignore_na:26,ilk:10,iloc:26,imag:[1,5,15,18,23,27,29],image:27,immedi:[2,9],impact:[2,3,14,40],implement:[2,3,7,13,14,17,18,24,26,27,40,41],important_metr:29,importantli:[3,5,10,28],importantly:29,impress:27,improv:[2,18],in_skip_list:35,includ:[1,23,24,25,29],include:[1,22],incom:[9,11,29],incompat:[22,40],incomplet:1,incomplete:29,incorrectli:23,increas:[2,15,27,29,31,32,34,36,39],incur:2,inde:27,indeed:1,independ:[3,17],index:[12,22,29,37,38],indic:[31,32,34,36,41],individu:[3,5,13],infeas:1,infil:35,info:[2,3,6,26,29,38],inform:[3,27,29,31],infrastructur:[22,39],infrequ:29,ingest:27,inipars:26,init:[6,40],initi:[10,35,40],initial:[34,35],inject:27,inline:4,inplement:27,input:[5,18,20,33,34,36],insert:[3,4,11,37,39],insight:13,inspir:15,instal:[6,10,13,19,23,25,26,28,29,40,41],install:13,instanc:[9,26,29,41],instead:[2,15,31,32,34,36],instruct:40,integ:3,integr:[5,12],intend:3,intens:[1,3,15,29],interact:30,interest:[2,28],interestingli:2,interfac:10,internet:[27,39],interpol:29,interv:[14,17,31,32,36],intial:[31,32,33,34,35,36,37],introduc:[3,5,26,29,42],introduct:1,intuitiv:15,invok:31,involv:40,iotop:26,iptabl:13,is_anomalously_anomal:[31,32,36],isn:15,isol:[26,28],issu:[9,13,17],item:29,iter:[1,2,3,7,34],itself:[10,13,17,27,31,39],javascript:[29,38,41],jinja2:26,job:[18,20],jpeg:27,json:[1,5,10,15,29,31,32,38,41],jsonp:38,jump:26,jun:2,just:[1,3,9],keep:[8,14,29,39,41],kei:[1,3,10,11,15,20,29,31,32,35,36,38,40,41],kepler:27,kera:10,keyword:27,kill:6,know:[4,10,15,20],knowledg:13,known:[10,13,15],kolmogorov:[31,32,34,36],ks_test:[2,29,31,32,34,36],kwarg:38,l242:2,lack:14,lag:[15,29],land:[33,34,36],languag:18,languitar:[22,42],larg:[1,2,3,5,15,18,20,27,29,39,40],larger:[1,31,32,34,36],largest:40,last:[2,3,14,22,26,27,31,32,33,34,36,40,42],last_alert:41,latenc:29,later:[2,13,19,26],latest:[18,29,31,32,34,35,36,41],layout:[4,22],learn:10,least:[2,13,30,31,32,34,36],least_squar:[2,29,31,32,34,36],leav:[1,2,29],led:14,legaci:26,leisur:40,lend:13,length:29,less:[1,2,3,9,10,15,27,29,31,32,33,34,36,39,40,41],less_than:[3,29,33],let:[4,11,15,22],level:[8,13],lib64bz2:28,lib:[4,41],libfreetype6:28,libgdbm:28,libncurses5:28,libncursesw5:28,libpng:28,librari:18,libreadline6:[25,28],libsqlite3:28,libssl:28,libxft:28,lift:[2,40],lightcurv:27,lighttpd:41,like:[1,2,3,4,8,10,14,15,17,29,30,39,40,41],limit:[1,3],limit_remote_addr:38,line:[1,2,4,9,12,13,22,29,40,41],link:13,linod:13,linux:26,list:[1,2,3,6,26,29,31,32,38],listen:6,listen_pickl:35,listen_udp:35,littl:[1,2,15,18,27,40],llc:27,load:[3,5,15,30,35,39],load_avg:2,load_metric_var:[29,36],loadavg:2,local:[5,6,9,22,30],localhost:13,locat:[1,29,40],lock:[2,17,26,39],lockfil:26,log:[9,12,13],log_error:41,log_local4:29,log_messag:41,log_path:[14,29],log_request:41,log_warning:29,logger:[2,31,32,35,36,41],logic:[2,5,18],logrot:14,logstash:14,london:29,longer:[2,8,13,15,18,26,29,42],look:9,loop:9,los_angel:29,lose:[2,15],lot:[2,3,10,13,14,26,29,39,40],lots:29,low:[2,3,15,27,29,30],lower:[3,23,29,33,34,39],luk1:14,machin:[2,5,9,10,13,14,18],made:[2,27,39,40],mai:[1,2,3,8,9,14,15,20,22,26,28,29,30,40,41],main:[2,3,6,18,25],mainstream:26,maintain:18,major:[1,42],make:[1,4,13,14,15,18,20,22,26,28,29,39,40],make_altinstal:41,man:[33,34,36],manag:[2,5],mani:[1,3,9,14,20,27,29],manner:[2,5,13,29],manual:[13,40],margin:27,mariadb:[18,26],marian:[18,41],markupsaf:26,master:[2,40,42],match:[1,2,3,13,15,26,29,31,32,33,34,38,41],matplotlib:[1,5,10,23,26],matrix:2,matur:14,max_analyzer_process_runtime:[29,42],max_queue_size:[9,29,35],max_resolution:29,max_tolerable_boredom:[1,29],maximum:[2,29],mayb:[3,15,24,29,34,39],md5:13,mean:[1,3,6,15,17,18,23,26,28,29,31,32,34,36,39,41],mean_subtraction_cumul:[2,29,31,32,34,36],meant:[5,9],measur:[31,32,34,36,41],mechan:[17,36],median:[31,32,34,36,39],median_absolute_devi:[2,29,31,32,34,36],median_tim:29,mel3bw7w_uhmhqtopvnedst4itohepmyyg79iwexaqwezfdihdiwtszne3hahtjhifv4hbnsmlxmisiicjhqneaem0p9xw0rxcomak_h8:4,memori:[1,2,11,15,18,29,39],mention:[27,30,40],menu:22,merg:[2,22,42],meric:[31,32],messag:29,messagepack:1,meta:[31,32,36],metadata:[5,19,22,26],method:[3,5,9,27,29,31,32,36,41],methodolog:[1,3],metric1:[3,29],metric2:[3,29],metric3:29,metric4:29,metric5:29,metric:[0,1],metric_alert:33,metric_check_fil:[34,37],metric_expiration_tim:33,metric_min_averag:33,metric_min_average_second:33,metric_nam:[31,32,33,35,36],metric_namespac:29,metric_timestamp:29,metric_trigg:33,metric_valu:36,metric_vars_fil:29,metricsgraph:24,mget:20,microframework:8,midnight:14,million:[27,39],min_average:[3,29,33],min_average_seconds:[3,29],min_period:26,min_tolerable_length:[1,29],mind:[1,14,29],mini_duration:[20,29],mini_namespace:29,minim:[2,3,5,18,25],minimum:29,minor:23,minu:[31,32,34,36],minut:[1,3,13,15,27,29,31,32,33,34,36,39],mirage_alert:[16,29],mirage_algorithm:[16,29],mirage_algorithms:[15,29,36],mirage_check_path:[15,29],mirage_consensus:29,mirage_crucible_enabled:[5,29],mirage_data_folder:[15,29],mirage_enable_alerts:[15,29],mirage_enable_second_order:29,mirage_stale_seconds:[15,29],mirageag:36,mirror:5,miscellan:5,misconfigur:41,miss:15,mitig:[2,29,39,41],mix:41,mkdir:[6,13,15,28],mkdir_p:[29,33,36],mock:26,mod_wsgi:41,mode:[2,14,18,29],model:[1,2,3,15,18,27,31,32,34,36],modif:[4,22],modifi:[1,2,3,13],modul:[2,5,7],modular:18,moment:[24,26,27,29],momentj:29,monit:[17,39,40],monitor:[3,12,14],month:27,more:[1,2,3,4,5,8,9,10,11,15,18,22,27,28,29],morn:15,most:[1,2,3,13,15,29,33,34,39,40],mostli:[29,42],move:[26,29,31,32,34,36,40],msg:41,msgpack:26,msgpack_python:6,much:[1,14,15,22,27,30,39,40,41,42],multi:[15,27],multipl:[3,14,15,27,29,31,32,37],multiprocess:1,must:[1,2,15,18,28,29,34,41],mute:2,mutliprocess:29,mysql:[2,13,18],mysql_id:41,mysql_insert:37,mysql_select:[29,37],n2n7fwomvnvkjr_lh8mazictwx7e3v5zv8mvhz8efv0g00:4,nagio:18,name:[1,4,5,9,29,31,32,33,34,35,36,38,40,41],namespac:[0,1,2,3,10,15],nativ:41,natur:[7,13,27,29,30,41],ncurs:[25,28],neater:41,necessari:[13,14,28,40],necessarili:[5,8,15,27,29],need:[1,2,4,6,7,9,10,13,18,22,26,29,31,32,34,36,38,39,40,41],neeed:29,neg:3,negat:[16,29],negate_analyzer_alert:36,negate_analyzer_alerts:29,negate_hipchat:36,negate_syslog:36,neither:9,neocortex:[1,27],nest:29,network:[6,39],never:[2,15,29,30],next:[6,31,32,34,36],nginx:41,nice:[3,27],nicolasmil:27,node:[13,17,29],nois:[3,10,15,18,27,29,31,32,34,36],noisi:[3,10,15,18,27,29,33,34],nometr:[3,29],non:[0,14,15,31,32,34,36],none:[1,17,29,37,38],normal:[4,9,10],normalis:15,nose:26,note:[0,1,3,6],noth:29,notic:29,now:[1,2,3,4,6,8,10,13,15,18,20,22,24,27,28,29,38,39,40,41,42],number:1,number_of_anomalies_to_store_in_panorama:29,numenta:27,numer:41,numpi:[6,18,26,27],numstat:29,nupic:10,object:[29,35,36],oblig:1,obviou:[9,10,27],obvious:13,occassion:29,occur:29,oculu:[20,27,29,35,39],oculus:39,oculus_host:29,off:[1,3,10,11,15,29,33,34,39],offic:15,office:15,offload:[2,5,41],often:[1,5,29,41],okai:39,old:[6,11],older:[9,26,29,35,42],onc:[0,13,20,31,36],once:[3,6,9,10,11,13,18,28],one:[20,30],ongo:[7,10],onli:[1,2,3,6,9,10,11,14,15,18,19,27,29,33,39,41],onlin:10,only:[3,26,29,42],onto:[11,29,39],open:[4,18,41,42],openssl:28,oper:[5,13,14,18,27,29,30],oppos:20,opt:[0,2,3,4,13,19,28,29,40],optim:[2,18],optimis:14,optimiz:1,optimum:[1,29,39,40],option:[9,13,15,26,29,30,41],optional:[13,28],opts:0,orang:41,orchestr:41,order:[2,9],ordereddict:26,org:[4,6,28,41],origin:[1,2,4,10,18],oscil:29,other:[1,3,5,6,8,10,13,15,18,19,27,29,30,31,32,34,36,40,41,42],otherapp:29,otherwis:29,our:[2,15,27],out:[5,10,11,13,15,29,31,32,34,36,39,40],output:[4,22,29],output_object:29,outsid:[31,32,34,36],outstandingli:18,over:[4,9,10,15,17,27,29,30,31,32,34,35,36,39],overal:[1,2,27,29,30],overcom:18,overhead:[1,2,27,28],overkil:41,overrid:41,overridden:29,overview:[10,12],overwrit:[24,29,42],overwritten:14,own:[3,5,10,13,14,15,26,27,29,30,39,41],pack:[9,20,29,41],packag:[4,6,12,13,16,18,22,26,28],packet:29,page:[2,12,13,38],pagerduti:[0,3,29,31,32],pagerduty_enabled:[13,29],pagerduty_opts:[13,29],pain:14,paint:29,panacea:10,panaroma:[29,38],panda:[13,18,23],pandas_version:[26,29],panorama:[2,5],panorama_anomali:38,panorama_check_path:29,panorama_database:29,panorama_dbhost:29,panorama_dbport:29,panorama_dbuser:[19,29],panorama_dbuserpass:[19,29],panorama_enabled:[3,13,29],panorama_expiry_time:[19,29],panorama_processes:29,panorama_request:38,panoramaag:37,par:10,parallel:15,paramet:1,parent:[1,3,29,31,32,34,42],parent_pid:[31,32,33,34,35,36,37],pars:[14,38],parser:26,part:[2,18,20,40],parti:29,particular:[1,27],partli:10,pass:[5,9,29,31,32,34,38,41],passiv:[3,18],password:[13,19,29,38,41],past:[1,29,30,31,32,36],patch:23,path:[0,4,13,15,19,22,23,28,29,33,34,36,37,40],path_to_your_skyline_repo_directory:4,patsi:[6,26],pattern:[2,3,5,9,10,15,23,25,27,40,41],paus:[14,29],pdf:15,peak:[15,27,39],peaki:[3,27],pep20:42,per:[1,3,15,23,24,25,27,29,31,33,36,39,41],percent:2,perfect:[3,10],perhap:[4,10,26,27],period:[1,10,15,27,29,41],permiss:13,perspect:14,phone:15,pick:[1,29],pickle_port:29,pickle_safe:35,pickle_str:35,pictur:[15,18],pid:29,pid_path:29,pink:29,pinpoint:14,pip:[6,10,13,23,25],pipe:29,pipelin:[10,14,18,30],pkg_resourc:28,pkill:6,place:6,plain:40,plantuml:4,pleas:[4,6,29,40,41],plethora:2,plot:[1,5,10,15,23,29,42],plot_redis_data:[1,23,29],png:[4,5,10,15,25],pnorama:40,pocoo:41,point:[1,2,3,8,9,10,13,14,15,18,20,26,27,29,31,32,33,34,36,40],pool:15,pop:11,popul:[9,31,32,35,40],port:[4,6,8,9,11,13,18,29,35,38,41],portion:3,posit:3,possibl:[1,2,3,13,26,27,28,29,39,41],post:2,potenti:14,power:2,pr0ject:28,practic:13,pre:[2,29],predict:9,prefix:[28,29],present:[1,41],pressur:39,presum:9,pretti:8,prettier:41,prevent:[9,29,42],previou:6,primari:9,primer:9,print:[29,37],probabl:[1,2,3,8],problem:[10,17],procedur:29,process:[1,2,3,6,7,10,11,13,14,15,17,18,19,29,31,32,33,34,35,36,37,39,40],prod:14,produc:[22,31,32,34,36],product:[9,14,29,39],profil:[2,27],project:[0,4,6,10,13,18,28,31,32,34,36],proper:[1,25,41],properli:[13,41],propos:20,protocol:[9,29],prove:[1,18],proven:3,provid:[2,3,5,10,13,22,27,29,41],provis:13,proxi:[13,41,42],pseudo:29,publish:[15,18,41],pubsub:41,pull:[1,3,13,23,24],pure:27,purg:[11,35],purpl:29,purpos:[2,14,17,42],put:[11,39],py2712:[13,28],pyc:4,pyculiar:27,pycurl:26,pygerduti:[26,29],pygpgm:26,pypa:26,pypars:26,pypi:[25,27],python2:[4,13,28],python:[0,1,2],python_major_version:[13,28],python_vers:34,python_version:28,python_virtualenv:[0,4,13,28],python_virtualenv_dir:[0,13,28],pytz:26,quantiti:18,queri:[1,3,5,15,18,20,29,37,38,41],question:27,queu:5,queue:[5,9,11,29,31,32,35,39],quick:[9,27],quicker:2,quickest:40,quit:[2,3,4,13,14,27,30,40,42],radar:27,ram:[1,2,13,39],ran:2,rang:[1,3,15,18,23,29],rather:[3,8,31,36,40,41],rational:5,raw_timeseri:[31,32],rcarbon:17,reach:[15,18],read:[1,11,29,35],read_al:35,readlin:[25,28],readline5:28,real:[2,9,13],realist:[9,10,15],realiti:[9,14,42],realli:[4,10,13,15,17,22,27,29,30,39,41,42],realm:[3,27],realtim:[27,29],reason:[1,2,8,14,29,41],rebrow:[18,22,38],rebrow_kei:38,rebrow_server_db:38,receiv:[1,13],recent:[3,9],recipi:[29,31,32],recogn:29,recommend:[13,14,28,29,40,41],record:[2,19,29,41],record_algorithm_error:[31,36],red:[1,41],redhat:25,redi:[1,3,5],redis_socket_path:[13,29],reduc:[2,15,27,29,31,32,34,36,39],redund:9,refer:23,referenc:[22,40],regard:[13,41],regardless:[28,40,41],reinstal:26,rel:14,relai:[9,17,29],relat:[1,2,4,5,9,13,22,23,24,28,29,39,40,41,42],relay_method:9,releas:12,relev:[27,29,39,41],reli:1,reliabl:[12,29],remain:[2,29],remark:27,rememb:[13,19],remov:[18,27],render:[4,24,29,41,42],repeat:13,repetit:7,replac:[6,22,40,41],repo:[19,22,25],report:[9,14,29,31,36,41],repositori:6,represent:[1,27],request:[1,6,26],requir:[2,4,5],requires_auth:38,resolut:[9,15,18,29,36,39],resoluton:29,resolv:17,resourc:[4,5,10,18,22,31,39],respect:[1,2,11,31,32,34,35,36],respons:[1,11,15,19,35,38],restart:[11,13,14,15,17],restrict:[13,22,26,29],restructur:[4,18,22,42],result:1,retent:[5,15,29],retriev:[15,41],retrospect:5,revers:[13,41,42],revert:29,review:[10,40],reward:27,riemann:10,right:[6,14],roadmap:[10,12],robust:1,role:[5,10,23],roll:29,roof:2,room:[0,29,31,32],roomba_grace_time:29,roomba_processes:29,roomba_timeout:[29,42],rotat:14,rout:[15,27],row:27,rpm:[15,26,27,29],rsyslog:[14,29],rubi:27,ruk2:14,rule:[9,13],run:[1,2],run_algorithm:34,run_optimized_workflow:1,run_selected_algorithm:[31,32,33,36],run_tim:[29,40],run_timestamp:[34,36],runawai:14,rundown:22,runtim:2,safe:[22,38],safeunpickl:35,sai:[2,3,14,22],said:[2,10,13,17,40,42],sake:40,same:[1,2,17,18,27,29,41],sampl:[3,14,19,29,31,32,34,36],sanctuari:15,sandi:[1,39],sane:39,saturdai:15,save:29,scapel:3,scenario:14,schema:[19,20,29],scheme:20,scientif:[18,27],scikit:[6,10,27],scipi:[6,18,26,27],scope:42,score:[27,31,32,34,36],script:[11,14,17,19],search:[12,19,41],season:[1,10,15,27],seasonal_pub1:15,seasonal_pub_freddi:15,second:[1,2,3,9,15,17,19,20,29,31,32,34,36,39],second_order_resolution_hours:[15,29],second_order_resolution_second:36,section:[13,28,40,41],secur:[13,22],sed:4,see:[1,2,3,9,10,11,13,14,15,18,19,20,22,23,28,29,39,40,41,42],seed:13,seed_data:13,seem:[3,4,9,10,15,22,30,41],seen:[2,15],select:[15,24,29,31,32,33,36,37,38,41],self:[18,29,31,32,33,35,36,37],send:[1,2,3,9,10,15,26,29,31,32,38],send_graphite_metr:[29,32],sender:29,sensit:[15,29,31,32,34,36],sent:[0,1,15,29,30],sep:6,separ:[3,29,30,42],seq:33,seri:[23,26,29,31,32,34,36],serv:[13,22,38,41,42],server:[1,2,3,4,6,11,13,19,29,38,39,40,41],server_metrics_name:[13,29],servic:[1,9,11,13,15,19,20,22,27,29,41],set:[0,1],setup:[2,3,10,13,25,28,40,42],sever:29,shall:42,shard:[29,40],share:[11,29,39],shelf:10,shewhart:1,shift:41,ship:29,should:[0,1,2,3,4,9,13,14,17,22,26,27,29,35,36,39,40,41,42],show:[2,23,38],shuffl:5,side:[8,38,41],sigma:[1,31,32,34,36],signal:[15,29],signific:[3,5],similar:[1,3,5,10,27,29,39],simpl:[1,2,4,5,10,17,18,26,29,31,32,34,36,41,42],simplejson:26,simpler:8,simplest:5,simpli:[1,2,9,10,14],simplifi:4,sinc:[6,22,29,39,42],sing:10,singl:[1,2,3,29,41,42],site:4,situ:40,six:26,size:[1,9,18,29,31,32,34,36,39],skew:[2,29,41],skip:[3,29],skip_list:[29,35,39],skip_mini:35,sky:12,skylin:[0,1,2,3,4,5],skyline2711:[0,4],skyline_app:[14,29,32,34],skyline_dir:40,skyline_funct:[16,24],skyline_htpasswd:13,skyline_test:[0,29,40],skyline_tmp_dir:[2,29],skyline_vers:16,slack:29,slack_enabled:29,slash:29,sleep:2,slept:2,slightli:7,slope:27,small:[2,4,9,22,29,40],smaller:[2,12,29,31,32,34,36],smirnov:[31,32,34,36],smtp_opts:[13,29],snakeviz:2,snapshot:5,snippet:9,snychronis:9,sock:[13,29,35],socket:[11,13,29],sole:2,solid:18,solv:17,some:[2,3,6,7,9,10,13,14,15,17,18,22,23,25,26,27,28,29,30,39,40,41,42],someapp:29,someon:[25,41],someth:[1,4,14,17,18,22,39,40,41,42],sometim:29,somewhat:[2,3,5,15,18,42],soon:[9,10],sorri:9,sort:[1,13],sourc:[0,3,5,6,9,13,15,18,28,29,31,32,33,34,35,36,37,38],space:[5,10,14],spars:27,spawn:[1,2,3,29,31,32,36,37,42],spec:2,special:[2,20],specif:[1,2,3,5,10,13,15,18,27,28,29,38,41],specifi:[3,24,29,31,32,42],spectra:27,speed:[29,39],spent:8,spew:[31,36],sphinx:4,spike:2,spikei:15,spin_process:[1,31,32,33,34,36,37],spit:39,sql:19,sqlite:28,squar:[31,32,34,36],squeez:6,src:[2,6,40],ssd:[1,2,13,39],ssl:26,stabl:[6,29],stack:10,stackoverflow:24,stage:13,stale:[1,29],stale_period:[1,29],stall:29,stand:2,standard:[3,27,31,32,34,36,40,41],standardis:5,stanwai:[5,15],start:[1,3,6,9],stat:[2,5,9,26,27,29],state:[13,18,22,26,29,41],stationar:[31,32,34,36],stationari:[31,32,34,36],statist:1,stats_count:[15,27,29],statsd:[18,29],statsd_host:30,statsmodel:[6,26],statu:29,stddev:26,stddev_from_averag:[2,29,31,32,34,36],stddev_from_moving_averag:[2,29,31,32,34,36],stdout:14,steinbach:[18,41],step:2,stick:8,still:[2,3,9,15,18,26,33,34,39,40,41],stmp:29,stop:[11,18,29,31,36,40],storag:[5,20,27,29],store:[1,5,10,18],str:[29,31,36,37,38],straight:[10,13],strategi:[1,29,31,32],stream:[9,14,18,27,35],strictli:42,string:[9,20,29,31,35,36,37,38],structur:[5,18,22,28],struggl:6,stuff:8,subdomain:29,submit:[14,22,29],submodul:16,subpackag:16,subprocess:29,substanti:[2,5,40],substitut:28,substr:[31,32],subtract:[31,32,34,36],sudo:6,suffer:20,suffic:[9,24],suffici:[3,15,17,39],suggest:[2,4,22,25],suit:[3,5,15,28,29,33,34],sum:[18,29,39],summer:15,sundai:15,supervisord:40,support:[9,20,26,27,29],sure:[1,28,29],surfac:[1,3,15,29,41],surface_graphite_metric_data:36,surpress:29,surprisingli:2,svg:4,sword:3,synchronis:9,syslog_enabled:29,syslog_opts:29,system:[9,10,15,18,26,27,28,29],tail:[13,40],tail_avg:[31,32,34,36],take:[10,13,15,29,39,40,41],tame:18,tar:[25,28],target:29,target_hours:29,tbd:5,technic:13,techniqu:27,technolog:18,tell:9,tempor:15,ten:34,tensorflow:10,term:[2,3,4,5,9,14,15,18,22,26,27,29,30,31,32,34,36,40,41],termin:[29,42],test1:[29,37],test2:[29,37],testament:18,tgz:28,than:[1,2,3,5,8,9,10,13,15,17,18,27,29,31,32,33,34,35,36,40,41,42],thank:[2,4],the_user_password:29,theano:10,thei:[1,2,3,10,11,15,18,20,29,30,34,39,40,41,42],them:[0,1,9,10,11,13,18,29,31,32,34,39,40],themselv:[27,31,36],theori:22,therefor:[2,8,13,14,22,39,41],thi:[1,2,3,4,5,6,8,9,10,13,14,15,17,18,20],thicker:41,thing:[3,7,8,9,10,13,14,18,23,25,26,27,29,30,36,38],think:[9,10,15],thinner:41,this_host:37,those:[2,15,27,29],thousand:18,thread:[14,29,31,32,33,34,35,36,37,39],three:[31,32,34,36],threshold:[2,3,15,18],through:[1,2,3,5,6,9,10,11,14,26,29,30,39,40,41],ticker:41,ticket:15,time:1,timedrotatingfilehandl:14,timefram:27,timelin:[17,39],timeout:[13,29,31,32],times_run:[2,29],timeseri:[1,2,3,5,10,14],timeseries_fil:34,timeseries_nam:34,timestamp:[9,20,29,34,41],timestep:35,timezon:[24,29,41],tin:3,tm6pueauqm8ha6khnqqsvd12pqahlgrxad3yslxrwthego_fn7zyhrbcm7jk4ktmsd8nbqyqu5gtrqnyuxhm68y44n3wa:4,tmp:[2,13,29,31,36],todai:5,todo:[31,32,36],ton:[31,36],too:[1,2,3,5,9,10,15,17,18,27,29,39,40,42],tool:[1,2,15],tooshort:[1,29],tornado:26,total:[1,2,27,29,41],total_metr:[40,41],total_tim:[2,29],tps:[1,39],traceback:[31,36],traceback_format_exc:[31,36],traceback_format_exc_str:[31,36],tradit:22,traffic:39,trail:[15,29],train:[1,27],transmit:29,transpar:22,transport:[9,27,30],tree:[5,42],trend:[31,32,34,36],tri:26,trigger:[0,1],trigger_alert:[31,32,33,36],trigger_negat:36,trigger_value:[3,29],trim:[11,29,35],trivial:[10,14],troubl:29,trough:[15,27],truli:27,trust:41,truth:18,tupl:[0,1,3,10,14,15,19,29,31,32,37,40],turn:[29,41,42],tutori:6,tweak:[31,32,34,36],twice:29,two:[2,3,9,11,20,29,31,32],type:[3,4,11,13,15,24,27,29,31,35,36,37,38],ubuntu:25,udp_port:29,ugli:3,ultim:1,uml:[4,23,25],unab:42,unauthor:41,under:[27,39,42],understand:[10,14,15,30],undertaken:[2,4,22],undoubtedli:[2,14],unexpectedli:29,unfortun:27,uninterest:30,unintuit:14,uniqu:[1,3,20,31,32],unique_metr:[3,31,32],unique_nohash:33,unittest2:26,unix:[29,41],unixsocket:13,unixsocketperm:13,unknown:29,unless:[10,13,15,26,29],unlimited:29,unneed:41,unoptim:[2,29],unpack:[31,32],untick:27,until:29,until_timestamp:[29,41],updat:[1,2,5,6,13,20,23,24,25,27,42],update:[6,23],upfront:[10,27],upgrad:[2,13,26,40],upgrade:[12,13],upon:1,upper:[23,29,39],upqex2a6u4eyzcqwstdgpxdlkrywx1bajegrx0ufdtsrugibttvvxslxo53hmxsw:4,url:[6,29,38],urlgrabb:26,urlsafe_base64_encod:38,usag:[2,29,37],use:[13,28],use_flow_control:9,use_python:13,used:[27,29],user:[10,13,14,15,19,29,30,40,41,42],usernam:[29,38,41],usual:13,utc:29,util:[0,9,13,31,32,33,34,36],vacuum:35,valid:[2,22,29,38,41],valu:1,values:37,variabl:[2,3,10,13,15,24,26,29,42],variat:39,variou:[15,18,27,31,41],varnish:27,vcore:[1,39],vcpu:[2,13],veri:[1,2,3,9,13,14,15,17,18,20,29,30,40,41,42],verif:41,verifi:[26,39],verify_alert:0,version:[2,6,9,13,18,23,24,25,26],very:[3,29],via:[9,10,13,14,15,18,22,26,27,29,31,32,41,42],viabl:27,view:[1,10,13,14],vim:6,vip:15,virtaulenv:26,virtualenv:[0,12,13,26],visual:[1,8,27,41],visualis:[29,41],vitualenv:26,vmprof:2,volum:2,vote:1,wai:[1,2,9,13,14,18,20,28,40,41,42],wait:[13,29,31,32],want:[0,1],warn:[2,28],wasn:18,watch:15,web:[6,8],webapp:[1,7],webapp_allowed_ips:[13,29,38,41,42],webapp_auth_enabled:29,webapp_auth_user:[13,29,41,42],webapp_auth_user_password:[13,29,41,42],webapp_fixed_timezone:[29,41],webapp_ip:[6,13,29,41],webapp_ip_restricted:29,webapp_javascript_debug:29,webapp_port:[13,29,41],webapp_server:29,webapp_user_timezone:[29,41],week:15,weekdai:15,weekend:15,weekli:15,weigh:2,welcom:1,well:[1,3,6,13,15,18,27,29],went:[2,15],were:[1,2,8,9,22,25,27],werkzeug:[26,41],wget:[25,28],whatev:29,wheezy64:6,when:[1,2,5,9,10,13,14,15,20,27,29,31,32,33,34,35,36,37,40],where:[2,3,9,15,27,29,39,40,41,42],wherea:3,wherev:[13,18,28],whether:[2,3,13,14,22,24,29,31,32,33,34,36,40],which:[1,2,3,4,5,6,9,10,13,14,15,17,18,22,23,28,29,30,31,32,34,36,37,40,41,42],whichev:40,whisper:[5,40],whole:[3,10,29],whose:41,width:29,wildcard:29,win:[2,27,40],window:[15,41],winter:15,wise:[20,29],wish:[1,14,29],within:[3,15,17,26,27,29,41,42],without:[2,3,4,5,6,10,18,31,36],wonder:30,word:[2,28],work:0,worker_processes:[29,35,39],workload:[2,15],works:3,worth:[9,15,28,39],worthi:42,would:[1,2,3,10,11,14,15,26,27,29,30,40,41],wow:10,wrap:25,write:[8,14,29,31,39],write_data_to_fil:29,write_to_fil:29,written:[4,17,29,31,36],wrong:14,wsgi:41,wsgirequesthandl:41,www:28,x86_64:26,xvluqwubxlarynq3nmhwrmb7l8stq07indqhvno3k5sprhvkoqlkoi750z8aiyo0pxsqsv:4,year:[2,27],yet:2,you:[0,1,2,3,6,9],your:[0,1,2,3],your_:13,your_configuration:6,your_domain:29,your_graphite_host:29,your_hostname:29,your_pagerduty_auth_token:29,your_pagerduty_service_api_kei:29,your_server_ip_address:13,your_skyline_dir:40,your_skyline_host:9,your_skyline_ip:13,yum:[26,28],zip:13,zlfbjwcn3bpdawozmmtklqlo0iigw0eky4ewwrahuqosnlo5yu:4,zlib1g:[25,28],zlib:[25,28],zone:24,zxvf:28},titles:["Alert testing","Analyzer","Analyzer Optimizations","Boundary","Building documentation","Crucible","Debian and Vagrant Installation Tips","Development","Development - Webapp","Getting data into Skyline","Getting started","Horizon","Skyline documentation","Installation","Logging","Mirage","skyline","Monitoring Skyline","Overview","Panorama","Redis integration","Release Notes","1.0.0 - the crucible branch","1.0.1 - the crucible branch","1.0.2 - the crucible branch","1.0.3 - the crucible branch","Requirements","Roadmap","Running Skyline in a Python virtualenv","skyline package","Skyline and friends","skyline.analyzer package","skyline.analyzer_dev package","skyline.boundary package","skyline.crucible package","skyline.horizon package","skyline.mirage package","skyline.panorama package","skyline.webapp package","Tuning tips","Upgrading","Webapp","What’s new"],titleterms:{"default":41,"function":41,"new":[18,42],access:41,add:10,adding:9,agent:[31,32,33,34,35,36,37],alert:[0,1,31,32],alerts:10,algorithm:[1,2,3,31],algorithm_breakdown:[22,42],algorithm_except:29,algorithms_dev:32,analyz:[1,2,10,15,22,31,40,42],analyzer_dev:32,anomali:10,anomaly_breakdown:[2,42],apach:41,app:[10,14,18],applic:41,approxim:[2,41],architectur:18,audienc:13,auth:41,autom:13,backend:38,basic:41,benchmark:2,beta:42,between:15,boundari:[3,10,33,42],boundary_alert:33,boundary_algorithm:33,box:6,branch:[22,23,24,25,42],brief:18,buckyserv:30,build:4,can:15,cannot:15,chang:[26,40,42],check:5,clone:40,close:30,closest:41,com:15,conceptu:42,configur:[3,6,13],consider:2,constel:27,content:[29,31,32,33,34,35,36,37,38],count:2,creat:[19,28],crucibl:[5,10,22,23,24,25,34,42],crucible_algorithm:34,data:[9,27],databas:19,debian:6,depend:[6,28],deploi:41,deploy:39,detect:10,detect_drop_off_cliff:3,develop:[7,8],differ:15,directori:40,document:[4,12,22,42],doe:[1,3,5,15],dry:7,enabl:[10,15],environ:26,error:27,etsy:42,exampl:[1,15],exception:1,execut:2,explanat:1,extra:6,famili:26,feedback:30,file:5,firewal:41,fits:27,flask:8,friend:30,full_duration:9,further:27,get:[6,9,10],grade:41,graph:[1,2],graphit:[17,27,30,40],gunicorn:[38,41],handl:[22,42],have:40,histori:18,horizon:[10,11,35],how:20,howto:28,http:41,improv:27,improve:[22,42],increment:10,indice:12,infrastructur:41,installat:[6,13],integr:20,intend:13,interpretor:4,ionospher:27,issu:22,journei:10,just:10,kiss:17,known:22,learn:27,limit:15,listen:[9,11,35],log:[14,17,22,40,41,42],logstash:30,look:[18,40],loop:30,machin:27,manag:[13,42],mani:30,matter:15,messagepack:9,meteor:27,methodolog:14,metric:[2,20,22,40,42],might:10,mini:20,mirag:[1,10,15,36,42],mirage_alert:36,mirage_algorithm:36,modifi:14,modul:[10,29,31,32,33,34,35,36,37,38],monitor:17,more:30,multiprocess:2,mysql:19,nab:27,namespac:[20,40],nasa:27,neg:27,negat:36,normal:15,note:[9,13,21,40],number:2,nupic:27,nutshel:18,old:18,optim:[22,40],optimis:42,optimiz:2,order:15,origin:27,overlaid:27,overview:[15,18,41],packag:[29,31,32,33,34,35,36,37,38],panda:26,panorama:[10,19,22,37,41,42],paramet:10,percentag:27,perform:[2,22,27,42],philosophi:1,pickl:[9,17],pip:26,posit:27,predict:27,preserv:14,probabl:10,process:42,processor:2,product:41,program:10,progress:18,psuedo:41,push:1,python:[4,6,26,27,28],rank:2,rate:[2,15],real:15,rebrow:41,recent:26,redhat:26,redi:[6,20],relationship:30,releas:[21,22],reliabl:39,request:27,requir:[6,26],restrict:41,result:2,riemann:30,roadmap:27,roomba:[11,35],rst:4,rule:41,run:[3,28],run_optimized_workflow:2,scoreboard:27,secur:41,sensu:30,set:[2,9,10,15,29,40],setuptool:22,simplifi:18,skylin:[6,9,10,12,14,16,17,18,27,28,29,30,31,32,33,34,35,36,37,38,40,42],skyline_funct:29,skyline_vers:29,smaller:39,smtp:1,snyc:9,sphinx:[22,42],start:10,statsd:30,step:[13,40],store:20,structur:40,submodul:[29,31,32,33,34,35,36,37,38],subpackag:29,sudo:[13,28],syslog:14,tabl:12,tcp:9,tenfold:15,test:0,thi:22,thing:40,time:[2,9,41,42],timeseri:[15,20,27],tip:[6,39],tmpf:2,trigger:2,tune:[2,22,39,42],txt:[5,26],udp:9,update:27,upgrade:40,usage:5,using:[2,41],vagrant:6,valu:2,version:28,view:15,virtualenv:28,want:10,web:41,webapp:[8,10,22,38,41,42],weight:2,what:[1,3,5,15,18,20,42],wheezi:6,why:[5,15],work:[2,18],worker:[11,35],workflow:[2,18],world:15,wtf:4,you:10,your:4,zone:41}}) \ No newline at end of file diff --git a/docs/_build/html/webapp.html b/docs/_build/html/webapp.html index 5c027f8c..139464ca 100644 --- a/docs/_build/html/webapp.html +++ b/docs/_build/html/webapp.html @@ -214,7 +214,7 @@

      Webapp

      A basic overview of the Webapp¶

      -A simplified workflow of Skyline +A basic overview of the Webapp
      diff --git a/docs/_build/plot_directive/mirage-1.pdf b/docs/_build/plot_directive/mirage-1.pdf index 95f986550548f358e415a7fb3cf3e6aade17d07b..932c982a0c4e587dc0638ac7d5c223a9981bc10b 100644 GIT binary patch delta 37 tcmeygit*Db#trv;CbRmgPrm1)zFEij2_vV4fuW(1k%5uXW=a1@HUKW14O;*J delta 37 tcmeygit*Db#trv;CbRmgPrm1)zFEij2_vVuv4Nqbv4x@eW=a1@HUKYA4R8Pe diff --git a/docs/images/crucible/mirage/skyline.mirage.overview.png b/docs/images/crucible/mirage/skyline.mirage.overview.png new file mode 100644 index 0000000000000000000000000000000000000000..079c20821e36cc59077b17e6d668502792d89b82 GIT binary patch literal 64821 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�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 for a clearer picture. -:blak3r2: Our app logs phone calls for businesses and I want to be able to - detect when VIP phone systems go down or act funny and begin flooding us with - events. Our work load is very noisy from 9-5pm... where 9-5 is different for - each customer depending on their workload so thresholding and modeling isn't - good. +Why Mirage? +----------- -:earthgecko: Yes, Mirage is great at user defined seasonality, in your case - weekday 9-5 peaks, evening drop offs, early morning and weekend lows - multi - seasonal, Mirage is the ticket. - Your best bet would be to try 7days (168) as your SECOND_ORDER_RESOLUTION_HOURS - value for those app log metrics, however, you may get away with a 3 day - window, it depends on the metrics really, but it may not be noisy at 3 days - resolution, even at the weekends. - Also bear in mind, Mirage does some "normalizing" if your have aggregations - in Graphite (e.g retentions), due to Mirage probably pulling aggregated data, - however it is analyzing the timeseries at the aggregated resolution so it is - "normalised" as the data point that Analyzer triggered on is ALSO aggregated - in that timeseries resolution. So intuitively on may think it may miss it in - the aggregation then. True, but Analyzer will likely trigger on the next run - again if it IS anomalous, anomalous metrics normally trigger multiple, - multiple times (hence the EXPIRATION_TIME settings), so when Analyzer pushes - to Mirage again, each aggregation is more likely to trigger anomalous, IF it - is anomalous at the user defined full duration. A little flattened maybe, a - little lag maybe, but less noise, more signal. +Analyzer's :mod:`settings.FULL_DURATION` somewhat limits Analyzer's usefulness +for metrics that have a seasonality / periodicity that is greater than +:mod:`settings.FULL_DURATION`. This means Analyzer is not great in terms of +"seeing the bigger picture" when it comes to metrics that have a weekly pattern +as well as a daily patterns for example. +Increasing :mod:`settings.FULL_DURATION` to anything above 24 hours (86400) is +not necessarily realistic or useful, because the greater the +:mod:`settings.FULL_DURATION`, the greater memory required for Redis and the +longer Analyzer will take to run. What Mirage can and cannot do ============================= @@ -85,6 +64,9 @@ consumption in an office building is a good example of a multi-seasonal data set For now let us just consider the daily and weekly seasonality. +The difference between the Analyzer and Mirage views of a timeseries +-------------------------------------------------------------------- + .. plot:: # A bit of a contrived example... @@ -224,25 +206,55 @@ For now let us just consider the daily and weekly seasonality. As we can see above, on a Saturday morning the energy consumption does not increase as it normally does during the week days. Analyzer would probably find -the metric to be anomalous if :mod:`settings.ANALYZER_CRUCIBLE_ENABLED` was set -to 86400 (24 hours), Saturday morning would seem anomalous. +the metric to be anomalous if :mod:`settings.FULL_DURATION` was set to 86400 (24 +hours), Saturday morning would seem anomalous. However, if the metric's alert tuple was set up with a ``SECOND_ORDER_RESOLUTION_HOURS`` of 168, Mirage would analyze the data point against a week's worth of data points and the Saturday and Sunday daytime data points would have less probability of triggering as anomalous. *The above -image is plotted as if the Mirage ``SECOND_ORDER_RESOLUTION_HOURS`` was set to +image is plotted as if the Mirage* ``SECOND_ORDER_RESOLUTION_HOURS`` *was set to 172 hours just so that the trailing edges can be seen.* +A real world example with tenfold.com +------------------------------------- + +:blak3r2: Our app logs phone calls for businesses and I want to be able to + detect when VIP phone systems go down or act funny and begin flooding us with + events. Our work load is very noisy from 9-5pm... where 9-5 is different for + each customer depending on their workload so thresholding and modeling isn't + good. + +:earthgecko: Yes, Mirage is great at user defined seasonality, in your case + weekday 9-5 peaks, evening drop offs, early morning and weekend lows - multi + seasonal, Mirage is the ticket. + Your best bet would be to try 7days (168) as your SECOND_ORDER_RESOLUTION_HOURS + value for those app log metrics, however, you may get away with a 3 day + window, it depends on the metrics really, but it may not be noisy at 3 days + resolution, even at the weekends. + +Mirage "normalizes" +------------------- + Mirage is a "tuning" tool for seasonal metrics and it is important to understand that Mirage is probably using aggregated data (unless your Graphite is not using retentions and aggregating) and due to this Mirage will lose some resolution resulting in it being less sensitive to anomalies than Analyzer is. +So Mirage does some "normalizing" if your have aggregations in Graphite (e.g +retentions), however it is analyzing the timeseries at the aggregated resolution +so it is "normalised" as the data point that Analyzer triggered on is ALSO +aggregated in the timeseries resolution that Mirage is analyzing. +Intuitively one may think it may miss it in the aggregation then. This is true +to an extent, but Analyzer will likely trigger multiple times if the metric +**IS** anomalous, so when Analyzer pushes to Mirage again, each aggregation is +more likely to trigger as anomalous, **IF** the metric anomalous at the user +defined full duration. A little flattened maybe, a little lag maybe, but less +noise, more signal. + Setting up and enabling Mirage ============================== - By default Mirage is disabled, various Mirage options can be configured in the ``settings.py`` file and Analyzer and Mirage can be configured as appropriate for your environment. @@ -252,20 +264,76 @@ absolute path): .. code-block:: bash - sudo mkdir -p $MIRAGE_CHECK_PATH - sudo mkdir -p $MIRAGE_DATA_FOLDER + mkdir -p $MIRAGE_CHECK_PATH + mkdir -p $MIRAGE_DATA_FOLDER + + +Configure ``settings.py`` with some :mod:`settings.ALERTS` alert tuples that +have the ``SECOND_ORDER_RESOLUTION_HOURS`` defined. For example below is an +Analyzer only :mod:`settings.ALERTS` tuple that does not have Mirage enabled as +it has no ``SECOND_ORDER_RESOLUTION_HOURS`` defined: + +.. code-block:: python + + ALERTS = ( + ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> Analyzer sends to alerter + ) + +To enable Analyzer to send the metric to Mirage we append the metric alert tuple +in :mod:`settings.ALERTS` with the ``SECOND_ORDER_RESOLUTION_HOURS`` value. +Below we have used 168 hours to get Mirage to analyze **any** anomalous metric +in the "stats_counts.http.rpm.publishers.*" namespace using using 7 days worth +of timeseries data from Graphite: + +.. code-block:: python + + ALERTS = ( + # ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> Analyzer sends to alerter + ("stats_counts.http.rpm.publishers.*", "smtp", 300, 168), # --> Analyzer sends to Mirage + ) + +Order Matters +------------- + +.. warning:: It is important to note that Mirage enabled metric namespaces must + be defined before non Mirage enabled metric namespace tuples as Analyzer uses + the first alert tuple that matches. + +So for example, with some annotation + +.. code-block:: python + + ALERTS = ( + ("skyline", "smtp", 1800), + ("stats_counts.http.rpm.publishers.seasonal_pub1", "smtp", 300, 168), # --> To Mirage + ("stats_counts.http.rpm.publishers.seasonal_pub_freddy", "smtp", 300, 168), # --> To Mirage + ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> To alerter + ) +The above would ensure if Analyzer found seasonal_pub1 or seasonal_pub_freddy +anomalous, instead of firing an alert as it does for all other +``stats_counts.http.rpm.publishers.*``, because they have 168 defined, Analyzer +sends the metric to Mirage. -Configure ``settings.py`` with some alert tuples that have the -``SECOND_ORDER_RESOLUTION_HOURS`` defined, e.g.: +The below would NOT have the desired effect of analysing the metrics +seasonal_pub1 and seasonal_pub_freddy with Mirage .. code-block:: python ALERTS = ( ("skyline", "smtp", 1800), - ("stats_counts.http.rpm.publishers.*", "smtp", 300, 168), + ("stats_counts.http.rpm.publishers.*", "smtp", 300), # --> To alerter + ("stats_counts.http.rpm.publishers.seasonal_pub1", "smtp", 300, 168), # --> NEVER gets reached + ("stats_counts.http.rpm.publishers.seasonal_pub_freddy", "smtp", 300, 168), # --> NEVER gets reached ) +Hopefully it is clear that the first ``stats_counts.http.rpm.publishers.*`` +alert tuple would route ALL to alerter and seasonal_pub1 and seasonal_pub_freddy +would never get sent to be analyzed by Mirage. + +Enabling +-------- + And ensure that ``settings.py`` has Mirage options enabled, specifically the basic ones: @@ -275,19 +343,16 @@ basic ones: ENABLE_FULL_DURATION_ALERTS = False MIRAGE_ENABLE_ALERTS = True -Start Mirage: +Start Mirage and restart Analyzer: .. code-block:: bash cd skyline/bin - sudo ./mirage.d start - + ./mirage.d start + ./analyzer.d restart -Mirage allows for testing of real time data and algorithms in parallel to -Analyzer allowing for comparisons of different timeseries and/or algorithms. -Mirage was inspired by Crucible and the desire to extend the temporal data pools -available to Analyzer in an attempt to handle seasonality better, reduce noise -and increase signal, specifically on seasonal metrics. +Rate limited +------------ Mirage is rate limited to analyze 30 metrics per minute, this is by design and desired. Surfacing data from Graphite and analyzing ~1000 data points in a @@ -300,6 +365,10 @@ signals would still be sent. What Mirage does ================ +- If Analyzer finds a metric to be anomalous at :mod:`settings.FULL_DURATION` + and the metric alert tuple has ``SECOND_ORDER_RESOLUTION_HOURS`` and + :mod:`settings.ENABLE_MIRAGE` is ``True``, Analyzer will push the metric + variables to the Mirage check file. - Mirage watches for added check files. - When a check is found, Mirage determines what the configured ``SECOND_ORDER_RESOLUTION_HOURS`` is for the metric from the tuple in diff --git a/docs/overview.rst b/docs/overview.rst index 9d59df18..d6703bec 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -96,7 +96,7 @@ Skyline uses to following technologies and libraries at its core: 4. **scipy** - `SciPy`_ Library - Fundamental library for scientific computing 5. **pandas** - `pandas`_ - Python Data Analysis Library 6. **mysql/mariadb** - a database - `MySQL`_ or `MariaDB`_ -7. **:red:`re`:brow:`brow`** - Skyline uses a modified port of Marian +7. :red:`re`:brow:`brow` - Skyline uses a modified port of Marian Steinbach's excellent `rebrow`_ .. _Etsy: https://www.etsy.com/ diff --git a/docs/skyline.mirage.overview.uml b/docs/skyline.mirage.overview.uml new file mode 100644 index 00000000..ae2ca522 --- /dev/null +++ b/docs/skyline.mirage.overview.uml @@ -0,0 +1,41 @@ +# The source uml for skyline.mirage.overview.png as generated by PlantUML +@startuml +title Skyline Mirage - overview + +actor You << Human >> + +[Graphite] as Graphite + +[alerter] as alerter + +[Analyzer] as Analyzer + +[Mirage] as Mirage + +[Panorama] as Panorama + +[Redis] as Redis + +Analyzer -down-> Panorama : anomalous metric WITHOUT\nSECOND_ORDER_RESOLUTION_HOURS\nsend to Panorama\nIF no Panorama metric key exist n Redis + +Analyzer -left--> Redis : Analyzer gets metric\ntimeseries data from Redis + +Analyzer -left--> Redis : Analyzer checks and sets\nmetric and app\nexpiry keys in Redis + +Analyzer -down-> alerter : Analyzer ALERT\nanomalous metric WITHOUT\nSECOND_ORDER_RESOLUTION_HOURS\nsend alert IF the metric\nnamespace is defined in ALERTS\nand the metric has no expiry key set + +Analyzer -down-> Mirage : anomalous metric WITH\nSECOND_ORDER_RESOLUTION_HOURS\nset to 168 in ALERTS tuple\nDo not go to alerter\nsend to Mirage + +Mirage <-- Graphite : Mirage gets 168 hours\nof timeseries data\nfor the metric\nfrom Graphite + +Mirage -up--> Redis : Mirage checks and sets\nmetric and app\nexpiry keys in Redis + +Mirage -down-> Panorama : anomalous metric WITH\nSECOND_ORDER_RESOLUTION_HOURS\nsend to Panorama\nIF no Panorama metric key exist n Redis + +Mirage -right-> alerter : Mirage ALERT\nanomalous metric WITH\nSECOND_ORDER_RESOLUTION_HOURS\nsend alert IF the metric has no expiry key set + +alerter -down-> You + +right footer Source https://github.com/earthgecko/skyline/tree/v1.0.3-beta-crucible/docs/skyline.mirage.overview.uml\nGenerated by http://plantuml.com/plantuml + +@enduml diff --git a/docs/webapp.rst b/docs/webapp.rst index abeee4ab..dcdb309a 100644 --- a/docs/webapp.rst +++ b/docs/webapp.rst @@ -29,7 +29,7 @@ A basic overview of the Webapp ============================== .. figure:: images/crucible/webapp/skyline.webapp.basic.overview.png - :alt: A simplified workflow of Skyline + :alt: A basic overview of the Webapp Deploying the Webapp diff --git a/skyline/webapp/templates/now.html b/skyline/webapp/templates/now.html index 837f9c77..2b410aad 100644 --- a/skyline/webapp/templates/now.html +++ b/skyline/webapp/templates/now.html @@ -29,7 +29,19 @@

      + +
      + + + + + + +
      + #18 + The graph datetime ticker is rendered in the time zone of YOUR browser in this now view
      + {% endblock %} diff --git a/skyline/webapp/templates/panorama.html b/skyline/webapp/templates/panorama.html index 4182cf00..2341e4d8 100644 --- a/skyline/webapp/templates/panorama.html +++ b/skyline/webapp/templates/panorama.html @@ -161,6 +161,18 @@

      Anomaly Search

      Original, unaggregated anomalous datapoint
      + +
      + + + + + + +
      + #17 + The first element in initial list does not fetch timeseries data, mouseover any other and then the first will be available
      +
      {% endif %} {% endif %}