From 73ef32b2b6a66cfa07567697e59ed3f8d3f993b4 Mon Sep 17 00:00:00 2001 From: Sandy Walsh Date: Wed, 18 Feb 2015 09:13:21 -0800 Subject: [PATCH] Start on STv3 docs This is not only the docs, but the stacktach.com website. Change-Id: I6b1f71a2fa90966f55f4cf21181d729093a53718 --- docs/StackTach_160x70.png | Bin 0 -> 5408 bytes docs/about.html | 434 +++++++++++++++++++++++++++++++++++ docs/index.html | 100 ++++++++ docs/pipeline_processing.gif | Bin 0 -> 14030 bytes docs/stream_states.gif | Bin 0 -> 8788 bytes docs/stv3-narrow.css | 80 +++++++ docs/trigger_def.gif | Bin 0 -> 63464 bytes docs/v3_arch.gif | Bin 0 -> 26476 bytes logging.conf | 4 +- 9 files changed, 616 insertions(+), 2 deletions(-) create mode 100644 docs/StackTach_160x70.png create mode 100644 docs/about.html create mode 100644 docs/index.html create mode 100644 docs/pipeline_processing.gif create mode 100644 docs/stream_states.gif create mode 100644 docs/stv3-narrow.css create mode 100644 docs/trigger_def.gif create mode 100644 docs/v3_arch.gif diff --git a/docs/StackTach_160x70.png b/docs/StackTach_160x70.png new file mode 100644 index 0000000000000000000000000000000000000000..16dc01cf321a3a01ef7e029512ed78a0f914279b GIT binary patch literal 5408 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 KMNUMnLSTZZoM6@f literal 0 HcmV?d00001 diff --git a/docs/about.html b/docs/about.html new file mode 100644 index 0000000..2350225 --- /dev/null +++ b/docs/about.html @@ -0,0 +1,434 @@ + + + + + + + + + + + + StackTach.v3 + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+

The Parts

+

Let's spend a few seconds to talk about the StackTach.v3 components and establish some terminology.

+ + + +
    +
  • The source application (aka: your application) publishes notifications to the queue. +
  • Yagi consumes these notifications from the queue and passes them onto a chain of Yagi Handlers. +
  • Some yagi handlers include: + +
  • Winchester takes the distilled notifications (called events) and stores them in the MySQL database. +
  • Streams may be created or processed as new events flow into the system. This can result in new events or notifications being generated. +
  • Any new notifications can be published back into the queue for subsequent processing via the Notabene pipeline handler. +
  • ... the sequence repeats itself. +
+ +
+
+

Enabling notifications in OpenStack

+
+
+

In order to get notifications from OpenStack, you'll need to put the following lines in your service configuration files.

+ +
+--notification_driver=nova.openstack.common.notifier.rpc_notifier
+--notification_topics=monitor
+
+ +

Where "monitor" is the name of the queue you wish to send the notifications to. When you are configuring Yagi, you'll need to ensure the queue name prefix matches what you've defined here.

+
+
+ +

Consuming Notifications with Yagi

+

You're going to need a way to get those notifications out of your queuing system. That's what Yagi does. Yagi reads notifications from one place and spits them out somewhere else. It's highly configurable and battle-tested for large scale deployment.

+ +

You launch the yagi-events process with the following command:

+
+yagi-event --config yagi.conf
+
+

where yagi.conf is the name of your yagi configuration file.

+ +A sample Yagi config file +
+[global]
+verbose = False
+debug = True
+update_timer = 10
+
+[event_worker]
+event_driver = yagi.broker.rabbit.Broker
+
+[rabbit_broker]
+host = localhost
+user = guest
+password = guest
+port = 5672
+vhost = /
+poll_delay = 0.5
+
+[consumers]
+queues = monitor.info
+
+[consumer:monitor.info]
+apps = winchester.yagi_handler.WinchesterHandler, yagi.handler.shoebox_handler.ShoeboxHandler
+exchange = monitor
+exchange_type = topic
+routing_key = monitor.info
+durable = True
+max_messages = 100
+
+ +

The important part of this configuration is the [event_worker] section. This says we want to use the RabbitMQ data source. The RabbitMQ connectivity information is stored in the [rabbit_broker] section. The name of each rabbitmq queue to consume from is specified in the [consumers] section. For every queue you define there, you will need a [consumer:<queue_name>] section. This last section is where there real magic happens. Beyond defining the exchange, routing_key and durability characteristics, it defines the chain of Yagi Handlers that will run on every notification that gets consumed.

+

You can write your own Yagi handlers if you like, but there are a number that ship with StackTach.v3 to do some interesting things. The most important of these is the winchester.yagi_handler:WinchesterHandler. This handler is your entry point into StackTach.v3 stream processing. But first, we need to convert those messy notifications into events ...

+

Distilling Notifications to Events

+

Now we have notifications coming into Winchester. But, as we hinted at above, we need to take the larger notification and distill it down into a, more manageable, event. The stack-distiller module makes this happen. Within StackTach.v3, this is part of winchester.yagi_handler:WinchesterHandler.

+

A notification is a large, nested JSON data structure. But we don't need all of that data for stream processing. In fact, we generally only require a few Traits from the notification. That's what distilling does. It pulls out the important traits, scrubs the data and uses that. Distillations are done via the distillation configuration file (specified in winchester.conf).

+ +

Only timestamp and event_type are required traits.

+A sample notification +
+{
+  '_context_is_admin': True,    
+  '_context_project_id': u'7c150a59fe714e6f9263774af9688f0e',    
+  '_context_quota_class': None,    
+  '_context_read_deleted': u'no',    
+  '_context_remote_address': u'10.0.2.15',    
+  '_context_request_id': u'req-d68b36e0-9233-467f-9afb-d81435d64d66',    
+  '_context_roles': [u'admin'],    
+  '_context_timestamp': u'2012-05-08T20:23:41.425105',    
+  '_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2',    
+  'event_type': u'compute.instance.create.end',    
+  'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451',    
+  'priority': u'INFO',    
+  'publisher_id': u'compute.vagrant-precise',    
+  'timestamp': u'2012-05-08 20:23:48.028195',
+  'payload': {
+      'created_at': u'2012-05-08 20:23:41',                 
+      'deleted_at': u'',                 
+      'disk_gb': 0,                 
+      'display_name': u'testme',                 
+      'fixed_ips': [{ 'address': u'10.0.0.2',                                 
+                  'floating_ips': [],                                 
+                  'meta': {},                                 
+                  'type': u'fixed',               
+                  'version': 4}],                 
+      'image_ref_url': u'http://10.0.2.15:9292/images/UUID',                 
+      'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1',                 
+      'instance_type': u'm1.tiny',                 
+      'instance_type_id': 2,                 
+      'launched_at': u'2012-05-08 20:23:47.985999',                 
+      'memory_mb': 512,                 
+      'state': u'active',                 
+      'state_description': u'',                 
+      'tenant_id': u'7c150a59fe714e6f9263774af9688f0e',                 
+      'user_id': u'1e3ce043029547f1a61c1996d1a531a2',                 
+      'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3',                 
+      'vcpus': 1,                 
+      'root_gb': 0,                 
+      'ephemeral_gb': 0,                 
+      'host': u'compute-host-name',                 
+      'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4',                 
+      'os_type': u'linux?',                 
+      'architecture': u'x86',                 
+      'image_ref': u'UUID',                 
+      'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5',                 
+      'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6',                    
+  }
+}
+
+ +

A typical distiller file might look like this

+ +A sample stack-distiller.yaml +
+- event_type: compute.instance.*
+  traits: 
+    tenant_id:
+      fields:
+        - payload.tenant_id
+        - _context_project_id
+    user_id:
+      fields: payload.user_id
+    request_id:
+        fields: _context_request_id
+    instance_id:
+      fields:
+        - payload.instance_uuid
+        - payload.instance_id
+        - exception.kwargs.uuid
+        - instance.uuid
+
+

For details on the distiller configuration grammar, see the associated docs. Note that the distiller config file is in YAML format.

+ +

When processed, the notification would be converted into an event that looks like this:

+A sample event +
+{
+  'event_type': 'compute.instance.create.end',
+  'timestamp': datetime(2012, 05, 08, 20, 23, 48, 28195),
+  'tenant_id': '7c150a59fe714e6f9263774af9688f0e',
+  'user_id': '1e3ce043029547f1a61c1996d1a531a2',
+  'request_id': 'req-d68b36e0-9233-467f-9afb-d81435d64d66',
+  'instance_id': '9f9d01b9-4a58-4271-9e27-398b21ab20d1'
+}
+
+ +

