Skip to content

Instantly share code, notes, and snippets.

@jcooklin
Last active December 3, 2015 19:43
Show Gist options
  • Save jcooklin/7235b7eddb5761c36727 to your computer and use it in GitHub Desktop.
Save jcooklin/7235b7eddb5761c36727 to your computer and use it in GitHub Desktop.
snap-preso.html
<!DOCTYPE html>
<html>
<head>
<title>snap</title>
<meta charset="utf-8">
<style>
@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
@import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
@import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
body { font-family: 'Droid Serif'; }
h1, h2, h3 {
font-family: 'Yanone Kaffeesatz';
font-weight: normal;
}
.remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
</style>
</head>
<body>
<textarea id="source">
class: center, middle
# [snap](http://nickapedia.com/2015/12/02/what-if-collecting-data-center-telemetry-was-a-snap/)
A modern telemetry framkework
[![snap](https://cloud.githubusercontent.com/assets/12282848/11547103/516a352e-9906-11e5-82e5-b9865b2f2ec1.jpg)](https://github.com/intelsdi-x/snap)
---
# Agenda
1. Introduction
1. Demo
1. Writing a plugin
1. Futures
1. QA
---
# Why
**Snap provides value by exposing IA platform telemetry in a frictionless manner** enabling better data center scheduling
and workload management through access to underlying telemetry data and platform metrics.
<br/>
The snap framework will improve system administrators’ control and intelligent use of data center infrastructure in cloud environments by:
* Providing powerful clustered control of telemetry workflows across small or large clusters
* Extensible plugin based architecture
* API centric framework
* Intelligent scheduling and workflow management
* Empowering systems to expose a consistent set of telemetry data
* Improving the deployment model, clustering, packaging, and security
???
https://communities.intel.com/community/itpeernetwork/datastack/blog/2015/12/02/snap-framework-next-step-toward-cloud-for-all
---
# Extensible plugin based architecture
![cpp](https://www.dropbox.com/s/xht8dli4ftstz6p/collect-process-publish.png?raw=1)<br/>
* Open model for third party plugins
* Dynamically generated telemetry catalog
* Decoupled data collection and publishing
* Flexible architecture allows for custom built publisher integration by open source or commercial entities
* [Process] Convert data into alternate data model for consumption by other systems such as OpenStack Ceilometer
* [Process] Encryption of all or part of telemetry data before publishing
* [Process] Injection of remote queries for tokens, filtering, machine learning, etc.
---
# A REST based API exposes **ALL** capabilities
* Listing/loading/unloading plugins
* Listing available metrics
* Creating/removing/starting/stopping tasks
* Updating configuration
*The agent is dynamic and does not require a restart*
---
# Security - plugin encryption
The communication between the Pulse Daemon and the plugins is encrypted by default.
1. Plugin Start Up
1. Generate asymmetric key pair
1. Trade public keys<br>
![start](https://www.dropbox.com/s/bw8qdnzrg2b4rsp/plugin-start-enc.png?raw=1)
1. Symmetric Key Exchange
1. Daemon generates a key
1. Daemon encrypts key with the plugin’s public key
1. Daemon delivers encrypted key via SetKey() RPC call
![exchange](https://www.dropbox.com/s/gongc7pafyyfsk2/plugin-key-exchange-enc.png?raw=1)
1. Encrypted Communication via Symmetric Key<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;![enc](https://www.dropbox.com/s/526xeokuem4ruax/plugin-encrypted-enc.png?raw=1)
???
Should you want to
disable the encrypted communication, when authoring a plugin, use the Unsecure option for your plugin's
meta:
```
//Meta returns the metadata for MyPlugin
func Meta() *plugin.PluginMeta {
return plugin.NewPluginMeta(name, ver, type, ct, ct2, plugin.Unsecure(true))
}
```
---
# Security - plugin signing
* [Snap plugin signing](https://github.com/intelsdi-x/snap/blob/master/docs/PLUGIN_SIGNING.md) using public-key cryptography
* The plugin is signed with the private key
* The public key is added to the keyring referenced when snapd starts
* On plugin load snapd validates the plugins signature
* Plugin signing is enabled by default
* SSL for the API
```
snapd --rest-https
```
---
# Demo
1. [Load/Unload plugins](https://www.dropbox.com/s/xbg871ybd1m63co/load-list-plugins.gif?raw=1)
1. [List metrics](https://www.dropbox.com/s/xbg871ybd1m63co/load-list-plugins.gif?raw=1)
1. Unload a plugin
1. [Start pulse and autoload plugins](https://www.dropbox.com/s/8a5i506zwd0pdnu/autoload-plugins.gif?raw=1)
1. [Plugin signing](https://www.dropbox.com/s/ucryh3tcmzbo44t/create-signing-files.gif?raw=1)
???
Things to point out
* different types of plugins
* plugin version
* metric versions
* plugins are loaded dynamically (no need to restart the daemon)
* metric catalog
* the catalog is selected against when you create a task
---
# Tribe
Tribe is the name of the clustering feature in snap. When it is enabled nodes will agree on plugins and/or tasks
when they join what is called an agreement. When an action is taken on a node that is a member of an agreement
that action will be carried out by all other members of the agreement. When a new node joins an existing agreement
it will retrieve plugins and tasks from the members of the agreement.
---
class: center, middle
#[plugin catalog](https://github.com/intelsdi-x/snap/blob/master/docs/PLUGIN_CATALOG.md)
---
# Futures
* [Authentication/Authorization/Auditing](https://github.com/intelsdi-x/snap/issues/286)
* [Advanced plugin routing - sticky](https://github.com/intelsdi-x/snap/issues/539)
* [Ability to add/revoke trust during runtime](https://github.com/intelsdi-x/snap/issues/482)
* distributed workflows (separate nodes for process and publish, etc.)
* event subscription (events trigger workflow collection)
---
class: center, middle
##checkout out [https://github.com/intelsdi-x/snap](https://github.com/intelsdi-x/snap)
Thanks!
</textarea>
<script src="https://gnab.github.io/remark/downloads/remark-latest.min.js">
</script>
<script>
var slideshow = remark.create();
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment