Download - Data Driven Infrastructure
Friday, August 23, 13
DataDrivenInfrastructure
Friday, August 23, 13
Friday, August 23, 13
?
Friday, August 23, 13
Let meTell youa story
Friday, August 23, 13
What is a
Cloud
Friday, August 23, 13
I don’t have to think about IT
With the Cloud...
Friday, August 23, 13
Friday, August 23, 13
aaSPlatformSoftware
InfrastructureFriday, August 23, 13
Friday, August 23, 13
Friday, August 23, 13
Where is our cloud?
Friday, August 23, 13
Friday, August 23, 13
UtopiaFriday, August 23, 13
James Fryman
Friday, August 23, 13
Friday, August 23, 13
Automations Junkie
Friday, August 23, 13
Are youCrazy?
Friday, August 23, 13
Goals?Data?What
Friday, August 23, 13
Goals?Data?What
Friday, August 23, 13
Goals?Data?What
Friday, August 23, 13
Machine
Parsable
Friday, August 23, 13
There is SystemOne
Friday, August 23, 13
Feedback
PuppetDBProvisioning
Configuring
Destroying
gPanel
Friday, August 23, 13
Partsof the
System
Friday, August 23, 13
provisioner
Friday, August 23, 13
Home GrownFriday, August 23, 13
Home Grown
Friday, August 23, 13
controller
Friday, August 23, 13
Lots O’ Models
Friday, August 23, 13
file { '/etc/facter/facts.d/quagga_manage_service': ensure => present, replace => false,} if $::quagga_manage_service { $service_state[ensure] = running $service_state[enable] = true} else { $service_state[ensure] = undef $service_state[enable] = undef} service { 'quagga': ensure => $service_state[ensure], enable => $service_state[enable],}
Friday, August 23, 13
orchestrator
Friday, August 23, 13
ChatOps
Friday, August 23, 13
ChatOps
Friday, August 23, 13
Feedbackof the
System
Friday, August 23, 13
Metrics&Monitoring
Friday, August 23, 13
begin JSON.parse(RestClient.get(url)).each do |cache| data["#{cache['target']}"] = 0 count = 0 cache["datapoints"].each do |point| unless (point[0].nil?) data["#{cache['target']}"] += point[0] count += 1 end end data["#{cache['target']}"] /= count data["total"] += data["#{cache['target']}"] endrescue ZeroDivisionError => e puts "UNKNOWN metric not in graphite!" exit EXIT_UNKNOWNrescue => e puts e.message exit EXIT_CRITICALend
Friday, August 23, 13
begin JSON.parse(RestClient.get(url)).each do |cache| data["#{cache['target']}"] = 0 count = 0 cache["datapoints"].each do |point| unless (point[0].nil?) data["#{cache['target']}"] += point[0] count += 1 end end data["#{cache['target']}"] /= count data["total"] += data["#{cache['target']}"] endrescue ZeroDivisionError => e puts "UNKNOWN metric not in graphite!" exit EXIT_UNKNOWNrescue => e puts e.message exit EXIT_CRITICALend
Friday, August 23, 13
event
Friday, August 23, 13
eventlog
Friday, August 23, 13
eventalertlog
Friday, August 23, 13
eventalertlog error
Friday, August 23, 13
Must self-correct
Friday, August 23, 13
Feedback
PuppetDBProvisioning
Configuring
Destroying
gPanel
Friday, August 23, 13
Friday, August 23, 13
Deployable using text files
Friday, August 23, 13
Modularity
Friday, August 23, 13
haproxy::proxy { $es_proxy_name: proxy => 'listen', mode => 'http', ip => $::ipaddress_lo, port => '9200', config => { balance => 'roundrobin', }, }
Friday, August 23, 13
haproxy::proxy { $es_proxy_name: proxy => 'listen', mode => 'http', ip => $::ipaddress_lo, port => '9200', config => { balance => 'roundrobin', }, }
Friday, August 23, 13
haproxy::proxy::member { $es_proxy_name: hostname => $::ec2_local_ipv4, port => '9200', param => [ 'weight 1', 'maxconn 1000', 'check', ], }
Friday, August 23, 13
collectd::plugin { [ 'cpu', 'load', 'memory', 'swap', 'irq', 'exec', 'entropy', ]: }
collectd::plugin { [ 'df', 'interface', 'protocols', 'disk', ]: config => true }
Friday, August 23, 13
Level 4:Templates
Level 5:Data Driven
Friday, August 23, 13
SelfAuthoritative
Friday, August 23, 13
def self.collect_resources(resource) query = [ "and", ["=", "type", "File"], ["=", "exported", true], ["=", "tag", "nagios::object::#{resource}"], ["=", ["node", "active"], true] ] self.search('/v2/resources', query.to_json) end
Friday, August 23, 13
def self.collect_resources(resource) query = [ "and", ["=", "type", "File"], ["=", "exported", true], ["=", "tag", "nagios::object::#{resource}"], ["=", ["node", "active"], true] ] self.search('/v2/resources', query.to_json) end
Friday, August 23, 13
# Seed the initial file with false, and enable # on next run with gh-nagios enable_pager <hostname>
file { '/etc/facter/facts.d/enable_pager.txt': ensure => file, owner => 'root', group => 'root', mode => '0644', content => 'enable_pager=false', replace => false,}
Friday, August 23, 13
@@file { "/etc/nagios/objects/${type}.d/${filename}.cfg": content => template('nagios/etc/nagios/object.erb'), mode => '0444', group => 'nagios', notify => Service['nagios'], }
Friday, August 23, 13
Tips
Friday, August 23, 13
Refactoring
Friday, August 23, 13
Refactoring
Friday, August 23, 13
least to most
specificFriday, August 23, 13
frymanet.com
mysqlnginx rails
rubycommon admin
package repos
Friday, August 23, 13
graduate to
paramsFriday, August 23, 13
class ntp::params { $defaults = { package => { version => ‘latest’, }, config => { servers => [‘pool.ntp.org’], }, }}
Friday, August 23, 13
externalize
Friday, August 23, 13
class ntp::params { $defaults = { package => { version => hiera(‘ntp_package_version’), }, config => { servers => hiera(‘ntp_servers’), }, }}
Friday, August 23, 13
CloudFormation
Friday, August 23, 13
CloudFormation
Friday, August 23, 13
"Resources": { "RendererServerGroup": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Properties": { "AvailabilityZones": { "Fn::GetAZs": "" }, "LaunchConfigurationName": { "Ref": "LaunchConfig" }, "MinSize": "2", "MaxSize": "16", "Tags": [ { "Key": "Environment", "Value": "Production", "PropagateAtLaunch": "true" }, { "Key": "Role", "Value": "renderer", "PropagateAtLaunch": "true" } ] } },Friday, August 23, 13
Autoloading
Friday, August 23, 13
# autoloader.ppclass nagios::autoload_helpers { $helpers = get_nagios_helpers()
case $::puppetversion { /^3/: { include $helpers } default: { nagios::autoload_helpers::import_shim { $helpers: } } }}
Friday, August 23, 13
# autoloader.ppclass nagios::autoload_helpers { $helpers = get_nagios_helpers()
case $::puppetversion { /^3/: { include $helpers } default: { nagios::autoload_helpers::import_shim { $helpers: } } }}
Friday, August 23, 13
module Puppet::Parser::Functions newfunction(:get_nagios_helpers, :type => :rvalue, :doc => "Grab all modules that have nagios helpers for import") do
module_path = File.expand_path('..', Puppet::Module.find('nagios',compiler.environment.to_s).path)
helpers = Dir["#{module_path}/**/nagios/helpers.pp"].map do |d| "#{d.split('/')[-4]}::nagios::helpers" done
helpers endend
Friday, August 23, 13
Modeling
Friday, August 23, 13
Be Dynamic
Friday, August 23, 13
Be Dynamic
Friday, August 23, 13
<%- if @comment -%>### <%= @comment %><%- end -%><%= @type %> <% if @label %><%= @label %><% end %> {<%- @config.sort.reverse.each do |key,value| -%> <%- if value.class == Array -%> <%- value.each do |element| -%> <%= key %>(<%= element %>); <%- end -%> <%- else -%> <%= key %>(<%= value %>); <%- end -%><%- end -%>};
Friday, August 23, 13
Fencing Resources
Friday, August 23, 13
# Seed the initial file with false, and enable # on next run with gh-nagios enable_pager <hostname>
file { '/etc/facter/facts.d/enable_pager.txt': ensure => file, owner => 'root', group => 'root', mode => '0644', content => 'enable_pager=false', replace => false,}
Friday, August 23, 13
if $::enable_pager { @@file { "/etc/nagios/objects/${type}.d/${filename}.cfg": content => template('nagios/etc/nagios/object.erb'), mode => '0444', group => 'nagios', notify => Service['nagios'], }}
Friday, August 23, 13
Buy it?
Friday, August 23, 13
Buy it?
Friday, August 23, 13
It’s About
Friday, August 23, 13
Missing?What’s
Friday, August 23, 13
Language
Friday, August 23, 13
Predictive Analysis
Friday, August 23, 13
Coming
Home
Friday, August 23, 13
Goals?Data?What
Friday, August 23, 13
SystemsThinking
Recap
Friday, August 23, 13
There is SystemOne
Machine
ParsableMust be aKnownQuantity
SelfAuthoritative
Must self-correctFriday, August 23, 13
Friday, August 23, 13
what’s next?
Friday, August 23, 13
what’s next?
Friday, August 23, 13