We call event key/value pairs Traits. This will be important when we start defining Streams.

+ +

Differences between a notification and an event

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CriteriaNotificationEvent
Supports nested-data
Supports lists
Max string lengthno limit255
Float support
Integer support
Boolean supportCoersed to Integer
Millisecond resolution datetime support
Datetime range support
+ + +

Streams

+ +

Streams are the key to StackTach.v3. You should have a good understanding about the lifecycle of a stream and how to define a stream. So let's start with some basics ...

+ +

As events come into Winchester, they are sorted into streams. Any trait in the event can be used to differentiate which stream they go into. One event can go in to many streams. These traits are called distinguishing_traits since they are used to distinguish one stream from another. All of this is defined in the winchester configuration file.

+ +A bare-bones Winchester config file. +

+---
+database:
+    url: mysql://winchester:testpasswd@localhost/winchester
+
+distiller_config: event_definitions.yaml
+trigger_definitions: triggers.yaml
+pipeline_config: pipelines.yaml
+
+pipeline_handlers:
+    logger: winchester.pipeline_handler:LoggingHandler
+    usage: winchester.pipeline_handler:UsageHandler
+    notabene: winchester.pipeline_handler:NotabeneHandler
+
+ +

The first thing you'll notice is the database connection string. But then you'll notice that the Winchester module needs three other configuration files. The distiller config file we've already covered. The other two require a little more explaination. They define your Triggers and your Pipelines.

+ +
+
+

Telling Yagi WinchesterHandler where to find the Winchester config file.

+
+
+

We left that little detail out when we were explaining Yagi previously. But the WinchesterHandler needs to know where your winchester config file lives. You define this by adding a [winchester] section to your yagi config file. + +

+[winchester]
+config_file = winchester.yaml
+
+
+
+ + +

Triggers and Pipelines

+

The trigger definition file tells winchester:

+
    +
  • into which streams to place incoming events +
  • which events to accept into a stream +
  • when a stream is ready for processing +
  • when a stream expires +
  • how to process ready streams +
  • how to process expired streams +
+ + + +

Like the distiller config file, the trigger definition config file is YAML based.

+ +Sample trigger def file +
+- name: my_trigger
+  distinguished_by:
+  - request_id
+  expiration: "$last + 1h"
+  fire_pipeline: "my_fire_pipeline"
+  expire_pipeline: "my_expire_pipeline"
+  match_criteria:
+  - event_type:
+    - compute.instance.*
+  fire_criteria:
+  - event_type: compute.instance.*.end
+
+
+
+ +

The matching criteria states the traits that need to match for the event to be included in this stream. The most common matching criteria is event_type, but you could also limit event inclusion by region, server, time range, etc. Depending on your application, it's generally better to be more inclusive of events initially.

+

Streams are buckets that collect events. The bucket the event goes in is determined by the distinguishing traits you define. Generally these are traits that have a somewhat constrained set of values. For example, instance_id, request_id, user_id, tenant_id, region, server, ip_address ... are all good choices. Timestamp is generally not a good distinguishing trait since it varies so greatly. You would end up with a different stream for every incoming event and each stream would only have one event in it. Not very useful. Also, you can define multiple distinguishing traits. For example: region and the "day" portion of the timestamp. This would produce one stream for each region for each day of the month. If you had five regions, you'd end up with 5*31 stream buckets. The choices are limitless.

+

At some point you have to do something with the data in your buckets. This is what the fire criteria defines. You can make time-based firing criteria (such as 2 hours past the last collected event) or trait-based criteria (such as "when you see the 'foo' event"). Wildcards are permitted in matching criteria. Time-based firings are defined with the "expiration" setting. There is a simple grammar for defining how much time has to elapse for a expiry to occur. We will go into detail on this later. For real-time stream processing, it's best to keep these expiries short or stick with trait-based firing criteria. Expiries = lag.

+ +

Finally, we define the pipelines that will process the streams when they fire or expire. Pipelines are sets of pipeline handlers that do the processing. A pipeline handler is called with all the events in that stream. The events are in the temporal order they were generated. A pipeline handler does not need to concern itself with querying the database. It has all that it needs. Out-of-the-box, StackTach.v3 comes with a collection of pipeline handler for computing OpenStack usage for billing as well as re-publishing new notifications back into the queue. More are constantly being added and writing your own pipeline handlers is trivial. But more on that later.

+ +

You can define different pipelines for streams that fire and streams that expire. In the trigger definition file you simply give the name of the pipeline. Your winchester config file points to the pipeline configuration file that lists the pipeline handlers to run.

+ +Sample pipeline definition file +

+---
+my_fire_pipeline:
+    - logger
+    - usage
+    - name: notabene
+      params: 
+        host: localhost
+        user: guest
+        password: guest
+        exchange_type: topic
+        queue_name: monitor.info
+        env_keys:
+            - usage_notifications
+
+my_expire_pipeline:
+    - logger
+    - usage
+
+ +

You can see the name of each of the pipeline handlers here. These will be called in the order they appear. You'll note that the notabene handler takes a set of parameters. These are passed into the handler when the pipeline is being processed. Back in the winchester configuration file you'll see where these handler names are mapped to the Python code that implements them. You can add your own handlers there.

+ +

Stream States

+ + + +
    +
  • Active - the stream is collecting events +
  • Firing - firing criteria has been met and pipeline processing can occur +
  • Expiring - expiry criteria has been met and pipeline processing can occur +
  • Completed - pipeline processing has completed +
  • Error - pipeline processing failed +
  • Expiry-Error - expiry pipeline processing failed +
  • Retry-Firing - stream marked to retry fire pipeline processing +
  • Retry-Expiry - stream marked to retry expiry pipeline processing +
+ + + +

During pipeline processing each handler is called to process the events in the stream. A handler has three methods: handle_events(), commit() and rollback(). The handle_events() method is called for each handler in the order they're defined. If they all succeed, the commit() method of each handler is called. Otherwise, the rollback() method of each handler is called. No work should be performed in the handle_events() method. The data should be pre-computed and stored, but not actioned until in the commit() method. In the case of errors, the handle_event() method could be called many times. So, to ensure at-most-once functionality, non-reversable operations should be reserved for the commit() call. Things like, publishing new notifications, emitting metrics, sending emails, etc. should be done in commit(). rollback() is a last chance for you to unwind any work you may have performed.

+ +

Stream debugging

+ +

As you've seen, there are a lot of moving parts to high-volume stream processing. Dealing with thousands of events per second and monitoring many stream definitions is hard. We have added some special debugging tools to StackTach.v3 to help with this. There are better ways of debugging streams than turning your log output to DEBUG and sifting through the volumes of output. We recommend you keep your winchester log levels at INFO and turn on debugging on a per-stream basis. This is done in your trigger definition file.

+ +
+---
+- name: test_trigger
+  debug_level: 2
+  distinguished_by:
+  - instance_id
+  - timestamp: "day"
+...
+
+ +

The debug_level setting will enable special logging output for this stream only. The higher the number, the more detail (1 or 2 currently). Once enabled, and the yagi-event and pipeline-workers have been restarted, you will start to see log output like this:

+ +
+yagi.stats[INFO line: 44] messages_sent:100|c
+yagi.broker.rabbit[INFO line: 193] Update timer elapsed: 11 seconds
+yagi.broker.rabbit[INFO line: 198]      Sent 1100 messages from monitor.info
+yagi.broker.rabbit[INFO line: 200]      Sent 1100 total messages
+yagi.broker.rabbit[INFO line: 203]      Messages per second: 100.000000
+winchester.trigger_manager[INFO line: 195] Received 116 notifications. Saved 103 events.
+winchester.debugging[INFO line: 155] ---- Trigger Definition: test_trigger ----
+winchester.debugging[INFO line: 140] Fire Criteria: 397 checks, 2 passed
+winchester.debugging[INFO line: 144]  - Not in timerange = 1
+winchester.debugging[INFO line: 144]  - Wrong event type = 295
+winchester.debugging[INFO line: 144]  - Not enough matching criteria = 99
+winchester.debugging[INFO line: 140] Match Criteria: 207 checks, 200 passed
+winchester.debugging[INFO line: 144]  - No matching criteria = 1
+winchester.debugging[INFO line: 144]  - not 'instance_id' = 2
+winchester.debugging[INFO line: 144]  - Wrong event type = 4
+winchester.debugging[INFO line: 148] Counter "New stream" = 58
+winchester.debugging[INFO line: 148] Counter "Added events" = 100
+winchester.debugging[INFO line: 148] Counter "Ready to fire" = 1
+winchester.debugging[INFO line: 161] ----------------------------
+
+

The first yagi.broker.rabbit lines are from yagi itself and tells you how many events were digested over the last N seconds. Assuming this number is greater than zero, we can move onto stream debugging.

+

The winchester.debugging lines will tell you how fire and matching criteria is progressing. In this case, it's saying that 397 firing criteria checks were made and only 2 passed. If your debug level is 2, you will get breakdown of the reasons the checks failed. You can use this information to review your trigger definitions and see if something could be wrong. Additionally, the matching criteria results are detailed. In this case we see that, of 207 events, 200 were acceptable. The details on the 7 rejected are listed below. Finally, some "counters" are supplied on the stream processing in general. 58 new streams were created on this pass, 100 new events added to various "test_trigger" streams, and 1 stream is ready to fire.

+

By selectively turning on per-stream debugging, you can quickly find processing problems and ignore a lot of log noise.

+ +
+

© Dark Secret Software Inc. 2014

+
+ +
+ + + + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..a1cf54b --- /dev/null +++ b/docs/index.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + StackTach.v3 + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+

Real-Time Event Stream Processing

+

StackTach.v3 processes complex JSON streams at scale.

+

Learn More + Get Started +

+
+ +
+
+

Scalable

+

Queue consumption and pipeline processing workers can be easily added to handle large loads.

+ +

Modular

+

StackTach.v3 is comprised of a set of small Python libraries. You can deploy as is, or embed it into your existing monitoring solution.

+ +

REST API and cmdline tools

+

StackTach.v3 includes a REST API and rich cmdline tools for inspecting and managing streams.

+
+ +
+

Idempotent

+

When used as a basis for usage and billing, it's critical that events are not lost and that processing is not duplicated.

+ +

Flexible Archiving

+

StackTach.v3 distills large JSON notifications down into smaller, manageable events and off-loads the original notification for long term storage. Swift and HDFS are currently supported.

+ +

Simple deployment

+

StackTach.v3 requires a simple MySQL backend, which has known scaling characteristics. Ansible and Vagrant scripts are included for getting started.

+
+
+ +
+

© Dark Secret Software Inc. 2014

+
+ +
+ + + + + + + diff --git a/docs/pipeline_processing.gif b/docs/pipeline_processing.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cd161d2989ce89d078e24fd54f090eea5b21830 GIT binary patch literal 14030 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 literal 0 HcmV?d00001 diff --git a/docs/stv3-narrow.css b/docs/stv3-narrow.css new file mode 100644 index 0000000..861d12e --- /dev/null +++ b/docs/stv3-narrow.css @@ -0,0 +1,80 @@ +/* Space out content a bit */ +body { + padding-top: 20px; + padding-bottom: 20px; +} + +/* Everything but the jumbotron gets side spacing for mobile first views */ +.header, +.marketing, +.footer { + padding-right: 15px; + padding-left: 15px; +} + +/* Custom page header */ +.header { + border-bottom: 1px solid #e5e5e5; +} +/* Make the masthead heading the same height as the navigation */ +.header h3 { + padding-bottom: 19px; + margin-top: 0; + margin-bottom: 0; + line-height: 40px; +} + +/* Custom page footer */ +.footer { + padding-top: 19px; + color: #777; + border-top: 1px solid #e5e5e5; +} + +/* Customize container */ +@media (min-width: 768px) { + .container { + max-width: 730px; + } +} +.container-narrow > hr { + margin: 30px 0; +} + +/* Main marketing message and sign up button */ +.jumbotron { + text-align: center; + border-bottom: 1px solid #e5e5e5; +} +.jumbotron .btn { + padding: 14px 24px; + font-size: 21px; +} + +/* Supporting marketing content */ +.marketing { + margin: 40px 0; +} +.marketing p + h4 { + margin-top: 28px; +} + +/* Responsive: Portrait tablets and up */ +@media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-right: 0; + padding-left: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } +} + diff --git a/docs/trigger_def.gif b/docs/trigger_def.gif new file mode 100644 index 0000000000000000000000000000000000000000..a58002e6205b0de163d7376b21be49c4b8caba42 GIT binary patch literal 63464 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 Chrxva literal 0 HcmV?d00001 diff --git a/docs/v3_arch.gif b/docs/v3_arch.gif new file mode 100644 index 0000000000000000000000000000000000000000..4c833b0456539eb47756e63aa94c51efb16b327f GIT binary patch literal 26476 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